Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mips到C的转换_C_Assembly_Mips - Fatal编程技术网

Mips到C的转换

Mips到C的转换,c,assembly,mips,C,Assembly,Mips,我正在尝试将其转换为C代码,我知道它将是一个forloop,从50开始向下运行。但是我在一些其他过程中迷失了,比如当我们进入中间时。 addi $t1, $0, 50 LOOP: lw $s1, 0($s0) add $s2, $s2, $s1 lw $s1, 4($s0) add $s2, $s2, $s1 addi $s0, $s0, 8 subi $t1, $t1, 1 bne $t1, $0, LOOP 马上看起来可能是这样的: t1 = 0 + 50; LOOP: s

我正在尝试将其转换为C代码,我知道它将是一个forloop,从50开始向下运行。但是我在一些其他过程中迷失了,比如当我们进入中间时。

addi $t1, $0, 50
LOOP: lw $s1, 0($s0)
add $s2, $s2, $s1
lw $s1, 4($s0)
add $s2, $s2, $s1
addi $s0, $s0, 8
subi $t1, $t1, 1
bne $t1, $0, LOOP

马上看起来可能是这样的:

    t1 = 0 + 50;
LOOP:
    s1 = *s0;
    s2 = s2 + s1;
    s1 = *s0 + 4;
    s0 = s0 + 8;
    t1 = t1 - 1;
    if (t1 != 0) goto LOOP;
goto
转换为
for
循环:

int *s0 = /* ... */;
int s2 = /* ... */;

for (t1 = 50; t1 != 0; t1--) {
    s2 += *s0;
    s0 += 8;
}

它直接转化为:

int32_t* s0;
int32_t i = 50;
int32_t s2;
do {
    s2 += s0[j];
    s2 += s0[j+1];
    s0 += 2;
} while(--i);
s0和s2的初始值没有在汇编代码中给出,但我相信您可以理解“当我们处于中间时”是什么意思?为什么(在您的代码中)根本没有注释?既然它将
0(s0)
4(s0)
添加到
s2
,那么“C”循环体不应该是
s2+=s0[0];s2+=s0[1];s2+=8