【发布时间】:2015-09-14 03:06:54
【问题描述】:
对于这个伪指令:
move $rt, $rs
addi 和 add 汇编代码都可以接受吗?那么我可以使用任何一个
add $rt, $rs, $0
或
addi $rt, $rs, $0
?
编辑:
我想我在addi 上犯了一个错误
add $rt, $rs, $0
将与
相同addi $rt, $rs, 0
因为add 添加了寄存器,所以我需要一个常量作为addi 的立即数
【问题讨论】:
对于这个伪指令:
move $rt, $rs
addi 和 add 汇编代码都可以接受吗?那么我可以使用任何一个
add $rt, $rs, $0
或
addi $rt, $rs, $0
?
编辑:
我想我在addi 上犯了一个错误
add $rt, $rs, $0
将与
相同addi $rt, $rs, 0
因为add 添加了寄存器,所以我需要一个常量作为addi 的立即数
【问题讨论】:
addi 指令需要 立即数 操作数而不是寄存器,因此 $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
【讨论】: