У меня много проблем с преобразованием этого кода C ++, возвращающего массив символов в инструкции MIPS - PullRequest
0 голосов
/ 03 апреля 2019

не уверен, что это правильное место, чтобы обратиться за помощью в решении проблем с кодированием.Но я пытаюсь преобразовать этот код в C ++ в инструкции MIPS.В настоящее время у меня есть этот код для замены массива символов на месте:

void swap(char *a, char *b){
    char temp = *a;
    *a = *b;
    *b = temp;
}

int main(int argc, char** argv) {
    int i, j;
    const int size = 5;
    char string[] = {'h', 'e', 'l', 'l', 'o'};
    j = size - 1;
    for(i = 0; i < j; i++){
        swap(&string[i], &string[j]);
        j--;
    }
    cout << string;

    return 0;
}

Инструкции MIPS, которые у меня сейчас есть:

.text 

    #size, i, j in $s0, $s1; $s2
    #base address of string in $s3
    addi $s0, $zero, 5      # size = 5
    add $s1, $zero, $zero       # i = 0
    add $s2, $s0, -1        # j = size - 1
    la $s3, string


forLoop1:       
    slt $t0, $s1, $s2       #i < j
    beq $t0, $zero, end1        #if i > j, branch end
    jal swap
    subi $s2, $s2, 1        #j--

end1:

#---------------------------------------------------------------
swap:
    lb $v0, 0($a0)      #get LHS byte
    lb $v1, 0($a1)      #get RHS byte

    sb $v1, 0($a0)      #store LHS byte
    sb $v0, 0($a1)      #store RHS byte

    jr $ra

.data

string: 
    .asciiz #hello

Я очень растерялся, когда дело доходит до написания MIPSинструкции.Может кто-нибудь может дать мне некоторую помощь или совет?Один конкретный вопрос, который у меня возникнет: как установить указатели в качестве аргументов и как я буду их реализовывать?Кроме того, как бы я сделал вывод?

...