常用 ARM 指令集及汇编
2003 年 11 月 24 日
常用 ARM 指令集及汇编 Ver:1.0.10
前言
ARM(Advanced RISC Machines)是微处理器行业的一家知名企业,该企业设计了
大量高性能、廉价、耗能低的 RISC 处理器、相关技术及软件。技术具有性能高、成本
低和能耗省的特点,适用于多种领域,比如嵌入控制、消费/教育类多媒体、DSP 和移
动式应用等。
ARM 将其技术授权给世界上许多著名的半导体、软件和 OEM 厂商,每个厂商得到的
都是独一无二的 ARM 相关技术及服务,利用这种合作关系,ARM 很快成为许多全球性 RISC
标准的缔造者。
目前,ARM内核的微处理器正在我国迅速普及和发展,许多朋友已经开始着手学习、
研究和利用这类芯片进行商品化设计,为了帮助广大朋友更快的学习和使用这种先进的
技术,广州周立功单片机发展有限公司(http://www.zlgmcu.com)曾面向大众推出了一
款EasyARM试验板,本文的大部分内容来自此款试验板的配套教材--《ARM微控制器基
础》,并且得到周立功正式授权。本文主要是针对ARM7TDMI(-S)内核,经本人重新排版,
制作成PDF格式,便于大家查阅和使用。
本文仅仅用于大家的学习和研究使用,由于本文的原因造成元器件的损坏、设计方
案的缺陷与失败等一切损失,概不负责。
感谢周立功老师为我们提供了丰富的资源并亲自审阅了本文,感谢单片机学习网
(http://www.mcustudy.com)为我们提供了交流和学习的空间,感谢我的女友对我这项
工作的支持,她自己放弃了大量的业余时间帮我录入和排版。
由于时间仓促,本文难免会存在不当之处,欢迎大家来信(email:mcu8031@163.com)
或在网上(QQ:57523799)批评指正和交流,以便在今后的版本加以更正,也希望大家能
把自己在工作中的心得体会和经验拿出来,和众多的同行及爱好者交流,共同提高,一
起进步。
宛城布衣
2003 年 11 月 24 日星期一
第 i 页
By 宛城布衣 QQ:57523799 email: mcu8031@163.com
常用 ARM 指令集及汇编 Ver:1.0.10
目录
前言 ................................................................................................................................................................i
目录 ................................................................................................................................................................I
ARM7TDMI(-S)指令集及汇编 ....................................................................................................................1
ARM 处理器寻址方式..........................................................................................................................2
寄存器寻址....................................................................................................................................2
立即寻址........................................................................................................................................2
寄存器偏移寻址............................................................................................................................2
寄存器间接寻址............................................................................................................................3
基址寻址........................................................................................................................................3
多寄存器寻址................................................................................................................................4
堆栈寻址........................................................................................................................................4
块拷贝寻址....................................................................................................................................5
相对寻址........................................................................................................................................5
指令集介绍............................................................................................................................................7
ARM 指令集..................................................................................................................................7
指令格式................................................................................................................................7
第 2 个操作数................................................................................................................7
#immed_8r ...........................................................................................................7
Rm..........................................................................................................................8
Rm,shift..................................................................................................................8
条件码............................................................................................................................9
ARM 存储器访问指令........................................................................................................ 11
LDR 和 STR ........................................................................................................ 11
LDM 和 STM.......................................................................................................14
SWP .....................................................................................................................17
ARM 数据处理指令............................................................................................................19
数据传送指令..............................................................................................................20
MOV ............................................................................................................20
MVN ............................................................................................................20
算术逻辑运算指令......................................................................................................20
ADD .............................................................................................................20
SUB..............................................................................................................21
RSB ..............................................................................................................21
ADC .............................................................................................................21
SBC ..............................................................................................................21
RSC ..............................................................................................................22
AND .............................................................................................................22
ORR..............................................................................................................22
EOR..............................................................................................................22
BIC ...............................................................................................................23
第 I 页
By 宛城布衣 QQ:57523799 email: mcu8031@163.com
常用 ARM 指令集及汇编 Ver:1.0.10
比较指令......................................................................................................................23
CMP .............................................................................................................23
CMN.............................................................................................................23
TST...............................................................................................................24
TEQ..............................................................................................................24
乘法指令......................................................................................................................25
MUL.............................................................................................................25
MLA.............................................................................................................25
UMULL........................................................................................................25
UMLAL........................................................................................................26
SMULL ........................................................................................................26
SMLAL ........................................................................................................26
ARM 跳转指令....................................................................................................................27
B...........................................................................................................................27
BL.........................................................................................................................27
BX ........................................................................................................................27
ARM 协处理器指令............................................................................................................28
CDP......................................................................................................................28
LDC......................................................................................................................29
STC ......................................................................................................................29
MCR.....................................................................................................................30
MRC.....................................................................................................................30
ARM 杂项指令....................................................................................................................31
SWI ......................................................................................................................31
MRS .....................................................................................................................32
MSR .....................................................................................................................33
ARM 伪指令........................................................................................................................34
ADR .....................................................................................................................35
ADRL...................................................................................................................35
LDR......................................................................................................................36
NOP......................................................................................................................37
Thumb 指令集 .............................................................................................................................39
Thumb 指令集与 ARM 指令集的区别 ..............................................................................39
Thumb 存储器访问指令 .....................................................................................................40
LDR 和 STR ........................................................................................................41
PUSH 和 POP ......................................................................................................43
LDMIA 和 STMIA ..............................................................................................43
Thumb 数据处理指令 .........................................................................................................45
数据传送指令..............................................................................................................46
MOV ............................................................................................................46
MVN ............................................................................................................46
NEG..............................................................................................................47
算术逻辑运算指令......................................................................................................47
ADD .............................................................................................................47
第 II 页
By 宛城布衣 QQ:57523799 email: mcu8031@163.com
常用 ARM 指令集及汇编 Ver:1.0.10
SUB..............................................................................................................48
ADC .............................................................................................................49
SBC ..............................................................................................................49
MUL.............................................................................................................50
AND .............................................................................................................50
ORR..............................................................................................................50
EOR..............................................................................................................51
BIC ...............................................................................................................51
ASR..............................................................................................................51
LSL...............................................................................................................52
LSR ..............................................................................................................52
ROR..............................................................................................................53
比较指令......................................................................................................................53
CMP .............................................................................................................53
CMN.............................................................................................................54
TST...............................................................................................................54
Thumb 跳转指令 .........................................................................................................55
B ...................................................................................................................55
BL.................................................................................................................55
BX ................................................................................................................55
Thumb 杂项指令 .........................................................................................................56
SWI ..............................................................................................................56
Thumb 伪指令 .............................................................................................................57
ADR .............................................................................................................57
LDR..............................................................................................................57
NOP..............................................................................................................58
伪指令..................................................................................................................................................59
符号定义伪指令..........................................................................................................................59
GBLA、GBLL、GBLS ..............................................................................................59
LCLA、LCLL、LCLS................................................................................................60
SETA、SETL、SETS .................................................................................................61
RLIST...........................................................................................................................61
CN ................................................................................................................................62
CP.................................................................................................................................62
DN、SN.......................................................................................................................62
FN.................................................................................................................................63
数据定义伪指令..........................................................................................................................63
LTORG.........................................................................................................................64
MAP.............................................................................................................................64
FIELD ..........................................................................................................................65
SPACE..........................................................................................................................66
DCB .............................................................................................................................66
DCD 和 DCDU............................................................................................................67
DCDO ..........................................................................................................................67
第 III 页
By 宛城布衣 QQ:57523799 email: mcu8031@163.com
常用 ARM 指令集及汇编 Ver:1.0.10
DCFD 和 DCFDU........................................................................................................68
DCFS 和 DCFSU.........................................................................................................68
DCI...............................................................................................................................69
DCQ 和 DCQU............................................................................................................69
DCW 和 DCWU ..........................................................................................................70
报告伪指令..................................................................................................................................70
ASSERT .......................................................................................................................70
INFO ............................................................................................................................71
OPT ..............................................................................................................................71
TTL 和 SUBT ..............................................................................................................72
汇编控制伪指令..........................................................................................................................73
IF、ELSE 和 ENDIF...................................................................................................73
MACRO 和 MEND .....................................................................................................74
WHIL 和 WEND .........................................................................................................75
杂项伪指令..................................................................................................................................76
ALIGN .........................................................................................................................77
AREA...........................................................................................................................78
CODE16 和 CODE32..................................................................................................79
END .............................................................................................................................80
ENTRY.........................................................................................................................80
EQU .............................................................................................................................81
EXPORT 和 GLOBAL ................................................................................................81
IMPORT 和 EXTERN .................................................................................................82
GET 和 INCLUDE ......................................................................................................83
INCBIN........................................................................................................................83
KEEP............................................................................................................................83
NOFP ...........................................................................................................................84
REQUIRE ....................................................................................................................84
PEQUIRE8 和 PRESERVE8 .......................................................................................84
RN ................................................................................................................................84
ROUT...........................................................................................................................85
ARM 伪指令................................................................................................................................86
ADR .............................................................................................................................86
ADRL...........................................................................................................................86
LDR..............................................................................................................................86
NOP..............................................................................................................................86
LDFD ...........................................................................................................................86
LDFS............................................................................................................................87
Thumb 伪指令 .............................................................................................................................87
ADR .............................................................................................................................87
LDR..............................................................................................................................87
NOP..............................................................................................................................88
ARM 汇编程序设计............................................................................................................................88
文件格式......................................................................................................................................88
第 IV 页
By 宛城布衣 QQ:57523799 email: mcu8031@163.com
常用 ARM 指令集及汇编 Ver:1.0.10
ARM 汇编的一些规范................................................................................................................88
汇编语句格式......................................................................................................................88
标号......................................................................................................................................89
基于 PC 的标号...................................................................................................89
基于寄存器的标号..............................................................................................90
绝对地址..............................................................................................................90
局部标号..............................................................................................................................90
符号......................................................................................................................................91
常量......................................................................................................................................91
数字常数..............................................................................................................91
字符常量..............................................................................................................92
布尔常量..............................................................................................................92
段定义..................................................................................................................................92
宏定义及其作用..................................................................................................................93
子程序的调用..............................................................................................................................94
数据比较跳转..............................................................................................................................95
循环..............................................................................................................................................95
数据块复制..................................................................................................................................95
栈操作..........................................................................................................................................96
特殊寄存器定义及应用..............................................................................................................96
散转功能......................................................................................................................................97
查表操作......................................................................................................................................97
长跳转..........................................................................................................................................97
对信号量的支持..........................................................................................................................98
伪指令使用..................................................................................................................................98
一个完整的例子..........................................................................................................................98
外围部件控制..............................................................................................................................99
三级流水线介绍..........................................................................................................................99
C 与汇编混合编程............................................................................................................................100
内嵌汇编....................................................................................................................................100
内嵌汇编的指令用法........................................................................................................103
内嵌汇编器与 armasm 汇编器的差异 .............................................................................104
内嵌汇编注意事项............................................................................................................104
访问全局变量............................................................................................................................106
C 与汇编相互调用 ....................................................................................................................107
寄存器的使用规则............................................................................................................108
堆栈使用规则....................................................................................................................108
参数传递规则....................................................................................................................109
C 程序调用汇编程序 ........................................................................................................ 110
汇编程序调用 C 程序 ....................................................................................................... 111
ARM 指令集列表.............................................................................................................................. 113
ARM 存储器访问指令表列表.................................................................................................. 113
ARM 数据处理指令列表.......................................................................................................... 114
ARM 乘法指令列表.................................................................................................................. 115
第 V 页
By 宛城布衣 QQ:57523799 email: mcu8031@163.com
常用 ARM 指令集及汇编 Ver:1.0.10
ARM 跳转指令列表.................................................................................................................. 116
ARM 协处理器指令列表.......................................................................................................... 117
ARM 杂项指令列表.................................................................................................................. 118
ARM 伪指令列表...................................................................................................................... 119
Thumb 指令集列表 ...........................................................................................................................120
Thumb 存储器访问指令列表 ...................................................................................................120
Thumb 数据处理指令列表 .......................................................................................................121
Thumb 跳转指令及软中断指令列表 .......................................................................................122
Thumb 伪指令列表 ...................................................................................................................123
汇编预定义变量及伪指令................................................................................................................124
预定义的寄存器和协处理器名................................................................................................124
通用寄存器........................................................................................................................124
程序状态寄存器................................................................................................................124
浮点数寄存器....................................................................................................................124
协处理器及协处理器寄存器............................................................................................125
内置变量列表............................................................................................................................125
伪指令列表................................................................................................................................126
指令条件码列表........................................................................................................................128
CPSR 和 SPSR 分配图 .............................................................................................................................129
第 VI 页
By 宛城布衣 QQ:57523799 email: mcu8031@163.com