MIPS汇编序列执行后s0寄存器的十六进制值求解
问题解答:MIPS汇编执行后s0的十六进制值
结论
执行完成后,s0的十六进制值是 0xFFFFFFD2,而非你认为的0xD2。
关键原因解析
问题出在lb指令的特性上:
lb是**符号扩展加载字节(Load Byte)**指令,MIPS的通用寄存器是32位宽度,该指令会把8位的字节值符号扩展为32位后存入寄存器。- 目标字节
0xD2的二进制是11010010,最高位(第7位)为1,说明这是一个负数的8位补码。符号扩展时,会将寄存器的高24位全部填充为1,最终得到32位补码值0xFFFFFFD2。
补充说明
- 如果想要得到无符号的
0x000000D2,需要使用无符号加载字节指令lbu(Load Byte Unsigned),它会将高24位填充为0。 - 代码中后续的
sb s1, 3(t0)指令不会影响s0的值,因为s0在这条指令执行前已经完成赋值操作。
内容的提问来源于stack exchange,提问作者Britney Lu
相关产品推荐
相关产品推荐

