ARM寻址方式和指令格式PPT教学课件_第1页
ARM寻址方式和指令格式PPT教学课件_第2页
ARM寻址方式和指令格式PPT教学课件_第3页
ARM寻址方式和指令格式PPT教学课件_第4页
ARM寻址方式和指令格式PPT教学课件_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 ARM处理器模式 除用户模式之外的其余6种称为非用户模式,或特权模式(Privileged Modes);而特权模式中,除系统模式之外的其余5种又称为异常模式(Exception Modes),不同的工作模式间可以相互切换。 工作模式功能M4:0用户模式(usr)正常的程序执行状态10000快速中断模式(fiq)用于高速数据传输或通道处理10001外部中断模式(irq)用于通用的中断处理10010管理模式(svc)操作系统的保护模式10011中止模式(abt)用于虚拟存储及存储保护10111未定义指令模式(und)用于支持硬件协处理器的软件仿真11011系统模式(sys)运行特权级的操作系

2、统任务11111第1页/共55页2 处理器的工作状态ARM状态:处理器执行32位的arm指令集时,工作在此状态;Thumb状态:处理器执行16位的thumb指令集时,工作在此状态。 第2页/共55页3 ARM的寄存器组织第3页/共55页4 ARM的寄存器组织 1.通用寄存器:包括R0R15,以及程序计数器PC .R0R7称为不分组寄存器;R8R12有两组物理寄存器。一组属于快速模式(R8_fiqR12_fiq),另一组属于其它模式(R8_usrR12_usr) ;R13和R14有6组物理寄存器。其中用户模式和系统模式共用一组 。寄存器R13通常作为堆栈指针(SP) ,寄存器R14常用作连接寄存

3、器(LR);寄存器R15,又称为PC 第4页/共55页5 ARM的寄存器组织 (1)2.状态寄存器:当前程序状态寄存器 CPSR,可以在任何工作模式下被访问;程序状态备份寄存器SPSR,只有在异常模式下,才能被访问 ; 第5页/共55页6 ARM的寄存器组织 (2)条件标志位标志位含 义N当两个补码表示的带符号数运算时,N=1 表示运算的结果为负数;N=0 表示运算的结果为正数或零;ZZ=1 表示运算的结果为零;Z=0表示运算的结果不为零;C有3种情况会改变C的值:加法运算(包括比较指令CMN):当运算结果产生了进位时(无符号数上溢出),C=1,否则C=0。减法运算(包括比较指令CMP):当运

4、算时产生了借位(无符号数下溢出),C=0,否则C=1。对于包含移位操作的非加/减运算指令,C为移出值的最后一位。V对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出。Q在ARM v5及以上版本的E系列处理器中,用Q标志位指示增强的DSP运算指令是否发生了溢出。第6页/共55页7 ARM的寄存器组织 (3)控制位标志位含义II1,表示禁止IRQ中断;否则,表示允许IRQ中断FF1,表示禁止FIQ中断;否则,表示允许FIQ中断T对于ARM v4以上版本的T系列处理器,T0,表示执行ARM指令,否则,表示执行Thumb指令;对于ARM v5以上版本的非T系列

5、处理器,T0,表示指令ARM指令,否则,表示强制下一条执行的指令产生未定义指令中断。M4:0M4:0处理器工作模式可访问的寄存器10000用户模式PC,R0R14,CPSR10001快速中断模式PC,R0R7,R8_fiqR14_fiq,CPSR,SPSR_fiq10010外部中断模式PC,R0R12,R13_irqR14_irq,CPSR,SPSR_irq10011管理模式PC,R0R12,R13_svcR14_svc,CPSR,SPSR_svc10111中止模式PC,R0R12,R13_abtR14_abt,CPSR,SPSR_abt11011未定义指令模式PC,R0R12,R13_und

6、R14_und,CPSR,SPSR_und11111系统模式PC,R0R14,CPSR第7页/共55页8 异常中断 异常中断是指处理器由于外部或内部的原因,停止执行当前任务,转而处理特定的事件,处理完后返回原程序,继续执行。 异常类型工作模式特定地址(低端)特定地址(高端)优先级复位管理模式0 x000000000 xFFFF00001未定义指令未定义指令中止模式0 x000000040 xFFFF00046软件中断(SWI)管理模式0 x000000080 xFFFF00086指令预取中止中止模式0 x0000000C0 xFFFF000C5数据访问中止中止模式0 x000000100 xF

7、FFF00102外部中断请求(IRQ)外部中断模式0 x000000180 xFFFF00184快速中断请求(FIQ)快速中断模式0 x0000001C0 xFFFF001C3第8页/共55页9 异常中断(1)例子: 1.整个地址空间的起始位置(地址0 x00000000开始)有以下指令,一旦发生外部中断请求,处理器首先自动保存当前状态(PC-R14,CPSR-SPSR),进入外部中断模式,接着执行地址0 x00000018处的指令,即b IRQ_SVC_HANDLER跳转到标号IRQ_SVC_HANDLER处开始执行。 bSYS_RST_HANDLER;对0 x00000000bUDF_IN

8、S_HANDLER;0 x00000004bSWI_SVC_HANDLER;应0 x00000008bINS_ABT_HANDLER;0 x0000000cbDAT_ABT_HANDLER;地0 x00000010b.;bIRQ_SVC_HANDLER;址0 x00000018bFIQ_SVC_HANDLER;0 x0000001c 第9页/共55页10 异常中断(2) 2. IRQ_SVC_HANDLER处的代码为: IRQ_SVC_HANDLERsub lr, lr, #4stmfdsp!, r0-r3, lrldrr0, =IRQ_SVC_Vectorldrpc, r0 处理器将通用寄存

9、器和返回地址压入堆栈,接着跳转到外部中断请求的中断服务程序中。IRQ_SVC_Vector为外部中断请求的中断向量。第10页/共55页11 ARM指令的编码格式 3128272524212019161512110cond opcodeSRnRdop200000010100100010000000000000010第11页/共55页12 ARM指令的助记符 ARM指令在汇编程序中用助记符表示,一般ARM指令的助记符格式为: S , 其中: 操作码,如ADD表示算术加操作指令; 决定指令执行的条件域;S 决定指令执行是否影响CPSR寄存器的值; 目的寄存器; 第一个操作数,为寄存器; 第二个操作数

10、。第12页/共55页13 条件域condCPSR中标志位含 义EQZ置位相等NEZ清零不相等CSC置位无符号数大于或等于CCC清零无符号数小于MIN置位负数PLN清零正数或零VSV置位溢出VCV清零未溢出HIC置位Z清零无符号数大于LSC清零Z置位无符号数小于或等于GEN等于V带符号数大于或等于LTN不等于V带符号数小于GTZ清零且(N等于V)带符号数大于LEZ置位或(N不等于V)带符号数小于或等于AL忽略无条件执行第13页/共55页14 寻址方式 立即数寻址寄存器寻址寄存器移位寻址寄存器间接寻址 基址变址寻址相对寻址 多寄存器寻址 块拷贝寻址 堆栈寻址 第14页/共55页15 立即数寻址 在

11、立即数寻址中,操作数本身直接在指令中给出,取出指令也就获得了操作数,这个操作数也称为立即数。例: ADD R0,R1,5; R0=R15 MOV R0,0 x55; R0=0 x55 其中:操作数5,0 x55就是立即数,立即数在指令中要以“”为前缀,后面跟实际数值。 第15页/共55页16 寄存器寻址 在寄存器寻址方式下,寄存器的值即为操作数。ARM指令普遍采用此种寻址方式。例: ADD R0,R1,R2; R0=R1R2 MOV R0,R1; R0=R1第16页/共55页17 寄存器移位寻址 寄存器移位寻址的操作数由寄存器的数值做相应移位而得到;移位的方式在指令中以助记符的形式给出,而移位

12、的位数可用立即数或寄存器寻址方式表示。例:ADD R0,R1,R2,ROR 5;R0=R1R2循环右移5位MOV R0,R1,LSL R3; R0=R1逻辑左移R3位 移位操作在ARM指令集中不作为单独的指令使用,ARM指令集共有5种位移操作。第17页/共55页18 寄存器移位寻址 LSL逻辑左移 :Rx,LSL LSR逻辑右移 : Rx,LSR ASR算术右移 :Rx,ASR ROR循环右移 :Rx,ROR RRX带扩展的循环右移:Rx,RRX 第18页/共55页19 寄存器间接寻址 寄存器中的值为操作数的物理地址,而实际的操作数存放在存储器中。例: STR R0,R1;R1=R0 LDR

13、R0,R1;R0=R1第19页/共55页20 基址变址寻址 将寄存器(称为基址寄存器)的值与指令中给出的偏移地址量相加,所得结果作为操作数的物理地址。例: LDR R0,R1,5;R0=R1+5 LDR R0,R1,R2; R0=R1+R2第20页/共55页21 相对寻址 相对寻址同基址变址寻址相似,区别只是将程序计数器PC作为基址寄存器,指令中的标记作为地址偏移量。例: BEQ process1 process1: 第21页/共55页22 多寄存器寻址 在多寄存器寻址方式中,一条指令可实现一组寄存器值的传送。连续的寄存器间用“”连接,否则用“,”分隔。例: LDMIA R0,R1-R5; R

14、1=R0,R2=R0+4,R3=R0+8 R4=R0+12,R5=R0+16 指令中IA表示在执行完一次Load操作后,R0自增4。该指令将以R0为起始地址的5个字数据分别装入R1,R2,R3,R4,R5中。第22页/共55页23 块拷贝寻址 块拷贝寻址可实现连续地址数据从存储器的某一位置拷贝到另一位置。例: LDMIA R0,R1-R5; STMIA R1,R1-R5; 第一条指令从以R0的值为起始地址的存储单元中取出5个字的数据,第二条指令将取出的数据存入以R1的值为起始地址的存储单元中。第23页/共55页24 堆栈寻址 堆栈寻址用于数据栈与寄存器组之间批量数据传输。当数据写入和读出内存的

15、顺序不同时,使用堆栈寻址可以很好的解决这问题。例: STMFD R13!,R0,R1,R2,R3,R4; LDMFD R13!,R0,R1,R2,R3,R4 第一条指令,将R0R4中的数据压入堆栈,R13为堆栈指针; 第二条指令,将数据出栈,恢复R0R4原先的值。第24页/共55页25 ARM指令集 数据处理指令; 跳转指令; Load/Store指令; 程序状态寄存器指令; 协处理器指令; 软件中断指令 第25页/共55页26 数据处理指令1. MOV数据传送指令: MOVS ,; 2. MVN数据取反传送指令: MVNS ,;3. ADD加法指令: A D D S ,; 4. ADC带进位

16、加法指令: ADCS ,; 第26页/共55页27 数据处理指令5. SUB减法指令: SUBS ,;6. RSB反向减法指令: RSBS ,;7. SBC带借位减法指令: SBCS ,;8. RSC带借位的反向减法指令: RSCS ,;第27页/共55页28 数据处理指令9 MUL 32位乘法指令: MULS ,;10MLA 32位乘加指令: MLAS ,;11. SMULL 64位有符号数乘法指令 : SMULLS ,;12SMLAL 64位有符号数乘加指令: SMLALS ,;第28页/共55页29 数据处理指令13UMULL 64位无符号数乘法指令: UMULLS ,;14UMLAL

17、64位无符号数乘加指令: UMLAL S ,;15AND逻辑与指令: ANDS ,;16ORR逻辑或指令: ORRS ,;第29页/共55页30 数据处理指令17. EOR逻辑异或指令: EORS ,; 18BIC位清除指令: BICS ,; 19CMP比较指令: CMP ,;20CMN反值比较指令: CMN ,; 第30页/共55页31 数据处理指令21TST位测试指令: TST ,; 22TEQ相等测试指令: TEQ ,; 第31页/共55页32 跳转指令 跳转指令用于实现程序的跳转和程序状态的切换。在ARM程序设计中,有两种方式可实现程序的跳转:一种是跳转指令,另一种是直接向程序寄存器P

18、C(R15)中写入目标地址值。 通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,而使用跳转指令,其跳转空间受到限制。 第32页/共55页33 跳转指令1. B跳转指令: B ; 功能:B是最简单的跳转指令。遇到一个B指令,ARM处理器将立即跳转到给定的地址addr,从那里继续执行。addr的值是相对当前PC(即寄存器R15)的值的一个偏移量。2. BL带返回的跳转指令: BL ; 功能:同B指令,但BL指令执行跳转操作的同时,还将PC(寄存器R15)的值保存到LR寄存器(寄存器R14)中。该指令用于实现子程序调用 。第33页/共55页34 跳转指令3BLX带返回和状

19、态切换的跳转指令: BLX ;或BLX ; 功能:处理器跳转到目标地址处,从那继续执行,并将PC(寄存器R15)的值保存到LR寄存器(寄存器R14)中。目标地址存放在寄存器Rn中或为给定的地址addr;如果目标地址处为Thumb指令,则程序状态从ARM状态切换为Thumb状态。该指令用于子程序调用和程序状态的切换 。第34页/共55页35 跳转指令4BX带状态切换的跳转指令: BX ; 功能:处理器跳转到目标地址处,从那继续执行;目标地址为寄存器Rn的值和0 xFFFFFFFE做与操作的结果。目标地址处的指令可以是ARM指令,也可以是Thumb指令。第35页/共55页36 Load/Store

20、指令Load/Store指令用于寄存器和内存间数据的传送,Load用于把内存中的数据装载到寄存器中,而Store则用于把寄存器中的数据存入内存。Load/Store指令分为三类: 单一数据传送指令(LDR和STR等); 多数据传送指令(LDM和STM); 数据交换指令(SWP和SWPB)。第36页/共55页37 Load/Store指令1LDR字数据加载指令: LDR ,;2. LDRB字节数据加载指令: LDRB ,;3LDRBT 用户模式的字节数据加载指令: LDRBT ,4LDRH半字数据加载指令: LDRH ,;第37页/共55页38 Load/Store指令5LDRSB有符号的字节数

21、据加载指令: LDRSB ,;6LDRSH有符号的半字数据加载指令: LDRSH ,; 7LDRT用户模式的字数据加载指令: LDRT ,; 8. STR字数据存储指令: STR ,; 第38页/共55页39 Load/Store指令9. STRB字节数据存储指令: STRB ,; 10. STRBT用户模式的字节数据存储指令: STRBT ,; 11. STRH半字数据存储指令: STRH ,; 12. STRT用户模式的字数据存储指令: STRT ,; 第39页/共55页40 Load/Store指令13. LDM批量数据加载指令: LDM !,; 14. STM批量数据存储指令: STM

22、 !,;15. SWP字数据交换指令: SWP ,; 16. SWPB字节数据交换指令: SWPB ,; 第40页/共55页41 程序状态寄存器指令 用于状态寄存器和通用寄存器间传送数据,有两条指令:MRS和MSR,两者结合可用来修改程序状态寄存器的值。1.MRS程序状态寄存器到通用寄存器的数据传送指令: MRS ,CPSR/SPSR; 功能:用于将程序状态寄存器的内容传送到目标寄存器Rd中。2.MRS通用寄存器到程序状态寄存器的数据传送指令: MRS CPSR/SPSR_,; 功能:用于将寄存器Rd的值传送到程序状态寄存器中。第41页/共55页42 协处理器指令 ARM处理器最多可支持16个

23、协处理器,用于辅助ARM完成各种协处理操作。在程序执行过程中,各协处理器只执行自身的协处理指令,而忽略属于ARM处理器和其他协处理器的指令。ARM协处理器指令可分为3类:ARM处理器用于初始化协处理器的数据操作指令(CDP);协处理器寄存器和内存单元之间的数据传送指令(LDC,STC);ARM处理器寄存器和协处理器寄存器之间的数据传送指令(MCR,MRC) 第42页/共55页43 协处理器指令1. CDP协处理器数操作指令: CDP ,; 功能:用于传递指令给协处理器p,要求其在寄存器CRn和CRm上,进行操作opcode1,并把结果存放到CRd中,可以使用opcode2提供与操作有关的补充信

24、息。指令中的所有寄存器均为协处理器的寄存器,操作由协处理器完成。第43页/共55页44 协处理器指令2LDC协处理器数据读取指令: LDCL ,; 功能:将addr表示的内存地址中的连续数据传送到目的寄存器CRd中。L表示指令为长读取操作,比如用于双精度数据的传输;目的寄存器CRd为协处理器的寄存器;addr的寻址方式同LDR指令,其寄存器为ARM处理器的寄存器。3STC协处理器数据存储指令: STCL ,; 功能:将寄存器CRd的值传送到addr表示的内存地址中。指令中各参数用法同LDC指令。 第44页/共55页45 协处理器指令4MCR ARM处理器寄存器到协处理器寄存器的数据传送指令: M C R , , , ,,op2; 功能:将ARM处理器的寄存器Rd中的数据传送到协处理器p的寄存器CRn,CRm中;op1,op2为协处理器将要执行的操作。 5MRC协处理器寄存器到ARM处理器寄存器的数据传送指令: M R C , , , ,,op2; 功能:将协处理器p的寄存器CRn,CRm中的数据传送到ARM处理器的寄存器Rd中;op1,op2为协处理器将要执行的操作。第45页/共55页46 异常中断指令 1 SWI软

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论