0

c代码

while (save[i]==k)
i+=1;

将 i 放入 $s3,将 k 放入 $s5,将 k 的地址放入 $s6

mips代码

loop: sll $t1, $s3, 2
      add $t1, $t1, $s6
      lw $t0, 0($t1)
      bne $t0, $s5, Exit
      addi $s3, $s3, 1
      j loop
Exit:
4

1 回答 1

2

您的save数组/指针必须是某种 4 字节类型(ints?)。save[i]因此,要从内存中加载,索引i需要转换为数组内的字节偏移量,然后添加到该数组的基地址。这是通过乘以i四来完成的:

sll $t1, $s3, 2

然后添加save

add $t1, $t1, $s6

不过,这看起来不像是优化的构建。通常编译器可以重写此代码以直接以四为增量推进一个临时指针,从而避免该循环中的两条指令。

于 2021-11-19T19:23:38.823 回答