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

can the mips pseudo-instruction la be replace by a single MIPS instruction?

指令la ,-16()可以用一条MIPS机器指令代替吗?我一直在搜索,每次我都找到 luiori.

的组合

la 是一条伪指令,并且有一种形式 — la $<target>, label — 这对于 MARS 和 QtSPIM 来说是必不可少的,因为这些汇编器不支持 %hi 和 %lo其他汇编程序支持的功能。通过在线搜索,您发现这种形式的 la 可以转换为 luiori(或类似的东西)。因为这可能是 la 最常见的用法,也是一种基本形式,所以我们在网上搜索时就找到了。

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

许多伪指令生成的机器代码指令比您预期的要多。例如,在 MARS 上,la $t1, 4($t2) 生成两条机器代码指令,一条将常量 4 加载到 $at 中,另一条执行 add reg, reg, $at — 完全没有必要,因为单个 addiu 的效果是一样的。更重要的是,汇编程序选择 add 而不是 addu,冒着在寻址时出现虚假有符号整数溢出陷阱的风险,应始终将其视为无符号整数。


您可以使用 MARS 亲自查看 - 只需查看伪指令的反汇编即可。