将 Mips 循环转换为 C
Converting Mips loop into C
我在将 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;
如果有人能提供一些提示或更正,我将不胜感激
与C-compatible描述相同的代码:
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] = ' ';
}
我对 header 的看法可能是错误的。
我在将 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;
如果有人能提供一些提示或更正,我将不胜感激
与C-compatible描述相同的代码:
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] = ' ';
}
我对 header 的看法可能是错误的。