我正在练习将C代码转换为MIPS汇编语言,并且在理解变量赋值中的move
和li
用法时遇到了困难。
例如,要在MIPS中实现以下C语句:
int x = 0;
如果我理解正确的话(虽然我非常怀疑),似乎这两个在MIPS汇编中都可以工作:
move $s0, $zero
li $s0, $zero
我错了吗?这两行之间有什么不同?
move
指令将一个寄存器中的值复制到另一个寄存器中。li
指令将一个特定的数值加载到该寄存器中。
对于零这个特殊情况,您可以使用常量零或零寄存器来获取:
move $s0, $zero
li $s0, 0
没有寄存器可以生成非零值,所以如果你想要其他数字,比如:
li
你就必须使用它。
li $s0, 12345678
move
指令将一个寄存器的值移动到另一个寄存器,而li
则只是将一个立即值加载到寄存器中。