2

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

例子:

move $s0, $t1

可以替换为:

add $s0, $zero, $t1 

问题:

lw, la, sw,怎么换bne

4

1 回答 1

4

是的,move指令可以并且被指令替换add

伪指令的一些背景知识:MIPS 是一种 RISC(精简指令集计算机)架构,这意味着您可以使用的指令数量相对较少。这种简单性会带来更快的性能,但代价是更复杂的操作需要多条指令。伪指令是代表一个或多个其他更复杂操作的“假”指令。

关于你的问题:

lw, sw, 和bne不是伪指令。它们都由一条 MIPS 汇编指令执行。

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

luiLoad 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是临时汇编器寄存器,$4a0传递给初始la指令的参数的寄存器。

参考资料:MIPS 指令集和从仅仅做了很多 MIPS。尝试在像QTSPIM这样的模拟器中运行每条指令,看看你会得到什么。

另见:lui 4097加载地址

于 2013-07-10T11:17:49.393 回答