将MIPS32转换为C:将数组的基址添加到任意值及其含义

时间:2013-02-07 02:51:17

标签: c assembly mips

我正在做一个家庭作业,我得到了这个信息:

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

它希望我将一些指令转换为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

1 个答案:

答案 0 :(得分:1)

此说明中没有解除引用:

add $t0, $s6, $s0

就像说

t0 = s6 + s0;

在类似C的伪代码中。或者为你的例子:

t0 = (char *)A + f;

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

lw $t1, 0($t0)

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