2013-02-25 209 views
0

我正在查看一个32x32寄存器文件,包含$ s0- $ s7,$ t0- $ t9,$ zero,$ a0- $ a3,$ v0- $ v1,$ gp,$ fp,$ ra和$在。数组如何存储在寄存器文件中?

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

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

lw $t0, 32($s3) 

它是如何获取数据?

回答

1

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

您已经表明,该指令这个C代码翻译:

t0 = *(s3 + 8) // same as s3[8] 
+0

所以$ S3不持有A [0]的价值,但持有A [0]数据存储器的地址? – James 2013-02-25 20:42:13

+0

@詹姆斯就是这样 – BlackBear 2013-02-25 20:42:39

相关问题