是的move
指令可以并且被替换为add
操作说明。
关于伪指令的一些背景:MIPS 是一种 RISC(精简指令集计算机)架构,这意味着您可以使用的指令数量相对较少。这种简单性可以带来更快的性能,但代价是更复杂的操作需要多个指令。伪指令是代表一个或多个其他更复杂操作的“假”指令。
关于你的问题:
lw
, sw
, and bne
不是伪指令。它们全部由一条 MIPS 汇编指令执行。
la
,或加载地址,是一条伪指令。la
可以分解为lui
指令和ori
操作说明。在 32 位 MIPS 架构上,每条指令以及每个寄存器的大小都是 32 位。因此,为了存储 32 位地址,必须先获取最高有效(高位)16 位,然后再获取最低有效(低位)16 位。
The lui
,或加载上立即数,获取立即数字段并将其左移 16 次并将其存储在临时汇编器寄存器中。这ori
指令对临时寄存器和立即值执行按位或操作,并将完整地址存储在指定的初始寄存器中la
操作说明。
Edit:例如,要获取字符串的地址,您可以在函数中使用以下代码段:
la $a0, msg # pseudo-instruction to load the address of the label str
你也会有msg
其他地方定义:
.data
msg: .asciiz "This is a string"
在 SPIM 中运行此示例后,la
指令被翻译成:
lui $1, 4097 [msg]
ori $4, $1, 0 [msg]
$1
是临时汇编寄存器$4
正在注册a0
这是传递给最初的参数la
操作说明。
参考:MIPS指令集 http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html以及仅仅进行大量的 MIPS。尝试在模拟器中运行每条指令,例如QTSPIM http://spimsimulator.sourceforge.net/看看你会得到什么。
也可以看看:lui 4097 https://stackoverflow.com/questions/8380135/mips-assembly-lui-t0-4097 and 加载地址 https://stackoverflow.com/questions/12841517/mips-programming-load-address?rq=1