MIPS指令集移动vs add/addi 0用于存储值?

Ant*_*ack 8 assembly mips

我目前正在学习计算机组织和汇编语言课程,主要使用MIPS指令集来教授汇编语言.

我注意到教授在网上发布的许多例子都使用add或addi将值移动到$ a0参数寄存器中,用于调用打印服务,如下所示......

# store the first integer in $a0 and print
add $a0, $zero, $t0
li $v0, 1
syscall
Run Code Online (Sandbox Code Playgroud)

要么...

# store the first integer in $a0 and print
addi $a0, $t0, 0
li $v0, 1
syscall
Run Code Online (Sandbox Code Playgroud)

我也注意到一些在线的例子,其他人只是使用移动指令完成同样的事情,如下所示...

# store the first integer in $a0 and print
move $a0, $t0
li $v0, 1
syscall
Run Code Online (Sandbox Code Playgroud)

在这种情况下,使用add或addi指令优先于简单地使用move吗?如果是这样,为什么?是否存在性能差异或仅仅是品味问题?

Pau*_*l R 12

move指令不是真正的指令 - 它是伪指令,add由汇编器转换为指令.

这些伪指令有很多,例如https://en.wikipedia.org/wiki/MIPS_architecture#Pseudo_instructions

这种类型的东西在RISC处理器上非常常见,您需要一个最小的指令集,并且特定的指令可能用于多个目的.