负载32位常数在MIPS注册(Load 32-bit constant to register in

2019-08-02 04:28发布

我很困惑这个部分,而我学习MIPS。

由教授写的教科书约翰·亨尼斯说,如果我们得到了一些大的不断加载,我们应该

lui $s0, upper(big)
ori $s0, $s0, lower(big)

但是,为什么我们不只是做

addi $s0, $zero, big

由于寄存器是32位,这是更strightforward,是吗?

Answer 1:

传递给眼前的说法addi是只有16位。 要加载32位立即值,你需要做的是在两个16位的价值远远的范围之外,如从教科书的例子。

(预见进一步的问题,其原因是没有负载直接或添加立即指令,其采取32位的立即值是因为MIPS ISA使用固定尺寸的32个指令,因此总是有<可用于任何指令参数32位 - 这在RISC架构很常见的。)



Answer 2:

是的寄存器是32位,但你怎么能在32位的指令指定一个32位的数字? 指令由操作码和数据。 所以,你不能在一个单一的阿迪挤压操作码+ 32位数据。



Answer 3:

或者,使用。数据的.text

.data
   word32bits: .word 0xFFFFFFFF

.text
   lw $t0, word32bits # $t0 now contains your 32 bit word.


Answer 4:

如果你需要加载大量的常数,您可以使用文字池。 然后,每个恒定载荷成本只有1加载指令。 更多的信息在这里和这里



文章来源: Load 32-bit constant to register in MIPS
标签: assembly mips