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

use*_*270 26 c assembly mips

我练的C代码转换成MIPS汇编语言,和我无法理解的使用moveli在变量赋值.

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

int x = 0;
Run Code Online (Sandbox Code Playgroud)

如果我理解正确(尽管我非常怀疑),看起来这两个都在MIPS汇编器中工作:

move $s0, $zero
li $s0, $zero
Run Code Online (Sandbox Code Playgroud)

我错了吗?这两条线有什么区别?

dus*_*uff 48

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

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

move $s0, $zero
li   $s0, 0
Run Code Online (Sandbox Code Playgroud)

但是,没有寄存器会生成非零值,因此li如果您需要其他数字,则必须使用,例如:

li $s0, 12345678
Run Code Online (Sandbox Code Playgroud)

  • 您还应该知道"move"和"li"都是"伪指令"."move $ s0,$ s1"可能真的是"添加$ s0,$ 0,$ s1"."li"指令可以是"lui"和"ori"指令的组合,因此"li"甚至可以是两个指令. (26认同)