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=]
对于这个伪指令:
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=]