我正在通过 MIPS 指令学习计算机体系结构。我有一个问题是:
0x10000000 处的内存包含 0x80 寄存器 $5 包含 0x10000000 执行 lb $8,0($5) 后寄存器 $8 中放入了什么?
我在想,当调用加载字节时,它将从 0x10000000 地址获取 0x80[10000000] 的 8 位,并将其加载到 $8 寄存器的前 8 位,并用零填充剩余位,使答案为 00000080 .但列出的正确答案是FFFFFF80。我不确定我是否理解它。有人可以帮忙解释一下吗?
我正在通过 MIPS 指令学习计算机体系结构。我有一个问题是:
0x10000000 处的内存包含 0x80 寄存器 $5 包含 0x10000000 执行 lb $8,0($5) 后寄存器 $8 中放入了什么?
我在想,当调用加载字节时,它将从 0x10000000 地址获取 0x80[10000000] 的 8 位,并将其加载到 $8 寄存器的前 8 位,并用零填充剩余位,使答案为 00000080 .但列出的正确答案是FFFFFF80。我不确定我是否理解它。有人可以帮忙解释一下吗?
您在此处提到的指令是lb
通过将字节符号扩展为字长来将一个字节加载到寄存器中。这意味着如果最高有效位设置为 1,它也会用 1 填充剩余的 24 位。这样做是为了以 32 位表示形式保留字节的二进制补码值。
如果您的字节是0100 1010
符号扩展,则会用0
as
填充它0000 000... 0100 1010
。
如果您的字节是1011 0101
符号扩展,则会用1
as
填充它1111 111... 1011 0101
。
为避免这种情况并始终填充字节,您可以使用不执行符号扩展但填充字节0
的替代指令。这保留了字节的无符号值,因为它们不涉及二进制补码。lbu
0