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)行之间有什么区别?为什么这很重要?
谢谢!
答案 0 :(得分:0)
如果寄存器$s3
中的地址不同,那么你可以写第3行而不是第1行并让它做同样事情的唯一方法就是这样。我的猜测是错过了什么:也许$s3
中已经有一个地址,并且它已知比A
的地址少24个字节,而不是将A
的地址加载到$s3
只是为了加载8($s3)
,而是放弃将A的地址加载到$s3
并加载32($s3)
相反,保存一条指令。这是我的猜测。