即使借助Google和我手中的教科书,我似乎无法掌握这些内容的概念。
遵循格式(操作码,rs,rt,偏移)......
答案 0 :(得分:30)
对于
lb
和lbu
,有什么区别?
“加载字节”指令lb
和lbu
将单个字节加载到32位寄存器的最右侧字节中。你如何设置高24位? unsigned 操作将它们设置为零;签名操作将sign-extend加载的字节。
例如,假设您从内存中读取字节0xFF
。 lbu
会将此值0扩展为0x000000FF
并将其解释为255,而lb
会将其符号扩展为0xFFFFFFFF
,这将被解释为-1。
为什么
lw
没有未签名的版本?即使商店说明书也没有......
另一方面,“加载字”指令(lw
)将32位数量加载到32位寄存器中,因此没有歧义,也不需要特殊的签名版本
如果存储的字不到一个完整的32位字,那么除了丢弃它们外,你无法对寄存器中的额外位做任何事情(忽略它们)。
它是否也遵循MIPS算法定义'unsigned'只是意味着它不会报告溢出?
我认为此约定仅适用于加减指令。对于其他指令,signed / unsigned指示是否将执行符号扩展。
您是否在将偏移量添加到地址值之前对其进行扩展?或者在扩展之前添加?
如果对符号进行符号扩展,则只有在将其添加到基址之前才有意义。我认为对two's complement算术的回顾会明确这一点。