我正在学习 MIPS 汇编语言,在书中看到了这个例子,对我来说这似乎是不正确的。如果是的话,这将不是我在本书中发现的第一个错误。
变量f
and g
被分配寄存器$s0
and $s1
分别是数组的基地址A
and B
are $s6
and $s7
分别。
C代码示例是:
f = g - A[B[4]];
提供的对应的MIPS程序集是:
lw $t0, 16($s7)
lw $s0, 0($t0)
sub $s0, $s1, $s0
根据我的理解,上面的 MIPS 代码将从内存中加载一些随机数据,地址为$t0
然后从中减去它$s1
并且不访问索引$t0
中表示的数组的$s6
.
根据我的理解,正确的 MIPS 汇编应该是这样的:
lw $t0, 4($s7)
add $t0, $t0, $s6
sll $t0, $t0, 2
lw $s0, 0($t0)
sub $s0, $s1, $s0
我是对的,这是书中的一个错误,或者我误解了什么。
编辑:修复了 Chris Dodd 指出的更正 mips 代码中的错误