我正在学习MIPS汇编语言,看到这本书中的示例,但在我看来它似乎不正确。如果是错误的话,那么这本书中不是第一个我发现的错误。
变量f和g分别被分配到寄存器$s0和$s1中,数组A和B的基地址分别为$s6和$s7。
C代码示例如下:
变量f和g分别被分配到寄存器$s0和$s1中,数组A和B的基地址分别为$s6和$s7。
C代码示例如下:
f = g - A[B[4]];
对应的 MIPS 汇编代码如下:
lw $t0, 16($s7)
lw $s0, 0($t0)
sub $s0, $s1, $s0
我的理解是,上面的MIPS代码将从$t0
提供的地址处加载一些随机数据,然后从$s1
中减去它,并不访问在$s6
中表示的数组的索引$t0
。
根据我的理解,正确的MIPS汇编代码应该是:
lw $t0, 4($s7)
add $t0, $t0, $s6
sll $t0, $t0, 2
lw $s0, 0($t0)
sub $s0, $s1, $s0
我是否正确,这是书中的一个错误还是我理解有误。
编辑:根据Chris Dodd指出的错误,已经修改了MIPS代码的纠正。
$s6
,所以它无法从数组A
中检索元素,这表明代码并没有按照预期执行。 - davin