Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在查看一个 32x32 的寄存器文件,其中包含 $s0-$s7、$t0-$t9、$zero、$a0-$a3、$v0-$v1、$gp、$fp、$ra 和 $at。
我的问题是数组是如何存储在这些寄存器文件中的?它们不是每个都只有 32 位宽吗?
例如,给定数组 A 的基地址是 $s3,如果我要给出获取 A[8] 的指令:
lw $t0, 32($s3)
它如何检索数据?
数组访问是通过指针(C 人非常熟悉的东西)进行的,所以寄存器只是保存数组的基地址。然后将 8 * 4 = 32 字节添加到该基地址以获取第 8 个元素的地址,最后取消引用该指针(这意味着查看该地址处的内容)以获取值(使用 lw 指令)。
您显示的指令是此 C 代码的翻译:
t0 = *(s3 + 8) // same as s3[8]