我如何知道 MIPS 内存地址中的某些内容是有符号数据还是无符号数据?

0 assembly mips

我很难理解内存如何与 MIPS 一起工作。我意识到 MIPS 中有有符号和无符号指令,例如addaddu但我怎么知道我从内存加载或存储到内存的内容是有符号还是无符号位?另外,为什么lw指令是有符号的,但加载半字或加载字节的指令只出现在 unsigned 中ie lhu and lbu

任何澄清将不胜感激!

a3f*_*a3f 5

我怎么知道我从内存中加载或存储的内容是有符号位还是无符号位?

在 MIPS 汇编中编程时没有类型系统。因此,您有责任跟踪操作是否应该签名或未签名。在add/adduand的情况下sub/subu,唯一的区别是签名版本会导致溢出异常。

加载半字或加载字节的指令仅以无符号形式出现,即 lhu 和 lbu

有这些的签名版本,lhlb

为什么要签署 lw 指令

如果您将一个半字加载lh/lhu到寄存器中,那么您将加载到寄存器的下半部分。这将在寄存器顶部留下 16 位需要填充一些值。使用无符号版本时,会执行零扩展,这很好,因为“左侧”的零不会影响该值。使用有符号负载时,会改为执行符号扩展。

由于lw没有高位,需要填充。因此,只需要一个版本。