我很难理解内存如何与 MIPS 一起工作。我意识到 MIPS 中有有符号和无符号指令,例如add
和addu
但我怎么知道我从内存加载或存储到内存的内容是有符号还是无符号位?另外,为什么lw
指令是有符号的,但加载半字或加载字节的指令只出现在 unsigned 中ie lhu and lbu
?
任何澄清将不胜感激!
我怎么知道我从内存中加载或存储的内容是有符号位还是无符号位?
在 MIPS 汇编中编程时没有类型系统。因此,您有责任跟踪操作是否应该签名或未签名。在add/addu
and的情况下sub/subu
,唯一的区别是签名版本会导致溢出异常。
加载半字或加载字节的指令仅以无符号形式出现,即 lhu 和 lbu
有这些的签名版本,lh
和lb
。
为什么要签署 lw 指令
如果您将一个半字加载lh/lhu
到寄存器中,那么您将加载到寄存器的下半部分。这将在寄存器顶部留下 16 位需要填充一些值。使用无符号版本时,会执行零扩展,这很好,因为“左侧”的零不会影响该值。使用有符号负载时,会改为执行符号扩展。
由于lw
没有高位,需要填充。因此,只需要一个版本。
归档时间: |
|
查看次数: |
1208 次 |
最近记录: |