13

如果我想从基地址为 $a0 且偏移量为 $t2 的内存中加载一个值,为什么我不能执行以下操作:

lw  $s2, $a1($t2)

那么上面表达式的等价物是什么?

4

1 回答 1

14

你不能这样做,因为没有支持这种东西的 MIPS 指令编码。您需要自己添加:

add $a2, $a1, $t2
lw  $s2, 0($a2) 

lw指令编码如下所示:

1000 11ss ssst tttt iiii iiii iiii iiii

wheresssss是源寄存器号,ttttt是目标寄存器号,iiiiiiiiiiiiiiii是立即数。使用两个寄存器生成内存地址的编码(也没有替代指令编码)没有空间。从上面的示例中编码的特定机器指令是:

1000 1100 1101 0010 0000 0000 0000 0000

由于立即数是0$s2是寄存器18$a2是寄存器6

于 2010-02-22T23:03:40.273 回答