ARM汇编指令详解:从入门到精通

5星 · 超过95%的资源 需积分: 10 16 下载量 94 浏览量 更新于2024-07-29 收藏 892KB PDF 举报
"这是一份由北京顶嵌开源科技有限公司编写的ARM汇编指令教程,主要涵盖了ARM架构下的汇编语言基础,包括寄存器操作、数据传输、算术和逻辑指令、移位操作、乘法指令、程序状态寄存器访问、异常处理、协处理器指令以及跳转指令等内容。这份手册是公司内部培训资料,仅供内部学习使用,未经授权不得用于商业用途。" ARM汇编指令是编程人员直接与ARM处理器硬件交互的语言,它在嵌入式系统开发、底层优化和高效代码编写中起着关键作用。以下是该教程中涉及的一些主要知识点: 1. **寄存器装载和存储**:在ARM架构中,寄存器是快速访问的数据存储单元。装载和存储指令用于在寄存器和内存之间转移数据,如LDR(Load Register)和STR(Store Register)。 2. **传送单一数据**和**传送多个数据**:这些指令用于在寄存器之间或者寄存器与内存地址之间传递单个或多个数据,例如LDRB(Load Byte)、STRH(Store Halfword)等。 3. **SWP:单一数据交换**:此指令用于交换两个寄存器中的数据,或者将寄存器中的数据与内存中的数据交换,常用于同步原语。 4. **算术和逻辑指令**:包括加法(ADD)、带进位的加法(ADC)、减法(SUB)、带借位的减法(SBC)等算术运算,以及逻辑与(AND)、逻辑异或(EOR)、逻辑或(ORR)、位清除(BIC)和逻辑取反(MVN)等逻辑运算。 5. **移位**:包括逻辑左移(LSL)、逻辑右移(LSR)、算术右移(ASR)和循环右移(ROR),以及带扩展的循环右移(RRX),这些指令用于改变操作数的位模式。 6. **乘法指令**:如不带累加的乘法(MUL)和带累加的乘法(MLA),用于执行乘法操作并可能将结果累加到另一个寄存器。 7. **程序状态寄存器访问指令**:MRS(Move Register to Status)用于将程序状态寄存器(PSR)的值传送到通用寄存器,而MSR(Move Status to Register)则相反,将通用寄存器的值写入PSR。 8. **异常产生指令**:如SWI(Software Interrupt)用于生成软件中断,而BKPT(Breakpoint)指令用于调试目的。 9. **协处理器指令**:涉及与协处理器交互,如CDP(Coprocessor Data Processing)、LDC(Load Coprocessor)、STC(Store Coprocessor)、MCR(Move to Coprocessor Register)和MRC(Move from Coprocessor Register)。 10. **跳转指令**:包括无条件跳转的B指令和带链接的BL指令,BL指令在跳转的同时保存返回地址,用于子程序调用。 这些指令构成了ARM汇编语言的基础,通过它们,开发者可以直接操控硬件,实现高效、精确的代码执行。理解并熟练掌握这些指令对于进行ARM平台的底层开发和优化至关重要。
2021-08-30 上传
原作者:宛城布衣。 本文件已移除PDF签名,如内容有误,欢迎大家指正。 目录 前言 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 Rm8 Rm,shift8 条件码9 ARM 存储器访问指令 11 LDR 和 STR 11 LDM 和 STM14 SWP 17 ARM 数据处理指令19 数据传送指令20 MOV 20 MVN 20 算术逻辑运算指令20 ADD 20 SUB21 RSB 21 ADC 21 SBC 21 RSC 22 AND 22 ORR22 EOR22 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII BIC 23 第 I 页常用 ARM 指令集及汇编 Ver:1010 比较指令23 CMP 23 CMN23 TST24 TEQ24 乘法指令25 MUL25 MLA25 UMULL25 UMLAL26 SMULL 26 SMLAL 26 ARM 跳转指令27 B27 BL27 BX 27 ARM 协处理器指令28 CDP28 LDC29 STC 29 MCR30 MRC30 ARM 杂项指令31 SWI 31 MRS 32 MSR 33 ARM 伪指令34 ADR 35 ADRL35 LDR36 NOP37 Thumb 指令集39 Thumb 指令集与 ARM 指令集的区别 39 Thumb 存储器访问指令 40 LDR 和 STR 41 PUSH 和 POP 43 LDMIA 和 STMIA 43 Thumb 数据处理指令 45 数据传送指令46 MOV 46 MVN 46 NEG47 算术逻辑运算指令47 ADD 47 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 第 II 页常用 ARM 指令集及汇编 Ver:1010 SUB48 ADC 49 SBC 49 MUL50 AND 50 ORR50 EOR51 BIC 51 ASR51 LSL52 LSR 52 ROR53 比较指令53 CMP 53 CMN54 TST54 Thumb 跳转指令 55 B 55 BL55 BX 55 Thumb 杂项指令 56 SWI 56 Thumb 伪指令 57 ADR 57 LDR57 NOP58 伪指令59 符号定义伪指令59 GBLA、GBLL、GBLS 59 LCLA、LCLL、LCLS60 SETA、SETL、SETS 61 RLIST61 CN 62 CP62 DN、SN62 FN63 数据定义伪指令63 LTORG64 MAP64 FIELD 65 SPACE66 DCB 66 DCD 和 DCDU67 DCDO 67 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 第 III 页常用 ARM 指令集及汇编 Ver:1010 DCFD 和 DCFDU68 DCFS 和 DCFSU68 DCI69 DCQ 和 DCQU69 DCW 和 DCWU 70 报告伪指令70 ASSERT 70 INFO 71 OPT 71 TTL 和 SUBT 72 汇编控制伪指令73 IF、ELSE 和 ENDIF73 MACRO 和 MEND 74 WHIL 和 WEND 75 杂项伪指令76 ALIGN 77 AREA78 CODE16 和 CODE32 79 END 80 ENTRY80 EQU 81 EXPORT 和 GLOBAL 81 IMPORT 和 EXTERN 82 GET 和 INCLUDE 83 INCBIN83 KEEP83 NOFP 84 REQUIRE 84 PEQUIRE8 和 PRESERVE8 84 RN 84 ROUT85 ARM 伪指令86 ADR 86 ADRL86 LDR86