【问题标题】:Adding integer value to an array?将整数值添加到数组?
【发布时间】:2012-10-17 08:10:40
【问题描述】:

我是 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)符号表示。

再次,以上是我的思考过程,很可能是错误的

【问题讨论】:

    标签: arrays assembly add mips mips32


    【解决方案1】:

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

    第一行,addi $t0, $s0, 32 分配 $t0 = $s0 + 32。由于 $s0 包含数组 A 的第一个元素的地址,并且知道该数组的每个元素占用 4 个字节,现在 $t0 将保存第九个元素的地址数组 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,也就是ad​​dress_of(A[9]) .因此,A[9]=8

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多