0
我正在查看一个32x32寄存器文件,包含$ s0- $ s7,$ t0- $ t9,$ zero,$ a0- $ a3,$ v0- $ v1,$ gp,$ fp,$ ra和$在。数组如何存储在寄存器文件中?
我的问题是如何在这些寄存器文件中存储数组?它们不仅仅是每个32位宽吗?
例如,数组A是$ S3的给定的基地址,如果我给指令获取A [8]:
lw $t0, 32($s3)
它是如何获取数据?
我正在查看一个32x32寄存器文件,包含$ s0- $ s7,$ t0- $ t9,$ zero,$ a0- $ a3,$ v0- $ v1,$ gp,$ fp,$ ra和$在。数组如何存储在寄存器文件中?
我的问题是如何在这些寄存器文件中存储数组?它们不仅仅是每个32位宽吗?
例如,数组A是$ S3的给定的基地址,如果我给指令获取A [8]:
lw $t0, 32($s3)
它是如何获取数据?
数组访问是通过指针(C人们非常熟悉的东西)完成的,所以寄存器只保存数组的基地址。然后,您将8 * 4 = 32个字节添加到该基地址以获取第8个元素的地址,并最终取消该指针(意即查看该地址处的内容)以获取该值(使用lw指令)。
您已经表明,该指令这个C代码翻译:
t0 = *(s3 + 8) // same as s3[8]
所以$ S3不持有A [0]的价值,但持有A [0]数据存储器的地址? – James 2013-02-25 20:42:13
@詹姆斯就是这样 – BlackBear 2013-02-25 20:42:39