MIPS中伪指令“移动”的“addi”和“add”之间的区别?

时间:2015-09-14 03:06:54

标签: assembly add mips move

对于这个伪指令:

move $rt, $rs

addi和add汇编代码都可以接受吗?我可以使用

add $rt, $rs, $0

addi $rt, $rs, $0

编辑: 我认为我在addi

时犯了一个错误

add $rt, $rs, $0

相同

addi $rt, $rs, 0

因为add添加了寄存器,我需要addi

的立即数的常量

1 个答案:

答案 0 :(得分:1)

$0指令需要立即操作数而不是寄存器,因此0实际上是add $rt, $rs, $0 addi $rt, $rs, 0

add   $d, $s, $t
    0000 00ss ssst tttt dddd d000 0010 0000
addi  $t, $s, i
    0010 00ss ssst tttt iiii iiii iiii iiii

两者都将工作并将所有必需的信息编码到指令本身中):

$0

然而,在这种特殊情况下使用零锁定addu $rt, $rs, $0 寄存器会更加通常,因为这毕竟是它的目的。

我也倾向于使用无符号变体,因为我似乎记得可能会对签名指令进行额外的溢出检查:

{{1}}