1

我现在正在做家庭作业,我得到了以下信息:

$s6是数组A的基地址的位置,$s0f的值的位置(未指定)。

它希望我将一些指令转换为 C 语句。这是我的问题,因为如果回答了这个问题,我可以很容易地解决这个问题的其余部分:

添加 $t0, $s6, $s0

这是在说$t0 = (the base address of array A) + f 还是在说$t0 = A[0+f]

因为如果 A 的基地址是 0x04000000 并且我使用 addi 将 4 添加到该基地址,产生 0x04000004,并将该值分配给 t0,我的意思是 t0 = A[1](假设我正在存储整数)。

但由于我不知道 f 的值,我不确定如何在 C 中表示它,因为我知道我正在修改索引,但我不知道修改了多少。是否更准确地说(根据上面的说明):

$t0 = A[f/4]

我对这一切都很陌生哈。希望我证明我已经做了一些研究来试图解决这个问题。

谢谢

OSFTW

4

1 回答 1

1

此指令中没有取消引用:

add $t0, $s6, $s0

这就像说

t0 = s6 + s0;

在类似 C 的伪代码中。或者对于您的示例:

t0 = (char *)A + f;

要从 A 中获取值,它看起来像:

lw $t1, 0($t0)

完成上一条add指令后,$t0指向数组中的正确位置。

于 2013-02-07T02:56:17.073 回答