5

当使用十六进制立即值时,是否有关于如何addi在汇编中解释指令(和其他指令)的标准或建议?

例子:

addi $t0, $zero, 0xffff

我原以为这意味着与将符号扩展到的addi $t0, $zero, -1位置相同,就像处理器所做的那样,但令人惊讶的是,火星模拟器的汇编程序将十六进制解释为 32 位无符号数字并尝试将其作为伪-指令(如果启用了伪指令)。0xffff0xffffffffaddi $t0, $zero, 0x0000ffff

需要明确的是,MARS 的汇编器将该addi $t0, $zero, 0xffff伪指令汇编为多个机器指令,这些指令在寄存器中创建该常量(65535 = 0xffff),然后在启用伪指令的情况下添加它。MARS 的模拟器可以正确模拟0x2008ffff( ) 之类的指令addi $t0, $zero, -1

SPIM 汇编器只是因错误而中止。

我想知道的是汇编程序是否总是以这种方式解释,以及是否在某个地方写或解释了这一点,因为我找不到任何东西。

4

0 回答 0