正在尝试使用 SPIM 测试我的程序并收到此消息
spim:(解析器)立即值(-16)超出范围(0 .. 65535)在文件code1.a的第56行
andi $t1, $t0, 0xfffffff0
可能是什么问题呢?
正在尝试使用 SPIM 测试我的程序并收到此消息
spim:(解析器)立即值(-16)超出范围(0 .. 65535)在文件code1.a的第56行
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 不提供那种特定的伪指令。