【发布时间】:2017-03-14 23:46:21
【问题描述】:
因此,根据我查看的一些资料,不可能在 32 位 mips 中使用 32 位立即数,因为机器指令是 32 位的,并且立即数存储在机器指令中。据我所知,最大的立即数可以是 16 位,为指令的其余部分留出空间。但在 MARS 4.5 mips 中,这条指令可以正常工作(使用默认设置):
.text
ori $t1, $0, 0xffffffff #load 32-bit pattern into $t1
这组装和运行良好,这让我感到困惑,因为我认为它不应该出于上述原因(32 位机器代码如何保持 32 位立即数?)。我最好的猜测是,当立即字段高于 0xffff 时,MARS 中的 ori 实际上会运行伪指令,lui 和 ori 会定期加载,但我不确定。有人可以对此有所了解吗?
【问题讨论】:
-
反汇编二进制文件,自己看看。确实,这应该行不通。请注意,诸如
addi符号之类的某些指令会扩展立即数,因此addi $t1, $0, 0xffffffff确实有效。顺便说一句,这是汇编程序可以使用的指令,而不是这里的ori。
标签: assembly mips32 mars-simulator