将Mips循环转换为C

时间:2016-03-31 15:10:19

标签: c mips disassembly

我在将MIPS转换为C时遇到了很多麻烦(我对它很新)。我首先尝试编写MIPS代码旁边发生的事情。

blank: addi  $t0, $zero, 0                         t0 = 0;
       addi  $t2, $zero, ' '                       t2 = 32;
       j     L2                                  jump to L2;
L1:    sb    $t2, 0($t1)                         store new value in array
       addi  $t0, $t0, 1                         t0++;
L2:    add   $t1, $a0, $t0                     t1 = a0 + t0;
       lbu   $t3, 0($t1)                         t3 = array(t0)
       bne   $t3, $zero, L1                    if(t3!=0) jump to L1
       jr    $ra                                return; //jump to return address in ra

我已经尝试将其转换为C但我很困惑,我认为这是错误的。

int array[32];
int i;

for(int i=1; i!=0; i++)
    array[i]=i;

return;

如果有人能提供一些提示或更正,我会非常感激

1 个答案:

答案 0 :(得分:2)

与C兼容描述相同的代码:

                                             void func(char* array){ // possible fuction header
blank: addi  $t0, $zero, 0                         int t0 = 0;
       addi  $t2, $zero, ' '                       char t2 = 32;
       j     L2                                    char* t1;
                                                   goto L2:
L1:    sb    $t2, 0($t1)                           *t1 = t2;
       addi  $t0, $t0, 1                           t0++;
L2:    add   $t1, $a0, $t0                         t1 = &array[t0]; // or t1 = array+t0;
       lbu   $t3, 0($t1)                           char t3 = *t1;
       bne   $t3, $zero, L1                        if(t3!=0) goto L1;
       jr    $ra                                   return;

现在应该清楚这等于:

void func(char* array){
    for (int i=0; array[i] != 0; ++i)
        array[i] = ' ';
}

标题我可能错了。

相关问题