mips - MIPS 中的加载字节指令

标签 mips cpu-architecture mips32 sign-extension

我正在通过 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 填充字节的指令反而。 这保留了字节的无符号值,因为这些值不涉及二进制补码。

关于mips - MIPS 中的加载字节指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55015738/

相关文章:

c - 从 C 转换为 MIPS

linux - 为 MIPS 汇编开发创建功能齐全的环境

mips - MIPS r10000 如何获取隐藏指令缓存延迟?

programming-languages - 计算机如何理解时间?没有等待的asm指令

cpu - CPU的时钟速度和时钟周期之间的关系

MIPS架构系统调用指令

linux - 当缺少 dpkg 架构时,如何区分 linux 上的 mips cpu 类型?

c++ - 如何为性能设计对象

mips - MIPS 中整数的表示

c - qtspim 未知系统调用 : 40?