2

我正在通过 MIPS 指令学习计算机体系结构。我有一个问题是:

0x10000000 处的内存包含 0x80 寄存器 $5 包含 0x10000000 执行 lb $8,0($5) 后寄存器 $8 中放入了什么?

我在想,当调用加载字节时,它将从 0x10000000 地址获取 0x80[10000000] 的 8 位,并将其加载到 $8 寄存器的前 8 位,并用零填充剩余位,使答案为 00000080 .但列出的正确答案是FFFFFF80。我不确定我是否理解它。有人可以帮忙解释一下吗?

4

1 回答 1

3

您在此处提到的指令是lb通过将字节符号扩展为字长来将一个字节加载到寄存器中。这意味着如果最高有效位设置为 1,它也会用 1 填充剩余的 24 位。这样做是为了以 32 位表示形式保留字节的二进制补码值。

如果您的字节是0100 1010符号扩展,则会用0as 填充它0000 000... 0100 1010

如果您的字节是1011 0101符号扩展,则会用1as 填充它1111 111... 1011 0101

为避免这种情况并始终填充字节,您可以使用不执行符号扩展但填充字节0的替代指令。这保留了字节的无符号值,因为它们不涉及二进制补码。lbu0

于 2019-03-06T06:35:14.683 回答