MIPS伪指令,替换

时间:2013-07-10 10:20:45

标签: mips pseudocode

在研究它之后,我发现它只是取代获得相同结果的方式。如果我错了,请纠正我。

示例:

move $s0, $t1

可以替换为:

add $s0, $zero, $t1 

问题:

如何替换lwlaswbne

1 个答案:

答案 0 :(得分:3)

是的,move指令可以用add指令替换。

伪指令的一些背景:MIPS是RISC(精简指令集计算机)架构,这意味着您可以使用相对较少的指令。这种简单性可以提高性能,但需要权衡的是,更复杂的操作需要多条指令。伪指令是表示一个或多个其他更复杂操作的“假”指令。

在你的问题上:

lwswbne不是伪指令。它们都是由一个MIPS汇编指令执行的。

la或加载地址是伪指令。 la可以分解为lui指令和ori指令。在32位MIPS架构上,每条指令以及每个寄存器的大小为32位。因此,为了存储32位地址,必须先获取最高有效位(高位)16位,然后再取最低位(低位)16位。

lui或Load Upper Immediate获取立即字段并将其左移16次并将其存储在临时汇编寄存器中。 ori指令按位或在临时寄存器上执行立即值,并将完整地址存储在la指令中指定的初始寄存器中。

编辑:要获取字符串的地址,例如,您可以在函数中使用此代码段:

    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 Instruction Set并且只是做了很多MIPS。尝试在QTSPIM等模拟器中运行每条指令,看看你得到了什么。

另请参阅:lui 4097load address