3

这是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:

i = $s1我了解在基本的 while 循环中,例如: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;

任何帮助是极大的赞赏。我不是在寻找一个完整的解决方案,所以请帮我想想

谢谢!

4

1 回答 1

4

分解它:

sum += A[i++];在 MIPS 汇编中sum = sum + A[i]; i = i + 1;可以表示为:

add $t0 $s3 $s1 #index A at i
lw  $t1 0($t0)  #load A at i

add  $s2 $s2 $t1 #add A[i] to sum
addi $s3 $s3 1   #increment i

sll $s2 $s2 1 #double sum
于 2013-11-09T07:45:36.037 回答