MIPS 中的加载字节指令

load byte instruction in MIPS

我正在通过 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 填充它作为 0000 000... 0100 1010.

如果您的字节是 1011 0101 符号扩展将用 1 填充它作为 1111 111... 1011 0101.

为避免这种情况并始终用 0 填充字节,您可以使用替代 lbu 指令,该指令不执行符号扩展,而是用 0 填充字节。 这保留了字节的 unsigned 值,因为那些不涉及二进制补码。