我似乎无法掌握这些东西的概念,即使有谷歌的帮助和我手中的教科书。
遵循格式(操作码、rs、rt、偏移量)...
- 您是否在将偏移量添加到地址值之前签署扩展偏移量?还是在扩展之前添加?
- 在lb和lbu的情况下,有什么区别?它是否也遵循 MIPS 算术定义,即“无符号”只是意味着它不会报告溢出?
- 为什么lw没有未签名的版本?连店里的说明书都没有……
我似乎无法掌握这些东西的概念,即使有谷歌的帮助和我手中的教科书。
遵循格式(操作码、rs、rt、偏移量)...
在 和 的情况下
lb
,lbu
有什么区别?
“加载字节”指令将单个字节加载到 32 位寄存器的最右侧字节中lb
。lbu
你如何设置高24位?无符号操作会将它们设置为零;签名操作将对加载的字节进行符号扩展。
例如,假设您0xFF
从内存中读取字节。 lbu
将此值 0 扩展为0x000000FF
并将其解释为 255,而lb
将其符号扩展为0xFFFFFFFF
,即解释为 -1。
为什么没有未
lw
签名的版本?连店里的说明书都没有……
lw
另一方面,“加载字”指令 ( ) 将 32 位数量加载到 32 位寄存器中,因此没有歧义,也不需要特殊的签名版本。
如果您存储的字数少于一个完整的 32 位字,那么除了将它们扔掉(忽略它们)之外,您对寄存器中的额外位无能为力。
它是否也遵循 MIPS 算术定义,即“无符号”只是意味着它不会报告溢出?
我认为这个约定仅适用于加法和减法指令。对于其他指令,有符号/无符号表示是否将执行符号扩展。
您是否在将偏移量添加到地址值之前签署扩展偏移量?还是在扩展之前添加?
如果偏移量是符号扩展的,那么只有在将其添加到基地址之前才有意义。我认为对二进制补码算法的回顾会清楚这一点。