【问题标题】:MIPS Assembly li Pseudo-InstructionMIPS 汇编 li 伪指令
【发布时间】:2014-08-03 00:01:20
【问题描述】:

MIPS 中的 li (load immediate) 伪指令是否根据常量的符号和大小以不同的方式将常量加载到寄存器中?例如,当常数是二进制补码 (-2^15

我发现的链接没有具体解决它。如果您用示例进行解释(我使用 MARS 模拟器),那就太好了。

【问题讨论】:

  • 如果您要求的是立即加载,则始终是符号扩展
  • @KonradLindenbach:我问的是当常量是 16 位正数或负数时如何将 li 转换为实际指令(因为 li 是伪指令)。它是翻译成相同的序列/指令集还是基于数字的符号,使用不同的指令? 32 位数字使用什么指令?

标签: assembly mips


【解决方案1】:

LI 当立即数可以表示为 16 位二进制补码数时,汇编器会将其转换为单个指令。 (通常是addiu $dst, 0, imm)。

LI 由汇编器翻译成LUI(加载上立即数),然后是ORI,当立即数太大而无法表示为 16 位二进制补码数时。

【讨论】:

  • 没有li 指令。 li 通常会变成addiu $dst, $0, imm,尽管存在其他可能性。当常量不适合 16 位时,lui 将用于首先加载顶部,因为这会清除低半部分,然后是 ori
  • 要处理适合 0..65535 但不适合 -32768..32767 的值,MARS 将使用 ori $dst, $0, imm 而不是 addiu。 (What does "extend immediate to 32 bits" mean in MIPS? 详细介绍了 MIPS 如何对大多数立即数进行符号扩展,但对逻辑指令进行零扩展)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多