试着用SPIM测试我的程序
spim:(解析器)直接值(-16)超出范围(0 .65535)在文件代码1.a的第56行
andi $t1, $t0, 0xfffffff0有什么问题吗?
发布于 2022-02-19 19:49:32
MIPS处理器不能在一条指令中完成这个操作。andi指令是一条I型指令,它包含一个16位的直接指令--而且andi指令零将16位直接扩展到32位,所以它不能保持负数(ori & xori也是零扩展,而addi和其他所有符号都是扩展立即)。
当我们不能在一条指令中完成某件事情时,使用一系列指令。在这种情况下,将立即加载到寄存器中,然后使用and R-Type指令。
FYI,火星模拟器的汇编程序将采用andi $t1, $t0, 0xfffffff0,尽管它把它当作一个伪指令,并将这一行程序集扩展成一个3指令机器代码序列,该代码序列将常量加载到寄存器中(使用两条指令:一条比工作所需的多一条),然后使用该and。
显然,Spim不提供特定的伪指令。
https://stackoverflow.com/questions/71188529
复制相似问题