我想知道MIPS 加载字节(lb
)指令的处理。我找到了一个问题,要求我按给定的byte@7=0x82, byte@8=0x6A
填充变量。
lb $s4,8($0)
(答案是$s4=6A
)
lhu $s5,7($0)
(答案是$s5=6A82
)
lb $s4,7($0)
(答案是$s4=FFFFFFF82
)
我想在第一和第二个问题上我理解了。但我在第3个问题中并不真正理解为什么答案是FFFFFFF82
。如果你们所有人都可以告诉我这件事,我将非常高兴。谢谢。
答案 0 :(得分:1)
使用lb
指令将单个字节装入32位寄存器时,MIPS架构会自动执行sign extension。对于第一个示例,加载的值(0x64
)为正,因此寄存器包含0x0000006a
。但是对于最后一个示例,该值为负(0x82
== -126),因此寄存器将符号扩展为0xffffff82
(-126表示为32位有符号值)。
请注意,lbu
指令是lb
的无符号版本 - 它不执行符号扩展,因此生成的加载的高位字节将始终为零。