"MIPS汇编语言中move和li的区别"

39

我正在练习将C代码转换为MIPS汇编语言,并且在理解变量赋值中的moveli用法时遇到了困难。

例如,要在MIPS中实现以下C语句:

int x = 0;

如果我理解正确的话(虽然我非常怀疑),似乎这两个在MIPS汇编中都可以工作:

move $s0, $zero
li $s0, $zero

我错了吗?这两行之间有什么不同?

2个回答

65

move指令将一个寄存器中的值复制到另一个寄存器中。li指令将一个特定的数值加载到该寄存器中。

对于零这个特殊情况,您可以使用常量零或零寄存器来获取:

move $s0, $zero
li   $s0, 0

没有寄存器可以生成非零值,所以如果你想要其他数字,比如:

li

你就必须使用它。

li $s0, 12345678

42
请注意,“move”和“li”都是“伪指令”。例如,“move $s0,$s1”实际上可能是“add $s0,$0,$s1”。 “li”指令可能是“lui”和“ori”指令的组合,因此“li”甚至可能是两个指令。 - Martin Rosenau
所以“li”从概念上来说与move-immediate是一样的吗? - Zaz

0

move指令将一个寄存器的值移动到另一个寄存器,而li则只是将一个立即值加载到寄存器中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接