关于 MIPS 中的加载字节指令
About load byte instruction in MIPS
我想了解MIPS load byte (lb
)指令的处理过程。我发现了要求我通过给定 byte@7=0x82, byte@8=0x6A
.
填充变量的问题
lb $s4,8([=12=])
(答案是$s4=6A
)
lhu $s5,7([=14=])
(答案是$s5=6A82
)
lb $s4,7([=16=])
(答案是$s4=FFFFFFF82
)
我想我在第一个和第二个问题中理解了。但是我真的不明白第三个问题为什么答案是FFFFFFF82
。如果你们能告诉我这件事,我将非常高兴。谢谢你。
当您使用 lb
指令将单个字节加载到 32 位寄存器时,MIPS 架构会自动执行 sign extension。对于第一个示例,加载的值 (0x64
) 是正数,因此寄存器包含 0x0000006a
。但对于最后一个示例,该值为负数 (0x82
== -126),因此寄存器将被符号扩展为 0xffffff82
(-126 表示为 32 位有符号值)。
请注意,lbu
指令是 lb
的无符号版本 - 它不执行符号扩展,因此结果加载的高位字节将始终为零。
我想了解MIPS load byte (lb
)指令的处理过程。我发现了要求我通过给定 byte@7=0x82, byte@8=0x6A
.
lb $s4,8([=12=])
(答案是$s4=6A
)lhu $s5,7([=14=])
(答案是$s5=6A82
)lb $s4,7([=16=])
(答案是$s4=FFFFFFF82
)
我想我在第一个和第二个问题中理解了。但是我真的不明白第三个问题为什么答案是FFFFFFF82
。如果你们能告诉我这件事,我将非常高兴。谢谢你。
当您使用 lb
指令将单个字节加载到 32 位寄存器时,MIPS 架构会自动执行 sign extension。对于第一个示例,加载的值 (0x64
) 是正数,因此寄存器包含 0x0000006a
。但对于最后一个示例,该值为负数 (0x82
== -126),因此寄存器将被符号扩展为 0xffffff82
(-126 表示为 32 位有符号值)。
请注意,lbu
指令是 lb
的无符号版本 - 它不执行符号扩展,因此结果加载的高位字节将始终为零。