MIPS - SPIM 解析器立即值超出按位 ANDI 的范围

MIPS - SPIM parser immediate value out of range for bitwise ANDI

正在尝试使用 SPIM 测试我的程序并收到此消息

spim:文件 code1.a

第 56 行的(解析器)立即值 (-16) 超出范围 (0 .. 65535)
  andi $t1, $t0, 0xfffffff0

可能是什么问题?

MIPS 处理器无法在一条指令中完成该操作。 andi 指令是一个 I-Type 指令,它保存一个 16 位立即数——此外 andi 指令零将 16 位立即数扩展到 32 位,所以它不能保存负数数字(ori & xori 也为零扩展,而 addi 和所有其他符号扩展立即数)。

每当我们无法在一条指令中完成某些事情时,请使用一系列指令。在这种情况下,将立即数加载到寄存器中,然后使用 and R-Type 指令。

仅供参考,MARS 模拟器的汇编程序将采用 andi $t1, $t0, 0xfffffff0,尽管它将其视为伪指令并将该行汇编扩展为 3 指令机器代码序列,将常量加载到注册(使用两条指令:比完成工作所需的指令多一条),然后使用 and.

显然,Spim 不提供该特定的伪指令。