如何通过MIPS中的寄存器值增加数组?

时间:2014-10-28 20:42:51

标签: arrays mips

我应该将C代码翻译成汇编,真正让我感到困惑的是这句话:

for (uint i = 1 ; i <= k ; i++)
    b [i]= 0;

我已经得到了for循环的其余条件,但是for循环中的实际语句让我很烦恼。我提出的唯一解决方案是:

sw $zero, $t2($a1) # $a1 is the base address of the array and $t2 is i

但是我确定这是不允许的,因为我需要将分配给i的值乘以4以有效地到达数组的下一个索引。

1 个答案:

答案 0 :(得分:1)

不,你不被允许这样做。 sw是一个I型指令,因此它需要两个寄存器和一个数字文字。

为此,您需要在循环的每次迭代中向$a1添加4。请记住,$a1包含数组中第一个元素的地址,因此通过将指针大小(4个字节)递增,可以将指针向下移动到数组中。