0

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

spim:(解析器)立即值(-16)超出范围(0 .. 65535)在文件code1.a的第56行

  andi $t1, $t0, 0xfffffff0

可能是什么问题呢?

4

1 回答 1

1

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

每当我们不能在一条指令中做某事时,请使用一系列指令。在这种情况下,将立即数加载到寄存器中,然后使用andR-Type 指令。

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

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

于 2022-02-19T19:49:32.927 回答