如果我想从基本地址为$ a0且off set $ t2的内存中加载一个值,为什么我不能执行以下操作:
lw $s2, $a1($t2)
那么上面表达式的等价物是什么?
答案 0 :(得分:14)
你不能这样做,因为没有支持这种事情的MIPS指令编码。您需要自己添加:
add $a2, $a1, $t2
lw $s2, 0($a2)
lw
指令编码如下所示:
1000 11ss ssst tttt iiii iiii iiii iiii
其中sssss
是源寄存器编号,ttttt
是目标寄存器编号,iiiiiiiiiiiiiiii
是直接编号。使用两个寄存器生成内存地址的编码(没有替代指令编码)没有空间。从上面的例子中编码的特定机器指令是:
1000 1100 1101 0010 0000 0000 0000 0000
由于立即数为0
,$s2
为注册18
,$a2
为注册6
。