以下是C代码:
int A[10];
int sum = 0;
int i = 0;
while (i<10){
sum += A[i++];
sum *= 2;
}
这是我将其转换为MIPS的方法:
**Reg. Allocation Table:
A = $s1
sum = $s2
i = $s3
10 = $s4**
loop: beq $s3, $s4, endloop
"here's where i get stuck, inside the while loop."
j: loop
endloop:
我理解在基本的while循环中,如下所示:
i = $s1
,5 = $s3
i=0;
while(i != 5)
i=i+1;
addi $s1, $zero, 0 #i=0
loop: beq $s1, $s3, endloop
add $s1, $s1, 1
j loop:
endloop:
我遇到了一些困难,不太理解一个稍微复杂的循环,其中引入了 sum+= A[i++];
和 sum*= 2;
。
非常感谢任何帮助。我并不想要完整的答案,所以请帮我思考。
谢谢!
sum *= 2
翻译成中文为mul <存储 sum 的寄存器>, <存储 sum 的寄存器>, 2
。然后sum += A[i++]
可以翻译成add sum, sum, <A 数组第 i 项的地址>
, 需要根据汇编器对内存寻址方式的处理略作调整。接着需要执行指令add i, i, 1
(其中i
是存储i
值的寄存器)。 - user529758