我正在学习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
Run Code Online (Sandbox Code Playgroud)
谁能帮我解释一下带有两个操作数的 ADD 的含义吗?非常感谢!
鉴于评论中的信息表明这确实是 ARM 代码,而不是 16 位 Thumb,那么答案是您的参考材料早于 UAL。
Thumb-2 指令集的引入带来了一种称为统一汇编语言的修改后的汇编语法,它取代了以前的 ARM 和 Thumb 语法。UAL 允许(在合理范围内)将相同的源代码汇编为 ARM 或 Thumb 指令,而不是使用两种独立(且不兼容)的语言。这样做的后果之一是,对于任何具有 2 操作数 Thumb 等效项的 3 操作数 ARM 指令,指定目标寄存器是可选的 - 如果省略,则将默认为第一个源寄存器*。
大多数汇编器仍将支持较旧的 UAL 之前语法以实现兼容性,但一旦您掌握了基础知识,就值得更新到更现代的参考,因为存在一些可能令人困惑的更改(例如几乎所有浮点助记符)。
* 除非由于MUL尴尬的技术原因而出现相反的情况。
| 归档时间: |
|
| 查看次数: |
6749 次 |
| 最近记录: |