在MIPS中加载字节指令

时间:2019-03-06 04:45:44

标签: mips cpu-architecture mips32 sign-extension

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

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

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

1 个答案:

答案 0 :(得分:2)

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

如果您的字节为0100 1010,则符号扩展名将以0填充为 0000 000... 0100 1010

如果您的字节为1011 0101,则符号扩展名将以1填充为 1111 111... 1011 0101

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