微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决mips 伪指令 la 可以用单个 MIPS 指令代替吗?

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

解决方法

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 亲眼看到这一点 — 只需查看反汇编中的伪指令即可。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。