MIPS 中伪指令 "move" 的 "addi" 和 "add" 之间的区别?

Difference between "addi" and "add" for pseudoinstruction "move" in MIPS?

对于这个伪指令:

move $rt, $rs

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

add $rt, $rs, [=14=]

addi $rt, $rs, [=15=]

?

编辑: 我想我弄错了 addi

add $rt, $rs, [=14=]

相同

addi $rt, $rs, 0

因为 add 添加了寄存器,我需要一个常量作为 addi

的立即数

addi 指令需要一个 立即数 操作数而不是寄存器,因此 [=14=] 实际上是 0:

add   $rt, $rs, [=10=]
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

但是,在这种特殊情况下,仅使用零锁定 [=14=] 寄存器会更 通常 因为这毕竟是它的目的。

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

addu  $rt, $rs, [=12=]