【问题标题】:What's the point of this OR with zero MIPS instruction?这个 OR 与零 MIPS 指令有什么意义?
【发布时间】:2021-07-23 18:31:30
【问题描述】:

我目前正在学习 r5900l 处理器的 MIPS 汇编,我正在尝试从 ps2 可执行文件中读取一些代码。

lui a0, 0x002B
...
addiu a0,a0,0xC0F0
or gp,a0,zero

现在,为什么要这样做或操作? 如果我理解正确,按位或比较 a0 和零的二进制值,如果两者中至少有一个为 1,则该值为 1,否则保持 0。但如果零全为 0,那有什么意义做or操作?为什么不将 a0 寄存器加载到 gp 中?

(如果您需要更多信息,我可以发布更多代码。提前致谢!)

【问题讨论】:

  • 为什么不将 a0 寄存器加载到 gp 中? 这正是它正在做的事情,这是 MIPS ISA 提供的唯一方式之一。如果您的意思是为什么不将 LUI/ADDIU 首先放入 gp,可能是未优化的代码,或者它需要两个寄存器中的值。
  • 是的,我只是认为有一个命令,例如 mov gp, a0 ,但显然 mips 没有那个
  • 是的,仅作为伪指令,move gp, a0 gusbro 的回答指出。您可能应该接受这个答案(在投票箭头下方打勾)。

标签: assembly mips


【解决方案1】:

OR 指令在第二个和第三个参数的每个位之间应用按位或(在您的示例中,在a0zero 之间)并将结果存储在第一个参数中(在您的示例中为gp) .由于zero 全为零,因此最终结果是a0 的内容被复制到gp

MIPS 中没有move 指令,因此您可以使用其他指令执行该操作,例如您提供的指令。

通常,汇编器允许您使用包含一个或多个实际 MIPS 指令的伪指令(例如,la 通常转换为 lui + ori) 所以一个招gp, a0伪指令可能真的组装成or gp, a0, zero

也许您正在查看反汇编代码,而反汇编程序没有将指令“反转”为适用的伪指令。

【讨论】:

  • 感谢您的解释!顺便说一句,是的,我正在查看 ps2dis 的反汇编代码,所以这可能是一个解释
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 2020-02-05
  • 1970-01-01
  • 2016-02-27
  • 2014-04-28
相关资源
最近更新 更多