关于MIPS中的加载字节指令

时间:2015-09-21 14:09:37

标签: assembly mips twos-complement

我想知道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。如果你们所有人都可以告诉我这件事,我将非常高兴。谢谢。

1 个答案:

答案 0 :(得分:1)

使用lb指令将单个字节装入32位寄存器时,MIPS架构会自动执行sign extension。对于第一个示例,加载的值(0x64)为正,因此寄存器包含0x0000006a。但是对于最后一个示例,该值为负(0x82 == -126),因此寄存器将符号扩展为0xffffff82(-126表示为32位有符号值)。

请注意,lbu指令是lb的无符号版本 - 它不执行符号扩展,因此生成的加载的高位字节将始终为零。