嵌入式系统开发与应用教程课件.pptx
《嵌入式系统开发与应用教程课件.pptx》由会员分享,可在线阅读,更多相关《嵌入式系统开发与应用教程课件.pptx(121页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1.ARM指令集概述;2.ARM寻址方式;3.数据处理指令、Load/Store指令;4.寄存器传送指令、转移指令、异常中断产生指令;5.ARM系统初始化6.Embest IDE集成开发环境、实验系统介绍;7.基于ARM的嵌入式软件开发基础:ARM汇编指令实验及C语言程序实验。第1页/共121页指令长度指令长度指令集可以是以下任一种32 bits 长(ARM状态)16 bits 长(Thumb 状态)ARM7TDMI 支持3种数据类型字节(8-bit)半字(16-bit)字(32-bit)字必须被排成4个字节边界对齐,半字必须被排列成2个字节边界对齐 第2页/共121页一、ARM指令集概述AR
2、M指令集是32位的,ARM汇编程序的启动都是从ARM指令集开始。所有的ARM指令集都可以是有条件执行的。本节从以下三个方面介绍:指令分类及指令格式 指令集编码 条件执行第3页/共121页指令分类及指令格式F ARM指令集可以分为六大类,分别为数据处理指令、Load/Store指令、跳转指令、程序状态寄存器处理指令、协处理器指令和异常产生指令。F ARM指令使用的基本格式如下:opcode cond S Rd,Rn,operand2 第4页/共121页ARM指令集编码FARM指令集是以32位二进制编码的方式给出的,大部分的指令编码中定义了第一操作数、第二操作数、目的操作数、条件标志影响位以及每条
3、指令所对应的不同功能实现的二进制位。F每条32位ARM指令都具有不同的二进制编码方式,和不同的指令功能相对应。F编码表如下:第5页/共121页指令集编码表第6页/共121页条件执行FARM指令根据CPSR中的条件位自动判断是否执行指令,在条件满足时,指令执行,否则指令被忽略。F在ARM的指令编码表中,统一占用编码的最高四位31:28来表示“条件码”(即“cond”)。(P100页)第7页/共121页条件域表1条件码后缀标 志含 义0000EQZ置位相等0001NEZ清零不相等0010CSC置位无符号数大于或等于0011CCC清零无符号数小于0100MIN置位负数0101PLN清零正数或零011
4、0VSV置位溢出0111VCV清零未溢出 1000 HIC置位Z清零无符号数高于第8页/共121页条件域表2条件码后缀标 志含 义1001LSC清零Z置位无符号数小于或等于1010GEN等于V带符号数大于或等于1011LTN不等于V带符号数小于1100GTZ清零且(N等于V)带符号数大于1101LEZ置位或(N不等于V)带符号数小于或等于1110AL总是无条件执行第9页/共121页 二、二、ARMARM寻址方式寻址方式ARMARM指令系统支持如下几种常见的寻址方式:指令系统支持如下几种常见的寻址方式:F立即寻址立即寻址F寄存器寻址寄存器寻址F寄存器间接寻址寄存器间接寻址F基址加偏址寻址基址加偏
5、址寻址 F堆栈寻址堆栈寻址 F块拷贝寻址块拷贝寻址 F相对寻址相对寻址 第10页/共121页立即寻址立即寻址F立立即即寻寻址址也也叫叫立立即即数数寻寻址址,这这是是一一种种特特殊殊的的寻寻址址方方式式,操操作作数数本本身身就就在在指指令令中中给给出出,只只要要取取出出指指令令也也就就取取到到了了操操作作数数,这这个个操操作作数数被被称称为为立立即即数数,对对应应的的寻址方式也就叫做立即寻址。例如以下指令:寻址方式也就叫做立即寻址。例如以下指令:ADDR0,R0,1/*R0R01*/ANDR0,R0,0 x3f /*R0R0 AND 0 x3f*/F 在在以以上上两两条条指指令令中中,第第二二个
6、个源源操操作作数数即即为为立立即即数数,要要求求以以“”为为前前缀缀,对对于于以以十十六六进进制制表表示示的的立立即数,还要求在即数,还要求在“”后加上后加上“0 x0 x”。第11页/共121页注:注:有效立即数问题有效立即数问题 在32位指令编码中存放32位立即数的方法是:在ARM数据处理指令中,当参与操作的第二操作数为立即数型时,每个立即数都是采用一个8位的常数循环右移偶数位而间接得到。其中循环右移的位数由一个4位二进制的两倍表示,如果立即数记作,8位常数记作immed_8,4位的循环右移值记作rotate_imm,有效的立即数是由一个8位的立即数循环右移偶数位得到。因此有效立即数imm
7、ediateimmediate可以表示成:=immed_8=immed_8循环右移(循环右移(2rotate_imm2rotate_imm)第12页/共121页例:MOV R0,#0 x0000F200MOV R0,#0 x00012800MOV R0,#0 x00041400MOV R0,#0 x00041800MOV R0,#0 xF000000F第13页/共121页寄存器寻址寄存器寻址就是利用寄存器中的数值作为操作数,寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。以下
8、指令:也是一种执行效率较高的寻址方式。以下指令:ADDR0,R1,R2/*R0R1R2*/该指令的执行效果是将寄存器该指令的执行效果是将寄存器R1R1和和R2R2的内容相加,的内容相加,其结果存放在寄存器其结果存放在寄存器R0R0中中。第14页/共121页寄存器寻址F第二操作数为寄存器型的移位操作第二操作数为寄存器型的移位操作 在ARM指令的数据处理指令中参与操作的第二操作数为寄存器型时,在执行寄存器寻址操作时,可以选择是否对第二操作数进行移位,即Rm,其中Rm称为第二操作数寄存器,用来指定移位类型(LSL,LSR,ASL,ASR,ROR或RRX)和移位位数。移位位数可以是5位立即数(#)或寄
9、存器(Rs)。在指令执行时将移位后的内容作为第二操作数参与运算。例如指令:ADD R3,R2,R1,LSR#2 ;R3R2+R14第15页/共121页寄存器寻址寄存器寻址F第二操作数移位方式第二操作数移位方式 LSL:逻辑左移,空出的最低有效位用0填充。LSR:逻辑右移,空出的最高有效位用0填充。ASL:算术左移,由于左移空出的有效位用0填充,因此 它与LSL同义。ASR:算术右移,算术移位的对象是带符号数,移位过程中必须保持操作数的符号不变。如果源操作数是正数,空出的最高有效位用0填充,如果是负数用1填充。ROR:循环右移,移出的字的最低有效位依次填入空出的最高有效位。RRX:带扩展的循环右
10、移。将寄存器的内容循环右移1位,空位用原来C标志位填充。第16页/共121页寄存器寻址寄存器寻址第17页/共121页寄存器寻址寄存器寻址F第二操作数的移位位数第二操作数的移位位数 移位位数可以用立即数方式或者寄存器方式给出,如下所示:ADD R3,R2,R1,LSR#2;R3 R2+R14ADD R3,R2,R1,LSR R4;R3 R2+R12R4寄存器R1的内容分别逻辑右移2位、R4位(亦即R14、R12R4),再与寄存器R2的内容相加,结果放入R3中。第18页/共121页寄存器间接寻址寄存器间接寻址F 寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。例如以下
11、指令:LDR R0,R1/*R0R1*/STR R0,R1/*R1R0*/第一条指令将以R1的值为地址的存储器中的数据传送到R0中。第二条指令将R0的值传送到以R1的值为地址的存储器中。第19页/共121页基址加偏址寻址基址加偏址寻址 基址变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用于访问某基地址附近的地址单元。采用变址寻址方式的指令又可以分为以下几种形式:前变址模式前变址模式:LDR R0,R1,4;R0R14自动变址模式自动变址模式:LDR R0,R1,4!;R0R14、R1R14后变址模式后变址模式:
12、LDR R0,R1,4;R0R1、R1R14第20页/共121页基址加偏址寻址基址加偏址寻址基址寄存器的地址偏移可以是一个立即数,也可以是另一个寄存器,并且在加到基址寄存器前还可以经过移位操作,如下所示:LDR r0,r1,r2;r0mem32r1+r2LDR r0,r1,r2,LSL#2;r0r1+r2*4但常用的是立即数偏移的形式,地址偏移为寄存器形式的指令很少使用。第21页/共121页堆栈寻址堆栈寻址F堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。F当堆栈指针指向最后压入
13、堆栈的数据时,称为满堆栈(Full Stack),而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(Empty Stack)。F即访问存储器时,存储器的地址向高地址方向生长,称为递增堆栈(ascending stack)。存储器的地址向低地址方向生长,称为递减堆栈(descending stack)。第22页/共121页堆栈寻址堆栈寻址四种类型的堆栈工作方式 F满递增堆栈:堆栈指针指向最后压入的数据,且由低地址向高地址生成。F满递减堆栈:堆栈指针指向最后压入的数据,且由高地址向低地址生成。F空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。F空递减堆栈:堆栈指
14、针指向下一个将要放入数据的空位置,且由高地址向低地址生成 STMFD SP!,R1-R7,LR 满递减LDMFD SP!,R1-R7,LR 第23页/共121页块拷贝寻址块拷贝寻址F块拷贝寻址是多寄存器传送指令LDM/STM的寻址方式。LDM/STM指令可以把存储器中的一个数据块加载到多个寄存器中,也可以把多个寄存器中的内容保存到存储器中。寻址操作中的寄存器可以是R0-R15这16个寄存器的子集或是所有寄存器。FLDM/STM指令依据其后缀名的不同其寻址的方式也有很大不同,见下表。第24页/共121页第25页/共121页例:STMIA R0!,R2-R9STMDB R1!,R2-R9LDMIB
15、 R0,R2-R9第26页/共121页相对寻址相对寻址 FF 与基址变址寻址方式相类似,相对寻址以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。以下程序段完成子程序的调用和返回,跳转指令BL采用了相对寻址方式:BLNEXT;跳转到子程序 ;NEXT处执行NEXT:MOVPC,LR;从子程序返回 第27页/共121页三、三、ARMARM指令详细介绍指令详细介绍 ARM指令集总体分为以下6类:F 数据处理指令;F Load/Store指令;F转移指令;F程序状态寄存器与通用寄存器之间的传送指令;F异常中断指令;F 协处理器指令。第28页/共121页
16、、数据处理指令F ARM的数据处理指令主要完成寄存器中数据的算术和逻辑运算操作。本节按以下内容组织:数据处理指令分类 数据处理指令二进制编码 数据处理指令表第29页/共121页数据处理指令分类F 数据处理指令根据指令实现处理功能可分为以下六类:数据传送指令;算术运算指令;逻辑运算指令;比较指令;测试指令;乘法指令。第30页/共121页数据处理指令FARM数据处理指令的基本原则为:所有的操作数都是32位宽,或来自寄存器,或是在指令中定义的立即数(符号或0扩展);如果数据操作有结果,则结果为32位宽,放在一个寄存器中。(有一个例外:长乘指令产生64位的结果);ARM指令中使用“3地址模式”,即每一
17、个操作数寄存器和结果寄存器在指令中分别指定。第31页/共121页数据处理指令汇编格式FARM数据处理指令使用两个源操作数和一个目的寄存器(Rd)的“3地址模式”,一个源操作数(Rn)总是寄存器,第二个被称为“灵活的第二操作数operand2”,它可以是寄存器、移位后的寄存器或立即数。如果第二操作数是寄存器Rm,它的移位类型可以是LSL,LSR,ASL,ASR,ROR或RRX中的任意一种;移位的位数可以是立即数,也可以是寄存器的内容。F汇编格式 S Rd,Rn,#S Rd,Rn,Rm,第32页/共121页数据处理指令指令表数据处理指令的详细列表如下:操作码24:21助记符意义效果0000AND逻
18、辑位与Rd=Rn AND Op20001EOR逻辑位异或Rd=Rn EOR Op20010SUB减Rd=Rn-Op20011RSB反向减Rd=Op2 Rn0100ADD加Rd=Rn+Op20101ADC带进位加Rd=Rn+Op2+C0110SBC带进位减Rd=Rn-Op2+C-10111RSC反向带进位减Rd=Op2-Rn+C-11000TST测试根据Rn AND Op2设置条件码1001TEQ测试相等根据Rn EOR Op2设置条件1010CMP比较根据Rn-Op2设置条件码1011CMN负数比较根据Rn+Op2设置条件码1100ORR逻辑位或Rd=Rn OR Op21101MOV传送Rd=
19、Op21110BIC位清零Rd=Rn AND NOT Op21111MVN求反Rd=NOT Op2第33页/共121页算术运算指令:ADDADCSUBSBCRSBRSC第34页/共121页加法:Rd=Rn+Op2ADDR0,R1,R2ADDR0,R1,#256ADDR0,R2,R3,LSL#1ADDS R4,R1,R2ADC指令在形式上和功能上都有与ADD类似,只是相加时还要包括进位标志C的内容:Rd=Rn+Op2+CADCR5,R1,R3第35页/共121页减法:Rd=Rn-Op2SUBR0,R1,R2SUBR0,R1,#256SUBR0,R1,R2,LSL#1SUBSR3,R6,R9带借位
20、减:Rd=Rn-Op2+C-1SBCSR4,R7,R10SBCR5,R8,R11第36页/共121页反减:Rd=Op2-RnRSBR0,R1,R2RSBR0,R1,#256RSBR0,R2,R3,LSL#1反向带借位减:Rd=Op2-Rn+C-1RSCR0,R1,R2第37页/共121页例:ADDR2,R1,R3SUBSR8,R6,#240RSBR4,R4,#0 x1280ADCHIR11,R0,R3RSCLESR0,R5,R0,LSL R4第38页/共121页逻辑运算指令:ANDORREORBIC:Rd=Rn AND NOT Op2第39页/共121页例:ANDR9,R2,#0 xFF00O
21、RREQR2,R0,R5EORR0,R0,R3,ROR R6BICNESR0,R5,R0,LSL R4第40页/共121页数据传送指令:MOV:Rd=Op2MVN:Rd=NOT Op2MOVR9,R2MVNNE R0,#0 xFF00MOVSR0,R0,ROR R6第41页/共121页比较指令:CMP:根据Rn-Op2设置条件码CMN:根据Rn+Op2设置条件码CMPGT R3,R7,LSL#2CMNR0,#0 x6400第42页/共121页测试指令:TST:根据Rn AND Op2设置条件码TEQ:根据Rn EOR Op2设置条件码TSTR0,#0 x3F8TEQEQR10,R9TSTNER
22、1,R5,ASR R1第43页/共121页注:FRSB是反减,即用第二操作数减去源操作数。由于第二操作数可选的范围宽,所以这条指令很有用。FRSC是带进位标志的反减。若进位标志为零,则结果减1。FBIC用于将源操作数的各位与第二操作数中相应位的反码进行“与”操作。BIC可用于将寄存器中某些位的值设置为0。FMVN是“取反传送”,它是把第二操作数的每一位取反,将得到的值置入结果寄存器。FCMN表示“取反比较”,将目的操作数和源操作数相加,根据结果更新条件码标志。第44页/共121页数据处理指令二进制编码数据处理指令的二进制编码如下:第二操作数为立即数以寄存器表示移位位数以立即数表示移位位数第45
23、页/共121页*乘法指令 ARM乘法指令完成两个寄存器中数据的乘法。按产生结果的位宽一般分为两类:一类是两个32位二进制数相乘的结果是64位,另一类是两个32位二进制数相乘,仅保留最低有效32位。这两种类型都有“乘法累加”的变形,如下表所示:操作码23:21助记符意义效果000MUL乘(32位结果)Rd(RmRs)31:0001MLA乘累加(32位结果)Rd(RmRs+Rn)31:0100UMULL无符号数长乘RdHi:RdLoRmRs101UMLAL无符号长乘累加RdHi:RdLo+=RmRs110SMULL有符号数长乘RdHi:RdLoRmRs111SMLAL有符号数长乘累加RdHi:Rd
24、Lo+=RmRs第46页/共121页乘法指令二进制编码F二进制编码 F说明对于32位乘积结果指令,Rd为结果寄存器,Rm、Rs、Rn为操作数寄存器。对于64位乘积结果指令,RdLo、RdHi为结果寄存器,“RdHi:RdLo”是由RdHi(最高有效32位)和RdLo(最低有效32位)连接形成64位乘积结果,Rm、Rs为操作数寄存器。第47页/共121页乘法指令汇编格式F产生最低有效3232位乘积的指令:MULS Rd,Rm,RsMULAS Rd,Rm,Rs,RnF产生6464位乘积的指令:S RdHi,RdLo,Rm,Rs在此是64位乘法类型(UMULL、UMLAL、SMULL、SMLAL)。
25、第48页/共121页、Load/StoreLoad/Store指令指令 FARM处理器是Load/store型的,即它对数据的操作是通过将数据从存储器加载到片内寄存器中进行处理,处理完成后的结果经过寄存器存回到存储器中,以加快对片外存储器进行数据处理的执行速度。FARM的数据存取指令Load/Store是唯一用于寄存器和存储器之间进行数据传送的指令。FARM指令集中有三种基本的数据存取指令:单寄存器的存取指令(LDR,STR)多寄存器存取指令(LDM,STM)单寄存器交换指令(SWP)第49页/共121页单寄存器的存取指令单寄存器的存取指令 单个寄存器存取指令又可以针对以下几类数据:单字 无符
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 开发 应用 教程 课件
限制150内