0

我正在查看一个 32x32 的寄存器文件,其中包含 $s0-$s7、$t0-$t9、$zero、$a0-$a3、$v0-$v1、$gp、$fp、$ra 和 $at。

我的问题是数组是如何存储在这些寄存器文件中的?它们不是每个都只有 32 位宽吗?

例如,给定数组 A 的基地址是 $s3,如果我要给出获取 A[8] 的指令:

lw $t0, 32($s3)

它如何检索数据?

4

1 回答 1

1

数组访问是通过指针(C 人非常熟悉的东西)进行的,所以寄存器只是保存数组的基地址。然后将 8 * 4 = 32 字节添加到该基地址以获取第 8 个元素的地址,最后取消引用该指针(这意味着查看该地址处的内容)以获取值(使用 lw 指令)。

您显示的指令是此 C 代码的翻译:

t0 = *(s3 + 8)  // same as s3[8]
于 2013-02-25T20:39:10.987 回答