我正在练习将C代码转换为MIPS汇编语言,并且无法理解变量赋值中move
和li
的用法。
例如,要在MIPS中实现以下C行:
int x = 0;
如果我理解正确(尽管我非常怀疑),看起来这两个在MIPS汇编程序中都有效:
move $s0, $zero
li $s0, $zero
我错了吗?这两行之间有什么区别?
答案 0 :(得分:47)
move
指令将值从一个寄存器复制到另一个寄存器。 li
指令将特定数值加载到该寄存器中。
对于特定的情况为零,您可以使用常数零或零寄存器来获取:
move $s0, $zero
li $s0, 0
但是,没有寄存器会生成非零值,因此如果您需要其他数字,则必须使用li
,例如:
li $s0, 12345678