有关签名/未签名的加载和存储指令(MIPS)的说明

Che*_*eck 12 assembly mips

即使借助Google和我手中的教科书,我似乎无法掌握这些内容的概念.

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

  • 在将其添加到地址值之前,您是否签署扩展偏移量?或者在扩展之前添加?
  • lblbu的情况下,有什么区别?它是否也遵循MIPS算术定义'unsigned'只是意味着它不会报告溢出?
  • 为什么不LW有一个无符号的版本?即使是商店的说明也没有......

nib*_*bot 31

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

"加载字节"指令lb并将lbu单个字节装入32位寄存器的最右侧字节.你如何设置高24位?在无符号的操作将其设置为0; 签名操作将对加载的字节进行符号扩展.

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

为什么没有未lw签名的版本?即使是商店的说明也没有......

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

如果存储的字不到一个完整的32位字,那么除了丢弃它们之外,你无法对寄存器中的额外位做任何事情(忽略它们).

它是否也遵循MIPS算术定义'unsigned'只是意味着它不会报告溢出?

我认为这个约定只适用于加法和减法指令.对于其他指令,signed/unsigned指示是否将执行符号扩展.

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

如果对符号进行符号扩展,则只有在将其添加到基址之前才有意义.我认为对两个补码算法的回顾将使这一点清楚.