




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第3章章 ARM指令系统与汇编语言程序设计指令系统与汇编语言程序设计3.1 ARM指令系统概述指令系统概述3.1.1 ARM指令系统的特点指令系统的特点(1)所有的运算都在寄存器中进行)所有的运算都在寄存器中进行(2)多数指令可以有条件执行)多数指令可以有条件执行(3)具有批量寄存器数据传送指令)具有批量寄存器数据传送指令(4)支持)支持32位和位和16位双指令集位双指令集(5)提供一些数字信号处理指令)提供一些数字信号处理指令(6)具有协处理指令)具有协处理指令3.1.2 ARM汇编指令的基本格式汇编指令的基本格式ARM指令指令的二进制代码的基本格式:的二进制代码的基本格式: ARM指令指
2、令的汇编语言基本格式:的汇编语言基本格式: 操作码操作码 条件条件 S 目的寄存器目的寄存器 , 第一操作数第一操作数 , 第二操作数第二操作数 例:例: ADD R0,R4,R8ADDEQ R0,R2,#5ADDS R1,R5,R8MOV PC,R143.1.3 ARM指令的条件域指令的条件域ARM指令可根据指令可根据CPRS中条件标志位的状态和指令的中条件标志位的状态和指令的条件域表示的条件有条件地执行条件域表示的条件有条件地执行 。CMP R0,#0ADDEQ R0,R2,#5MOVGT R1,#0 BGE NEXT例如:例如:条件域的条件用条件码的助记忆符表示(见表条件域的条件用条件码
3、的助记忆符表示(见表3-13-1)3.2 ARM指令的寻址方式指令的寻址方式 ARM指令常用有如下寻址方式指令常用有如下寻址方式1.立即寻址 立即寻址操作数就在指令中例:ADD R0,R0,#0 x3f立即数指令功能:R0R0+ 0 x3f16进制数2. 寄存器寻址寄存器寻址 寄存器寻址操作数在寄存器中例:ADD R0,R1,R2指令功能:R0R1+ R23. 寄存器间接寻址寄存器间接寻址 寄存器间接寻址操作数在内存中,操作数 地址在寄存器中例:LDR R0,R1指令功能:R0 R14. 变址寻址变址寻址 变址寻址操作数在内存中,操作数地址由寄存器中内容加偏移量获得LDR R0,R1,#8 指
4、令功能:R0 R1,R1R1+8 后变址后变址例:LDR R2,R0,#8指令功能:R2 R0+#8 前变址前变址LDR R2,R0,#8! 指令功能:R2 R0+8,R0R0+8 自动变址自动变址5. 寄存器移位寻址寄存器移位寻址 寄存器移位寻址操作数为第2操作数,在第2操作数与第1操作数操作前对第2操作数进行移位。例:例:ADD R3,R2,R1,LSL#3指令功能:R3 R2+R123 第第2操作数可以进行五种移位。操作数可以进行五种移位。(1)LSL:逻辑左移:逻辑左移(2)LSR:逻辑右移:逻辑右移(3)ASR:算术右移:算术右移(4)ROR:循环右移:循环右移(5)RRX:带扩展的
5、循环右移:带扩展的循环右移6. 多寄存器寻址多寄存器寻址 多寄存器寻址一条指令可完成一组寄存器 值的传送,连续寄存器之间 使用“-”,否则用“,”例: LDMIA R0, R1-R4指令功能:R1 R0,R2 R0+4, R3 R0+8,R4 R0+12, LDMIA R0, R1,R3指令功能:R1 R0,R3 R0+4, 8. 相对寻址相对寻址 相对寻址以程序计数器(PC)的值为基 址加偏移量形成转移地址例: BL NEXT NEXT7. 堆栈寻址堆栈寻址 堆栈寻址实现堆栈中的数据与寄存器组间 传送数据例: STMFD SP!,R1-R2,PC 指令功能:R1,R2,PC内容进栈保存3.3
6、 ARM指令的分类介绍指令的分类介绍ARM微处理器的指令分类:微处理器的指令分类:数据处理指令数据处理指令 加载加载/ /存储指令存储指令 转移指令转移指令 程序状态寄存器处理指令程序状态寄存器处理指令软件中断指令软件中断指令协处理器指令协处理器指令3.3.1 数据处理指令数据处理指令1. 数据传送指令数据传送指令MOV例:MOV R1,R0 ;将;将R0内容送内容送R1MOV R1,R0,LSL#2 ;将;将R0左移左移2位送位送R12. 数据按位取反传送指令数据按位取反传送指令MVN例:例:MVN R0,#0 ;将立即数;将立即数0按位取按位取反送反送R0执行后执行后R0=0 xFFFFF
7、FFF= -13. 加法指令加法指令例:例:ADD R0,R1,R2 ;R0 R1+R2(2) 带进位加法指令带进位加法指令ADC 将两源操作数相加再加上进位标志位的值,结果送目的寄存器例:利用该指令可实现64位二进制加法ADDS R0,R4,R8 ; 后缀后缀S表示要改变进位位表示要改变进位位ADC R1,R5,R9 ; 带进位加结果在带进位加结果在R0与与R1中中(1) 不带进位加法指令不带进位加法指令ADC (1)SUB 减法指令减法指令例:例:SUB R0,R1,R2 ; R0 R1-R2(2)SBC 带借位减法指令带借位减法指令例:例:SBC R0,R1,R2 ; R0 R1-R2-
8、!C例:例:RSB R0,R1,R2 ; R0 R2-R1(3)RSB 逆向减法指令和逆向带借位减法指令逆向减法指令和逆向带借位减法指令4. 减法指令减法指令(1) 逻辑逻辑“与与”指令指令AND例:例:AND R0,R0,#0 x3ff ;将;将R0和和0 x3ff 相相 ; “与与” 即将即将R0中的高中的高6位清位清0 ;低;低10位不变位不变 5. 逻辑运算指令逻辑运算指令(2) 逻辑逻辑“或或”指令指令ORR 例:例:ORR R0,R0,#3 ;将;将R0的第的第0、1位置位置1其余不变其余不变(3) 逻辑异或指令逻辑异或指令EOR (4)BIC 位清除指令位清除指令将操作数某些位清
9、零将操作数某些进行位进行异或运算6. 比较指令比较指令(1) 比较指令比较指令CMP 例:例:CMP R1,R0;两操作数比较,;两操作数比较,结果影响标志位结果影响标志位(2)取反值比较指令)取反值比较指令CMN 将一操作数取反后再比较对某位进行测试或测试两个数是否相等对某位进行测试或测试两个数是否相等7. 测试指令测试指令8. 乘法和乘加指令乘法和乘加指令(1) 32位乘法指令位乘法指令MUL例:例:MUL R0,R1,R2 ;R0 R1xR2(2) 32位乘加指令位乘加指令MLA 例:例:MULA R0,R1,R2 ,R3 ; R0 R1xR2+R3(3) 64位乘法指令和乘加指令位乘法
10、指令和乘加指令 3.3.2 加载加载/存储指令存储指令该类指令用于寄存器与存储器(该类指令用于寄存器与存储器(I/O接口)之间接口)之间传送数据。传送数据。加载加载/存储指令存储指令单寄存器加载单寄存器加载/存储指令存储指令多寄存器加载多寄存器加载/存储指令存储指令数据交换指令数据交换指令加载:寄存器加载:寄存器 存储器(存储器(I/O接口)接口)存储:存储: 存储器(存储器(I/O接口)接口) 寄存器寄存器(1)字数据加载指令)字数据加载指令LDR 该类指令用于单个寄存器与存储器之间传送数据该类指令用于单个寄存器与存储器之间传送数据指令功能:把内存中的字数据传送到目标寄存指令功能:把内存中的
11、字数据传送到目标寄存 器中去。器中去。 例:例:LDR R0,R1 ; 将将R1存放地址的内存字单存放地址的内存字单 元数据传送到元数据传送到R0中中(2)字节数据加载指令)字节数据加载指令LDRB 指令功能:把内存中的字节数据传送到目标寄存指令功能:把内存中的字节数据传送到目标寄存 器中去。器中去。 例:例:LDRB R0,R1;将;将R1存放地址的内存字节存放地址的内存字节 单元数据传送到单元数据传送到R0中中1. 单寄存器加载单寄存器加载/存储指令存储指令(3)半字数据加载)半字数据加载 指令指令功能:把内存中的半字数据传送到目标寄存指令功能:把内存中的半字数据传送到目标寄存 器中去器中
12、去 。(4)字数据存储指令)字数据存储指令STR 指令功能:把寄存器中的指令功能:把寄存器中的32位字数据传送到存储位字数据传送到存储 器中。器中。 例:例:STR R0,R1 ; 将将R0中的数据存放到中的数据存放到R1 指定的内存字单元中。指定的内存字单元中。(5)字节数据存储指令)字节数据存储指令STRB 指令功能:把寄存器中的数据的低指令功能:把寄存器中的数据的低8位作为字节位作为字节 数据传送到存储器中。数据传送到存储器中。 (6)半字数据存储指令)半字数据存储指令STRH 指令功能:把寄存器中的数据的低指令功能:把寄存器中的数据的低16位作为半位作为半 字数据传送到存储器中。字数据
13、传送到存储器中。 (1)多寄存器存储指令)多寄存器存储指令指令格式:指令格式:STM条件条件类型类型 基址寄存器基址寄存器!,寄存器列表寄存器列表例:例:STMFD SP!,!,R1-R2,LR ;将寄存器;将寄存器R1、R2、LR中保存的字数据存储到中保存的字数据存储到;堆栈中,同时将最后的地址写入;堆栈中,同时将最后的地址写入SP。2. 多寄存器加载多寄存器加载/存储指令存储指令可实现一片连续存储器单元和多个寄存器之间可实现一片连续存储器单元和多个寄存器之间传递数据,用于传递数据,用于多个寄存器进栈多个寄存器进栈/出栈操作出栈操作。例:例:LDMFD SP!,!,R1-R2,PC (2)多
14、寄存器加载指令)多寄存器加载指令LDM条件条件类型类型 基址寄存器基址寄存器!, 寄存器列表寄存器列表指令格式:指令格式:;将堆栈中保存的;将堆栈中保存的3个字数据加载到寄存器个字数据加载到寄存器R1、;R2、PC中(出栈),同时将最后的地址写中(出栈),同时将最后的地址写;入;入SP, 及将及将SPSR复制到复制到CPSR中中ARM实现转移两种方法实现转移两种方法: 1)使用转移指令;)使用转移指令;2)直接向程序计数器写入转移的目的地址)直接向程序计数器写入转移的目的地址转移指令:转移指令:(1)转移指令)转移指令B (类似(类似MCS-51的的JMP)例:例:B NEXT ;无条件转移到
15、;无条件转移到NEXT处执行处执行BEQ NEXT ;如果相等件转移到;如果相等件转移到NEXT处执行处执行转移条件3.3.3 转移指令转移指令(2) 带返回转移指令带返回转移指令BL执行转移同时将PC计数器内容保存在LR寄存器中,该指令一般用来调子程序例:BL SUB1子程序名(3)BX 带状态切换跳转指令带状态切换跳转指令执行跳转到目标地址处执行,目标地址处的指令可以是ARM指令也可以是Thumb指令。例例: BX R0 ;转到转到R0指定的地址处去执行指定的地址处去执行 ;如果如果R0最低位为最低位为1则切换到则切换到Thumb ;状态状态(3) 带返回和状态切换转移指令带返回和状态切换
16、转移指令BLX 执行转移时,从执行转移时,从ARM指令切换为指令切换为Thumb指令状指令状态,同时将态,同时将PC的内容保存在的内容保存在LR中。中。例:BLX T16 CODE 16 T16 ;32位指令程序段位指令程序段;16位指令程序段位指令程序段 ARM汇编语言程序的基本结构汇编语言程序的基本结构例: AREA Add ,CODE, READONLY ;定义代码段定义代码段 ENTRY ;指明代码段入口指明代码段入口 CODE32 ;以下为以下为32位指令位指令Start MOV R0,#1 MOV R1,#2 ADD R2,R0,R1 END ; 汇编结束汇编结束实现功能的程序实现
17、功能的程序伪指令伪指令3.5 ARM的伪指令的伪指令1. 段定义伪指令段定义伪指令AREA格式:格式: ARER 段名段名 , 属性属性1,属性,属性2,用处:用来定义一个代码段或数据段用处:用来定义一个代码段或数据段例1:AERA init, CODE, READONLY定义代码段代码段属性代码段名例2:AERA data , DATA,READWRITE定义代码段定义代码段数据段名定义数据段数据段属性定义数据段定义数据段2. ENTRY 汇编程序入口说明伪指令汇编程序入口说明伪指令用处:用来说明汇编程序的入口点,一个完整的 汇编程序至少有一个入口点例:AERA init, CODE, RE
18、ADONLY ENTRY ;程序的入口点;程序的入口点 3. CODE16与与CODE32 代码位数说明伪指令代码位数说明伪指令用处:用来说明后面的代码的位数例:CODE32 ;说明下面代码使用ARM 32位指令 LDR R0,=0X8500 BX R0 CODE 16 ;说明下面代码使用;说明下面代码使用Thumb 16位指令位指令 ADD R3,R3,R1 END4. END 汇编源程序结束说明伪指令汇编源程序结束说明伪指令用处:放在源程序的末尾,用来告诉编译器源程用处:放在源程序的末尾,用来告诉编译器源程 序结束序结束5. 数据定义伪指令数据定义伪指令用处:用于为数据分配存储单元及完成已
19、分配单 元的初始化(1)DCB 字节存储单元分配伪指令例: ARRAY1 DCB 1,2,5 给数组ARRAY1分配连续3个字节单元,初 值分别为1,2,5 (2)DCD 字存储单元分配伪指令例: DATA2 DCD 1,2,5 给数组DATA2分配连续3个字单元,初值分 别为1,2,5 (3)SPACE 连续字节存储单元分配伪指令例: DATA3 SPACE 100 给数组DATA3分配连续100个字节单元, 这100个字节初值为0。 6. EQU 赋值说明伪指令赋值说明伪指令用处:用于将程序中的常数、标号赋予一个名称例:例:TEST EUQ 50 ;定义;定义TEST的值为的值为507.
20、LDR 将地址加载或常数到寄存器伪指令将地址加载或常数到寄存器伪指令用处:用于将常数或地址加载到寄存器中用处:用于将常数或地址加载到寄存器中例:例: LDR R2, =0X40000000 LDR R4, = N;(常数);(常数)注意伪指令注意伪指令LDR与指令与指令LDR的区别的区别LDR R2, R1 ;指令LDRLDR R2,= 0X50000000 ;伪指令伪指令LDR注意事项:当数据的地址与伪指令注意事项:当数据的地址与伪指令LDR之间的之间的距离超过距离超过4KB时要使用伪指令时要使用伪指令LTORG在适当位在适当位置建立文字缓冲池置建立文字缓冲池。【例例1】寄存器R0和R1中有
21、两个正整数(例如15和3),求这两个数的最大公约数,结果存储在R0中。解:由于程序所需条件判断很少,可以直接利用CPSR寄存器的标志位和ARM指令的条件执行特性实现程序的分支和转移。程序流程图如图所示。 3.6 ARM汇编语言编程举例: AREA example1, CODE, READONLY ;程序代码段开始程序代码段开始 ENTRY ;程序的入口;程序的入口 CODE32 ;以下为;以下为32位指令位指令 MOV R0, #15 ;R0赋原始数据赋原始数据15 MOV R1, #9 ;R1赋原始数据赋原始数据9 START ;程序标号程序标号START CMP R0, R1 ;比较比较R0和和R1 SUBLT R1, R1, R0 ;如果如果R0R1, 则则R1=R0-R1 BNE START ;如果;如果R0不等于不等于R1,则跳转到,则跳转到 ; 标号标号SART处执行处执行 WAIT ;程序标号;程序标号WAIT B WAIT ; 跳转到标号跳转到标号WAIT,进入等待,进入等待 END ;程序结束;程序结束【例【例2】试编程实现计算整数的乘方(例如计算】试编程实现计算整数的乘方(例如计算210),结),结果存放在内存单元果存放在内存单元0 x40000000中。中。算法:算法:Xn=X*X*X*
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年帐皮项目可行性研究报告
- 2025年壁布专用漆项目可行性研究报告
- 关注老年健康的健康管理师试题及答案
- 2024-2025新进厂职工安全培训考试试题及答案【新】
- 2025年卡簧自固式接头项目可行性研究报告
- 抓住2024年系统架构设计师考试主干试题及答案
- 酒店业务培训大纲
- 掌握税务师考试知识的关键环节试题及答案
- 2025年临床执业医师考试诊断思维试题及答案
- 强化专业能力信息系统项目管理师试题及答案
- 2025年03月黑龙江绥化市市委书记进校园引才活动公开招聘1167人笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 施工合同中约定的安全防护、文明施工措施费用支付计划
- 太原市2025年高三年级模拟考试语文试题及答案
- 青岛版(2017)小学四年级科学下册4.14《不同环境中的植物》课件
- 直击重点的2024年ESG考试试题与答案
- 2025年审计监察面试题及答案
- 2025年河南应用技术职业学院单招职业技能测试题库完美版
- nginx面试题及答案100道
- 综合与实践+白昼时长规律的探究教案+2024-2025学年人教版数学七年级下册
- 非营利组织离任审计报告范文
- 家电行业品质部门的质量提升职责
评论
0/150
提交评论