2014-10-28 83 views
0

我应该为C代码翻译成汇编的,什么是真正绊倒我的是这样一句话:如何通过MIPS寄存器的值来增加数组?

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 

但我敢肯定,这是不允许的,是错误的,我需要乘以4分配给i该值有效到达的原因数组的下一个索引。

回答

1

不,你不能这样做。 sw是一个I型指令,所以它需要两个寄存器和一个数字文字。

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