MIPS中的咬合/字节寻址

时间:2017-09-08 01:34:14

标签: mips

Hello Stack Overflow社区,

我目前正在介绍计算机架构/组织课程,我们正在使用的教科书名为 David Patterson和John Hennessey的计算机组织与设计(第5版),他们列出了一个示例如何使用MIPS访问数组中的元素。他们列出的例子是这样的:

给定C代码赋值:g = h + A [8];将以下内容转换为MIPS。   其中g = $ s1,h = $ s2,obase地址A = $ s3。

他们接着说,代表C代码中相同指令的MIPS指令如下:

 (1) lw $t0, 8($s3) # Temporary register $t0 gets A[8]
 (2) add $s1,$s2,$t0 # g = h +A[8]

然后在另一页上,作者提到第(1)行也可以写成:

(3) lw $t0,32($s3)

我的问题是第(1)行和第(3)行之间有什么区别?为什么这很重要?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果寄存器$s3中的地址不同,那么你可以写第3行而不是第1行并让它做同样事情的唯一方法就是这样。我的猜测是错过了什么:也许$s3中已经有一个地址,并且它已知比A的地址少24个字节,而不是将A的地址加载到$s3只是为了加载8($s3),而是放弃将A的地址加载到$s3并加载32($s3)相反,保存一条指令。这是我的猜测。