mips 伪指令 la 可以用单个 MIPS 指令代替吗?

时间:2021-07-14 02:04:06

标签: assembly mips micro-optimization instructions

指令 la $4,-16($9) 可以替换为单个 MIPS 机器指令吗?我一直在寻找,每次都找到luiori 的组合。

1 个答案:

答案 0 :(得分:2)

la 是一条伪指令,并且有一种形式 — la $<target>, label — 对于 MARS 和 QtSPIM 非常重要,因为这些汇编程序不支持 %hi 和 %lo 函数其他汇编器支持。您通过在线搜索发现这种形式的 la 可以翻译为 luiori(或类似的东西)。因为这可能是 la 最常见的用法,也是一种基本形式,这就是我们在在线搜索中找到的内容。

然而,这些汇编器(MARS 和 QtSPIM)在允许各种非实际机器指令的“很好的”形式方面非常有帮助。所以,是的,您显示的表单可以替换为单个“添加”立即注册操作,您可以(并且应该)首先编写它。没有充分的理由使用它来代替更直接的 addiu。 (但是,并非所有形式的 la 都可以用一条指令代替。)

许多伪指令生成的机器代码指令比您预期的要多。例如,在 MARS 上,la $t1, 4($t2) 生成两条机器代码指令,一条将常量 4 加载到 $at 中,另一条则添加 reg, reg, $at — 由于单个 {{ 1}} 会起到同样的作用。更重要的是,汇编器选择 addiu 而不是 add,冒着寻址时出现虚假有符号整数溢出陷阱的风险,而应该始终将其视为无符号。


您可以使用 MARS 亲眼看到这一点 — 只需查看反汇编中的伪指令即可。