ARM 中只有两个操作数的 ADD 或 SUB

2024-04-20

我正在学习ARM汇编语言。 我读过 ADD 应该有 3 个操作数。然而,我见过很多案例,现实中只有两种。例如:

STR     R1, [SP,#0x20+var_1C]
LDR     R1, =(a_lua - 0x1DE4E6)
MOVS    R0, R4          ; haystack
ADD     R1, PC          
BLX     strstr
CMP     R0, #0
BNE     loc_1DE4FA

谁能帮我解释一下带有两个操作数的 ADD 的含义吗?非常感谢!


鉴于评论中的信息表明这确实是 ARM 代码,而不是 16 位 Thumb,那么答案是您的参考资料早于 UAL。

Thumb-2 指令集的推出带来了修改后的汇编语法 http://infocenter.arm.com/help/topic/com.arm.doc.dui0379d/Cjagjjbc.html called 统一汇编语言它取代了之前的 ARM 和 Thumb 语法。 UAL 允许(在合理范围内)将相同的源代码汇编为 ARM 或 Thumb 指令,而不是使用两种独立(且不兼容)的语言。这样做的后果之一是,对于任何具有 2 操作数 Thumb 等效项的 3 操作数 ARM 指令,指定目标寄存器是可选的 - 如果省略,它将默认为第一个源寄存器*。

大多数汇编器仍将支持较旧的 UAL 之前语法以实现兼容性,但一旦您掌握了基础知识,就值得更新到更现代的参考,因为存在一些可能令人困惑的更改(例如几乎所有浮点助记符)。

* except in the case of MUL where it's the other way round for awkward technical reasons.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ARM 中只有两个操作数的 ADD 或 SUB 的相关文章

随机推荐