嵌入式系统开发与应用教程.pptx
《嵌入式系统开发与应用教程.pptx》由会员分享,可在线阅读,更多相关《嵌入式系统开发与应用教程.pptx(121页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、会计学1嵌入式系统开发与应用教程嵌入式系统开发与应用教程1.1.ARM指令集概述;2.2.ARM寻址方式;3.3.数据处理指令、Load/Store指令;4.4.寄存器传送指令、转移指令、异常中断产生指令;5.5.ARM系统初始化6.6.Embest IDE集成开发环境、实验系统介绍;7.7.基于ARM的嵌入式软件开发基础:ARM汇编指令实验及C语言程序实验。第1页/共121页指令长度指令长度n n指令集可以是以下任一种n n32 bits 32 bits 长长 (ARM(ARM状态状态)n n16 bits 16 bits 长长 (Thumb(Thumb 状态状态)n nARM7TDMI 支
2、持3种数据类型n n字节字节 (8-bit)(8-bit)n n半字半字 (16-bit)16-bit)n n字字 (32-bit)(32-bit)n n字必须被排成4个字节边界对齐,半字必须被排列成2个字节边界对齐 第2页/共121页一、一、ARM指令集概述指令集概述n nARMARM指指令令集集是是3232位位的的,ARMARM汇汇编编程程序序的的启启动动都都是是从从ARMARM指指令令集集开开始始。所所有有的的ARMARM指指令令集集都都可可以以是是有有条条件件执执行行的的。本本节节从以下三个方面介绍:从以下三个方面介绍:指令分类及指令格式 指令集编码 条件执行第3页/共121页指令分类
3、及指令格式指令分类及指令格式FF ARM指令集可以分为六大类,分别为数据处理指令、Load/Store指令、跳转指令、程序状态寄存器处理指令、协处理器指令和异常产生指令。FF ARM指令使用的基本格式如下:opcodeopcode condcond S S RdRd,RnRn,operand2operand2 第4页/共121页ARM指令集指令集编码编码FFARMARM指指令令集集是是以以3232位位二二进进制制编编码码的的方方式式给给出出的的,大大部部分分的的指指令令编编码码中中定定义义了了第第一一操操作作数数、第第二二操操作作数数、目目的的操操作作数数、条条件件标标志志影影响响位位以以及及
4、每每条条指指令令所所对对应应的的不同功能实现的二进制位。不同功能实现的二进制位。FF每每条条3232位位ARMARM指指令令都都具具有有不不同同的的二二进进制制编码方式,和不同的指令功能相对应编码方式,和不同的指令功能相对应 。FF编码表如下编码表如下:第5页/共121页指令集编码表指令集编码表第6页/共121页条件执行条件执行FFARMARM指指令令根根据据CPSRCPSR中中的的条条件件位位自自动动判判断断是是否否执执行行指指令令,在在条条件件满满足足时时,指令执行,否则指令被忽略。指令执行,否则指令被忽略。FF在在ARMARM的的指指令令编编码码表表中中,统统一一占占用用编编码码的的最最
5、高高四四位位3131:2828来来表表示示“条条件件码码”(即(即“condcond”)。)。(P100页)第7页/共121页条件域表条件域表1条件码后缀标 志含 义0000EQZ置位相等0001NEZ清零不相等0010CSC置位无符号数大于或等于0011CCC清零无符号数小于0100MIN置位负数0101PLN清零正数或零0110VSV置位溢出0111VCV清零未溢出 1000 HIC置位Z清零无符号数高于第8页/共121页条件域表条件域表2条件码后缀标 志含 义1001LSC清零Z置位无符号数小于或等于1010GEN等于V带符号数大于或等于1011LTN不等于V带符号数小于1100GTZ清
6、零且(N等于V)带符号数大于1101LEZ置位或(N不等于V)带符号数小于或等于1110AL总是无条件执行第9页/共121页 二、二、ARMARM寻址方式寻址方式ARMARM指令系统支持如下几种常见的指令系统支持如下几种常见的寻址方式:寻址方式:FF立即寻址立即寻址FF寄存器寻址寄存器寻址FF寄存器间接寻址寄存器间接寻址FF基址加偏址寻址基址加偏址寻址 FF堆栈寻址堆栈寻址 FF块拷贝寻址块拷贝寻址 FF相对寻址相对寻址 第10页/共121页立即寻址立即寻址F立立即即寻寻址址也也叫叫立立即即数数寻寻址址,这这是是一一种种特特殊殊的的寻寻址址方方式式,操操作作数数本本身身就就在在指指令令中中给给
7、出出,只只要要取取出出指指令令也也就就取取到到了了操操作作数数,这这个个操操作作数数被被称称为为立立即即数数,对对应应的的寻寻址址方方式也就叫做立即寻址。例如以下指令:式也就叫做立即寻址。例如以下指令:ADDADDR0R0,R0R0,1 1/*R0R0/*R0R01*/1*/AND ANDR0R0,R0R0,0 x3f0 x3f /*R0R0/*R0R0 AND 0 x3f*/AND 0 x3f*/F 在在以以上上两两条条指指令令中中,第第二二个个源源操操作作数数即即为为立立即即数数,要要求求以以“”为为前前缀缀,对对于于以以十十六六进进制制表表示示的的立立即即数数,还要求在还要求在“”后加上
8、后加上“0 x0 x”。第11页/共121页注:注:注:注:有效立即数问题有效立即数问题有效立即数问题有效立即数问题 在在3232位指令编码中存放位指令编码中存放3232位立即数的方法是:位立即数的方法是:在在ARMARM数据处理指令中,当参与操作的第二操作数为立数据处理指令中,当参与操作的第二操作数为立即数型时,每个立即数都是采用一个即数型时,每个立即数都是采用一个8 8位的常数循环右移位的常数循环右移偶数位而间接得到。其中循环右移的位数由一个偶数位而间接得到。其中循环右移的位数由一个4 4位二进位二进制的两倍表示,制的两倍表示,如果立即数记作如果立即数记作,8 8位常数位常数记作记作imm
9、ed_8immed_8,4 4位的循环右移值记作位的循环右移值记作rotate_immrotate_imm,有效,有效的立即数是由一个的立即数是由一个8 8位的立即数循环右移偶数位得到。位的立即数循环右移偶数位得到。因此有效立即数因此有效立即数immediateimmediateimmediateimmediate可以表示成:可以表示成:=immed_8=immed_8=immed_8=immed_8循环右移(循环右移(循环右移(循环右移(2rotate_imm2rotate_imm2rotate_imm2rotate_imm)第12页/共121页例:例:MOV R0,#0 x0000F200
10、MOV R0,#0 x00012800MOV R0,#0 x00041400MOV R0,#0 x00041800MOV R0,#0 xF000000F第13页/共121页寄存器寻址寄存器寻址就是利用寄存器中的数值作为操作数,这寄存器寻址就是利用寄存器中的数值作为操作数,这寄存器寻址就是利用寄存器中的数值作为操作数,这寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也种寻址方式是各类微处理器经常采用的一种方式,也种寻址方式是各类微处理器经常采用的一种方式,也种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。以下指令:是一种执行
11、效率较高的寻址方式。以下指令:是一种执行效率较高的寻址方式。以下指令:是一种执行效率较高的寻址方式。以下指令:ADDADD R0R0,R1R1,R2R2/*R0R1/*R0R1R2*/R2*/该指令的执行效果是将寄存器该指令的执行效果是将寄存器该指令的执行效果是将寄存器该指令的执行效果是将寄存器R1R1R1R1和和和和R2R2R2R2的内容相加,其的内容相加,其的内容相加,其的内容相加,其结果存放在寄存器结果存放在寄存器结果存放在寄存器结果存放在寄存器R0R0R0R0中中中中。第14页/共121页寄存器寻址FF第二操作数为寄存器型的移位操作第二操作数为寄存器型的移位操作第二操作数为寄存器型的移
12、位操作第二操作数为寄存器型的移位操作 在在ARMARM指令的数据处理指令中参与操作的第二操作数指令的数据处理指令中参与操作的第二操作数为寄存器型时,在执行寄存器寻址操作时,可以选择是为寄存器型时,在执行寄存器寻址操作时,可以选择是否对第二操作数进行移位,即否对第二操作数进行移位,即RmRm,其中,其中RmRm称称为第二操作数寄存器,为第二操作数寄存器,用来指定移位类型(用来指定移位类型(LSLLSL,LSRLSR,ASLASL,ASRASR,RORROR或或RRXRRX)和移位位数。移位位数可)和移位位数。移位位数可以是以是5 5位立即数(位立即数(#)或寄存器()或寄存器(RsRs)。在指令
13、)。在指令执行时将移位后的内容作为第二操作数参与运算。例如执行时将移位后的内容作为第二操作数参与运算。例如指令:指令:n nADD R3ADD R3,R2R2,R1R1,LSR#2 LSR#2 ;R3R3R2+R14R2+R14第15页/共121页寄存器寻址寄存器寻址FF第二操作数移位方式第二操作数移位方式 LSLLSL:逻辑左移,空出的最低有效位用:逻辑左移,空出的最低有效位用0 0填充。填充。LSRLSR:逻辑右移,空出的最高有效位用:逻辑右移,空出的最高有效位用0 0填充。填充。ASLASL:算术左移,由于左移空出的有效位用:算术左移,由于左移空出的有效位用0 0填充,因此填充,因此 它
14、与它与LSLLSL同义。同义。ASRASR:算术右移,算术移位的对象是带符号数,移位过程中必须保:算术右移,算术移位的对象是带符号数,移位过程中必须保持操作数的符号不变。如果源操作数是正数,空出的最持操作数的符号不变。如果源操作数是正数,空出的最高有效位用高有效位用0 0填充,如果是负数用填充,如果是负数用1 1填充。填充。RORROR:循环右移,移出的字的最低有效位依次填入空出的最高有效:循环右移,移出的字的最低有效位依次填入空出的最高有效位。位。RRXRRX:带扩展的循环右移。将寄存器的内容循环右移:带扩展的循环右移。将寄存器的内容循环右移1 1位,空位用位,空位用原来原来C C标志位填充
15、。标志位填充。第16页/共121页寄存器寻址寄存器寻址第17页/共121页寄存器寻址寄存器寻址FF第二操作数的移位位数第二操作数的移位位数第二操作数的移位位数第二操作数的移位位数 移位位数可以用立即数方式或者寄存器方式给出移位位数可以用立即数方式或者寄存器方式给出,如下如下所示:所示:n nADD R3ADD R3,R2R2,R1R1,LSR#2LSR#2;R3 R3 R2+R14R2+R14n nADD R3ADD R3,R2R2,R1R1,LSR R4LSR R4;R3 R3 R2+R12R2+R12R4R4寄存器寄存器R1R1的内容分别逻辑右移的内容分别逻辑右移2 2位、位、R4R4位(
16、亦即位(亦即R14R14、R12R12R4R4),再与寄存器),再与寄存器R2R2的内容相加,结果放入的内容相加,结果放入R3R3中。中。第18页/共121页寄存器间接寻址寄存器间接寻址FF 寄存器间接寻址就是以寄存器中的值作为操作寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。例如以数的地址,而操作数本身存放在存储器中。例如以下指令:下指令:n n LDRLDRR0R0,R1R1/*R0R1*/*R0R1*/n n STR STRR0R0,R1R1/*R1R0*/*R1R0*/第第一一条条指指令令将将以以R1R1的的值值为为地地址址的的存存储储器器中中的的数数据
17、据传传送送到到R0R0中中。第第二二条条指指令令将将R0R0的的值值传传送送到到以以R1R1的的值为地址的存储器中。值为地址的存储器中。第19页/共121页基址加偏址寻址基址加偏址寻址 基址变址寻址就是将寄存器(该寄存器一般称作基址变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用从而得到一个操作数的有效地址。变址寻址方式常用于访问某基地址附近的地址单元。采用变址寻址方式于访问某基地址附近的地址单元。采用变址寻址方式的指令又可以分为以下几种形式:的指令又可以分为以下
18、几种形式:前变址模式前变址模式前变址模式前变址模式:n nLDR R0LDR R0,R1R1,44;R0R1R0R144自动变址模式自动变址模式自动变址模式自动变址模式:n nLDR R0LDR R0,R1R1,44!;R0R1R0R144、R1R1R1R14 4后变址模式后变址模式后变址模式后变址模式:n nLDR R0LDR R0,R1 R1,4 4;R0R1R0R1、R1R1R1R14 4第20页/共121页基址加偏址寻址基址加偏址寻址基基址址寄寄存存器器的的地地址址偏偏移移可可以以是是一一个个立立即即数数,也也可可以以是是另另一一个个寄寄存存器器,并且在加到基址寄存器前还可以经过移位操
19、作,如下所示:并且在加到基址寄存器前还可以经过移位操作,如下所示:n nLDRLDR r0 r0,r1r1,r2r2;r0r0memmem3232r1+r2r1+r2n nLDR r0LDR r0,r1r1,r2r2,LSL#2LSL#2;r0r0r1+r2*4r1+r2*4n n但但常常用用的的是是立立即即数数偏偏移移的的形形式式,地地址址偏偏移移为为寄寄存存器器形形式式的的指指令令很很少少使用。使用。第21页/共121页堆栈寻址堆栈寻址FF堆堆栈栈是是一一种种数数据据结结构构,按按先先进进后后出出(First First In In Last Last OutOut,FILOFILO)的的
20、方方式式工工作作,使使用用一一个个称称作作堆堆栈栈指指针针的的专专用用寄寄存存器器指指示示当当前前的的操操作作位位置置,堆堆栈栈指针总是指向栈顶。指针总是指向栈顶。FF当堆栈指针指向最后压入堆栈的数据时,称为满当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(堆栈(Full StackFull Stack),而当堆栈指针指向下一个),而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(将要放入数据的空位置时,称为空堆栈(Empty Empty StackStack)。)。FF即访问存储器时,存储器的地址向高地址方向生即访问存储器时,存储器的地址向高地址方向生长,称为递增堆栈(长,称为递增堆
21、栈(ascending stackascending stack)。)。存储存储器的地址向低地址方向生长,称为递减堆栈器的地址向低地址方向生长,称为递减堆栈(descending stackdescending stack)。)。第22页/共121页堆栈寻址堆栈寻址四种类型的堆栈工作方式四种类型的堆栈工作方式 FF满满递递增增堆堆栈栈:堆堆栈栈指指针针指指向向最最后后压压入入的的数数据据,且且由由低低地地址址向向高高地地址址生生成。成。FF满满递递减减堆堆栈栈:堆堆栈栈指指针针指指向向最最后后压压入入的的数数据据,且且由由高高地地址址向向低低地地址址生生成。成。FF空空递递增增堆堆栈栈:堆堆栈
22、栈指指针针指指向向下下一一个个将将要要放放入入数数据据的的空空位位置置,且且由由低低地地址向高地址生成。址向高地址生成。FF空空递递减减堆堆栈栈:堆堆栈栈指指针针指指向向下下一一个个将将要要放放入入数数据据的的空空位位置置,且且由由高高地地址向低地址生成址向低地址生成n n STMFD SP!,R1-R7,LR 满递减满递减n nLDMFD SP!,R1-R7,LR 第23页/共121页块拷贝寻址块拷贝寻址FF块块拷拷贝贝寻寻址址是是多多寄寄存存器器传传送送指指令令LDM/STMLDM/STM的的寻寻址址方方式式。LDM/STMLDM/STM指指令令可可以以把把存存储储器器中中的的一一个个数数
23、据据块块加加载载到到多多个个寄寄存存器器中中,也也可可以以把把多多个个寄寄存存器器中中的的内内容容保保存存到到存存储储器器中中。寻寻址址操操作作中中的的寄寄存存器器可可以以是是R0-R15R0-R15这这1616个个寄寄存存器器的的子子集集或或是是所所有有寄存器。寄存器。FFLDM/STMLDM/STM指指令令依依据据其其后后缀缀名名的的不不同同其其寻寻址址的的方方式式也有很大不同,见下表。也有很大不同,见下表。第24页/共121页第25页/共121页例:例:STMIA R0!,R2-R9STMDB R1!,R2-R9LDMIB R0,R2-R9第26页/共121页相对寻址相对寻址 FF 与与
24、基基址址变变址址寻寻址址方方式式相相类类似似,相相对对寻寻址址以以程程序序计计数数器器PCPC的的当当前前值值为为基基地地址址,指指令令中中的的地地址址标标号号作作为为偏偏移移量量,将将两两者者相相加加之之后后得得到到操操作作数数的的有有效效地地址址。以以下下程程序序段段完完成成子子程程序序的的调调用用和和返返回回,跳跳转转指指令令BLBL采采用用了了相对寻址方式:相对寻址方式:n nBLBLNEXTNEXT;跳转到子程序;跳转到子程序n n ;NEXTNEXT处执行处执行n nn nNEXTNEXT:n nn nMOVMOVPCPC,LRLR;从子程序返回;从子程序返回 第27页/共121页
25、三、三、ARMARM指令详细介绍指令详细介绍 ARMARM指令集总体分为以下指令集总体分为以下6 6类:类:FF 数据处理指令;FF Load/Store指令;FF转移指令;FF程序状态寄存器与通用寄存器之间的传送指令;FF异常中断指令;FF 协处理器指令。第28页/共121页、数据处理指令、数据处理指令FF ARMARM的数据处理指令主要完成寄存器中数据的的数据处理指令主要完成寄存器中数据的算术和逻辑运算操作。算术和逻辑运算操作。n n本节按以下内容组织:本节按以下内容组织:数据处理指令分类数据处理指令分类 数据处理指令二进制编码数据处理指令二进制编码 数据处理指令表数据处理指令表第29页/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 开发 应用 教程
限制150内