将整数值添加到数组?

时间:2012-10-17 08:10:41

标签: arrays assembly add mips mips32

我是MIPS的新手并且不明白这里发生了什么:

假设字数组A按此顺序存储0,1,2,3,4,5,6,7,8,9。假设A的起始地址在$ s0。按照以下说明,这个数组的值是什么?

addi $t0, $s0, 32
lw $t1, 0($t0)
sw $t1, 4($t0)

(a) 0,1,2,3,4,5,6,7,8,9
(b) 0,1,2,3,4,5,6,7,9,9  
(c) 0,1,2,3,4,5,6,7,8,8
(d) None of the above.

答案是“c”,但我不明白为什么。这是我的思考过程:

第一行代码:

  

由于这是一个整数数组,向地址$ s0添加32并将其赋予$ t0意味着将A [8]的地址赋予$ t0。 A [8]因为每个整数需要4个字节,因此将0添加到$ s0将导致A [0]的地址,将4添加到$ s0将导致A [1]的地址,依此类推......

第二行代码:

  

0($ t0)引用$ t0中的第一个元素(我不知道那是什么)并将其加载到寄存器$ t1。

第三行代码:

  

$ t1的地址存储在内存中$ t0的第一个元素,由4($ t0)表示。

同样,以上是我的思考过程,这很可能是错误的

1 个答案:

答案 0 :(得分:1)

你的思维过程是正确的,这就是为什么答案c)是正确的。

第一行addi $t0, $s0, 32分配 $ t0 = $ s0 + 32 。由于 $ s0 包含数组A的第一个元素的地址,并且知道该数组的每个元素占用4个字节, $ t0 现在将保存第9个地址数组A的元素,A [8](索引从0开始)。所以* $ t0 = address_of(A [8])*

因此,第二行lw $t1, 0($t0)将加载存储在地址 $ t0 + 0 的字,即A [8],并将此字存储在寄存器 $中T1 即可。因此, $ t1 = 8

第三行sw $t1, 4($t0)会将 $ t1 中包含的字词存储在地址 $ t0 + 4 ,这是address_of(A [9 ])。因此, A [9] = 8