为什么 MARS mips 32 位立即数成为可能?
Why is MARS mips 32 bit immediate possible?
所以,根据我看过的一些资料,不可能在 32 位 mips 中使用 32 位立即数,因为机器指令是 32 位的,并且立即数存储在机器指令中.据我所知,最大的立即数可以是 16 位,以便为指令的其余部分留出空间。但在 MARS 4.5 mips 中,这条指令工作正常(使用默认设置):
.text
ori $t1, [=10=], 0xffffffff #load 32-bit pattern into $t1
这汇编和运行良好,这让我感到困惑,因为我认为它不应该出于上述原因(32 位机器代码如何保持 32 位立即数?)。我最好的猜测是当直接字段高于 0xffff 时,MARS 中的 ori 实际上会运行一个伪指令,lui 和 ori 会定期加载,但我不确定。有人可以解释一下吗?
如果您在 assemble mars 4.5 中注意到该指令,您会得到三个指令
lui ,0xFFFFFFFF
ori ,,0x0000FFFF
or ,[=10=],
这仍然有点误导,但基本上它已经为您解决了。
所以,根据我看过的一些资料,不可能在 32 位 mips 中使用 32 位立即数,因为机器指令是 32 位的,并且立即数存储在机器指令中.据我所知,最大的立即数可以是 16 位,以便为指令的其余部分留出空间。但在 MARS 4.5 mips 中,这条指令工作正常(使用默认设置):
.text
ori $t1, [=10=], 0xffffffff #load 32-bit pattern into $t1
这汇编和运行良好,这让我感到困惑,因为我认为它不应该出于上述原因(32 位机器代码如何保持 32 位立即数?)。我最好的猜测是当直接字段高于 0xffff 时,MARS 中的 ori 实际上会运行一个伪指令,lui 和 ori 会定期加载,但我不确定。有人可以解释一下吗?
如果您在 assemble mars 4.5 中注意到该指令,您会得到三个指令
lui ,0xFFFFFFFF
ori ,,0x0000FFFF
or ,[=10=],
这仍然有点误导,但基本上它已经为您解决了。