14

我似乎无法掌握这些东西的概念,即使有谷歌的帮助和我手中的教科书。

遵循格式(操作码、rs、rt、偏移量)...

  • 您是否在将偏移量添加到地址值之前签署扩展偏移量?还是在扩展之前添加?
  • lblbu的情况下,有什么区别?它是否也遵循 MIPS 算术定义,即“无符号”只是意味着它不会报告溢出?
  • 为什么lw没有未签名的版本?连店里的说明书都没有……
4

1 回答 1

38

在 和 的情况下lblbu有什么区别?

“加载字节”指令将单个字节加载到 32 位寄存器的最右侧字节中lblbu你如何设置高24位?无符号操作会将它们设置为零;签名操作将对加载的字节进行符号扩展。

例如,假设您0xFF从内存中读取字节。 lbu将此值 0 扩展为0x000000FF并将其解释为 255,而lb将其符号扩展为0xFFFFFFFF,即解释为 -1。

为什么没有未lw签名的版本?连店里的说明书都没有……

lw另一方面,“加载字”指令 ( ) 将 32 位数量加载到 32 位寄存器中,因此没有歧义,也不需要特殊的签名版本。

如果您存储的字数少于一个完整的 32 位字,那么除了将它们扔掉(忽略它们)之外,您对寄存器中的额外位无能为力。

它是否也遵循 MIPS 算术定义,即“无符号”只是意味着它不会报告溢出?

我认为这个约定仅适用于加法和减法指令。对于其他指令,有符号/无符号表示是否将执行符号扩展。

您是否在将偏移量添加到地址值之前签署扩展偏移量?还是在扩展之前添加?

如果偏移量是符号扩展的,那么只有在将其添加到基地址之前才有意义。我认为对二进制补码算法的回顾会清楚这一点。

于 2011-08-29T05:24:05.747 回答