我正在查看32x32寄存器文件,$ s0- $ s7,$ t0- $ t9,$ 0,$ a0- $ a3,$ v0- $ v1,$ gp,$ fp,$ ra和在$
我的问题是如何将数组存储在这些寄存器文件中?它们不只是每个32位宽吗?
例如,给定的数组A的基址是$ s3,如果我要给出指令来得到A [8]:
lw $t0, 32($s3)
如何检索数据?
答案 0 :(得分:1)
通过指针(C人非常熟悉的东西)进行数组访问,因此寄存器只保存数组的基址。然后,您将8 * 4 = 32个字节添加到该基址,以获取第8个元素的地址,最后取消引用该指针(这意味着查看该地址的内容)以获取值(使用lw指令)。
您显示的说明是此C代码的翻译:
t0 = *(s3 + 8) // same as s3[8]