收藏 分销(赏)

第3章ARM寻址方式和指令格式.ppt

上传人:pc****0 文档编号:13789905 上传时间:2026-04-15 格式:PPT 页数:56 大小:336KB 下载积分:10 金币
下载 相关
第3章ARM寻址方式和指令格式.ppt_第1页
第1页 / 共56页
第3章ARM寻址方式和指令格式.ppt_第2页
第2页 / 共56页


点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,第3章,ARM,寻址方式与指令系统,本章主要内容:,ARM,编程模型,ARM,指令格式和寻址方式,ARM,指令集,Thumb,指令集,1,机器指令、伪指令和宏指令,机器指令能被处理器直接执行,而伪指令宏和宏指令不能。,机器指令包括,ARM,指令集和,Thumb,指令集,;,伪指令是在源程序汇编期间,由汇编编译器处理。其作用是为汇编程序完成准备工作;,宏指令在程序中用于调用宏,宏是一段独立的程序代码;在程序汇编时,对宏调用进行展开,用宏体代替宏指令。,2,ARM,处理器模式,除用户模式之外的其余6种称为非用户模式,或特权模式(,Privileged Modes);,而特权模式中,除系统模式之外的其余5种又称为异常模式(,Exception Modes),,不同的工作模式间可以相互切换,。,工作模式,功能,M4:0,用户模式(,usr,),正常的程序执行状态,10000,快速中断模式(,fiq,),用于高速数据传输或通道处理,10001,外部中断模式(,irq,),用于通用的中断处理,10010,管理,模式(,svc),操作系统的保护模式,10011,中止模式(,abt,),用于虚拟存储及存储保护,10111,未定义指令模式(,und),用于支持硬件协处理器的软件仿真,11011,系统模式(,sys),运行特权级的操作系统任务,11111,3,处理器的工作状态,ARM,状态:处理器执行,32,位的,arm,指令集时,工作在此状态;,Thumb,状态:处理器执行,16,位的,thumb,指令集时,工作在此状态。,4,ARM,的寄存器组织,5,ARM,的寄存器组织,1.,通用寄存器:,包括,R0,R15,,,以及程序计数器,PC.,R0,R7,称为不分组寄存器;,R8,R12,有两组物理寄存器。一组属于快速模式(,R8_fiq,R12_fiq,),,另一组属于其它模式,(,R8_usrR12_usr);,R13,和,R14,有,6,组物理寄存器。其中用户模式和系统模式共用一组,。,寄存器,R13,通常作为堆栈指针(,SP,),寄存器,R14,常用作连接寄存器(,LR,);,寄存器,R15,,,又称为,PC,6,ARM,的寄存器组织,(1),2.,状态寄存器,:,当前程序状态寄存器,CPSR,,,可以在任何工作模式下被访问;,程序状态备份寄存器,SPSR,,只有在异常模式下,才能被访问,;,7,ARM,的寄存器组织,(2),条件标志位,标志位,含,义,N,当两个补码表示的带符号数运算时,,N=1,表示运算的结果为负数;,N=0,表示运算的结果为正数或零;,Z,Z=1,表示运算的结果为零;,Z=0,表示运算的结果不为零;,C,有,3,种情况会改变,C,的值:,加法运算(包括比较指令,CMN,):,当运算结果产生了进位时(无符号数上溢出),,C=1,,,否则,C=0,。,减法运算(包括比较指令,CMP,):,当运算时产生了借位(无符号数下溢出),,C=0,,,否则,C=1,。,对于包含移位操作的非加,/,减运算指令,,C,为移出值的最后一位。,V,对于加,/,减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,,V=1,表示符号位溢出。,Q,在,ARM v5,及以上版本的,E,系列处理器中,用,Q,标志位指示增强的,DSP,运算指令是否发生了溢出。,8,ARM,的寄存器组织(3),控制位,标志位,含义,I,I,1,,,表示禁止,IRQ,中断;否则,表示允许,IRQ,中断,F,F,1,,,表示禁止,FIQ,中断;否则,表示允许,FIQ,中断,T,对于,ARM v4,以上版本的,T,系列处理器,,T,0,,,表示执行,ARM,指令,否则,表示执行,Thumb,指令;,对于,ARM v5,以上版本的非,T,系列处理器,,T,0,,,表示指令,ARM,指令,否则,表示强制下一条执行的指令产生未定义指令中断。,M4:0,M4:0,处理器工作模式,可访问的寄存器,10000,用户模式,PC,,,R0,R14,,,CPSR,10001,快速中断模式,PC,,,R0,R7,,,R8_fiqR14_fiq,CPSR,SPSR_fiq,10010,外部中断模式,PC,,,R0,R12,,,R13_irqR14_irq,CPSR,SPSR_irq,10011,管理模式,PC,,,R0,R12,,,R13_svcR14_svc,CPSR,SPSR_svc,10111,中止模式,PC,,,R0,R12,,,R13_abtR14_abt,CPSR,SPSR_abt,11011,未定义指令模式,PC,,,R0,R12,,,R13_undR14_und,CPSR,SPSR_und,11111,系统模式,PC,,,R0,R14,,,CPSR,9,异常中断,异常中断是指处理器由于外部或内部的原因,停止执行当前任务,转而处理特定的事件,处理完后返回原程序,继续执行。,异常类型,工作模式,特定地址(低端),特定地址(高端),优先级,复位,管理模式,0,x00000000,0,xFFFF0000,1,未定义指令,未定义指令中止模式,0,x00000004,0,xFFFF0004,6,软件中断(,SWI),管理,模式,0,x00000008,0,xFFFF0008,6,指令预取中止,中止模式,0,x0000000C,0,xFFFF000C,5,数据访问中止,中止模式,0,x00000010,0,xFFFF0010,2,外部中断请求(,IRQ),外部中断模式,0,x00000018,0,xFFFF0018,4,快速中断请求(,FIQ),快速中断模式,0,x0000001C,0,xFFFF001C,3,10,异常中断(1),例子:,1.整个地址空间的起始位置(地址,0,x00000000,开始)有以下指令,一旦发生外部中断请求,,处理器首先自动保存当前状态(,PC-R14,CPSR-SPSR),,进入外部中断模式,接着执行地址0,x00000018,处的指令,即,b IRQ_SVC_HANDLER,跳转到标号,IRQ_SVC_HANDLER,处开始执行。,bSYS_RST_HANDLER;,对0,x00000000,bUDF_INS_HANDLER;0 x00000004,bSWI_SVC_HANDLER;,应0,x00000008,bINS_ABT_HANDLER;0 x0000000c,bDAT_ABT_HANDLER;,地0,x00000010,b.;,bIRQ_SVC_HANDLER;,址0,x00000018,bFIQ_SVC_HANDLER,;,0 x0000001c,11,异常中断(2),2.,IRQ_SVC_HANDLER,处的代码为:,IRQ_SVC_HANDLER,sub,lr,lr,#4,stmfd,sp!,r0-r3,lr,ldr,r0,=,IRQ_SVC_Vector,ldr,pc,r0,处理器将通用寄存器和返回地址压入堆栈,接着跳转到外部中断请求的中断服务程序中。,IRQ_SVC_Vector,为外部中断请求的中断向量。,12,ARM,指令的编码格式,31,28,27,25,24,21,20,19,16,15,12,110,cond,opcode,S,Rn,Rd,op2,0000,001,0100,1,0001,0000,000000000010,13,ARM,指令的助记符,ARM,指令在汇编程序中用助记符表示,一般,ARM,指令的助记符格式为:,S,其中:,操作码,如,ADD,表示算术加操作指令;,决定指令执行的条件域;,S,决定指令执行是否影响,CPSR,寄存器的值;,目的寄存器;,第一个操作数,为寄存器;,第二个操作数。,14,条件域,cond,CPSR,中标志位,含,义,EQ,Z,置位,相等,NE,Z,清零,不相等,CS,C,置位,无符号数大于或等于,CC,C,清零,无符号数小于,MI,N,置位,负数,PL,N,清零,正数或零,VS,V,置位,溢出,VC,V,清零,未溢出,HI,C,置位,Z,清零,无符号数大于,LS,C,清零,Z,置位,无符号数小于或等于,GE,N,等于,V,带符号数大于或等于,LT,N,不等于,V,带符号数小于,GT,Z,清零且(,N,等于,V,),带符号数大于,LE,Z,置位或(,N,不等于,V,),带符号数小于或等于,AL,忽略,无条件执行,15,寻址方式,立即数寻址,寄存器寻址,寄存器移位寻址,寄存器间接寻址,基址变址寻址,相对寻址,多寄存器寻址,块拷贝寻址,堆栈寻址,16,立即数寻址,在立即数寻址中,操作数本身直接在指令中给出,取出指令也就获得了操作数,这个操作数也称为立即数。例:,ADD R0,,,R1,,,5,;,R0=R1,5,MOV R0,,,0 x55,;,R0=0 x55,其中:操作数,5,,,0,x55,就是立即数,立即数在指令中要以“”为前缀,后面跟实际数值。,17,寄存器寻址,在寄存器寻址方式下,寄存器的值即为操作数。,ARM,指令普遍采用此种寻址方式。例:,ADD R0,R1,R2;R0=R1R2,MOV R0,R1;R0=R1,18,寄存器移位寻址,寄存器移位寻址的操作数由寄存器的数值做相应移位而得到;移位的方式在指令中以助记符的形式给出,而移位的位数可用立即数或寄存器寻址方式表示。例:,ADD R0,R1,R2,ROR 5;R0=R1R2,循环右移5位,MOV R0,R1,LSL R3;R0=R1,逻辑左移,R3,位,移位操作在,ARM,指令集中不作为单独的指令使用,,,ARM,指令集共有,5,种位移操作,。,19,寄存器移位寻址,LSL,逻辑左移,:,Rx,,,LSL,LSR,逻辑右移:,Rx,,,LSR,ASR,算术右移,:,Rx,,,ASR,ROR,循环右移,:,Rx,,,ROR,RRX,带扩展的循环右移,:,Rx,,,RRX,20,寄存器间接寻址,寄存器中的值为操作数的物理地址,而实际的操作数存放在存储器中,。,例:,STR R0,,,R1,;,R1=R0,LDR R0,,,R1,;,R0=R1,21,基址变址寻址,将寄存器(称为基址寄存器)的值与指令中给出的偏移地址量相加,所得结果作为操作数的物理地址。,例:,LDR R0,R1,5;R0=R1+5,LDR R0,R1,R2;R0=R1+R2,22,相对寻址,相对寻址同基址变址寻址相似,区别只是将程序计数器,PC,作为基址寄存器,指令中的标记作为地址偏移量。例:,BEQ process1,process1,:,23,多寄存器寻址,在多寄存器寻址方式中,一条指令可实现一组寄存器值的传送。连续的寄存器间用“”连接,否则用“,”分隔。例:,LDMIA R0,,,R1-R5,;,R1=R0,R2=R0+4,R3=R0+8,R4=R0+12,,,R5=R0+16,指令中,IA,表示在执行完一次,Load,操作后,,R0,自增,4,。该指令将以,R0,为起始地址的,5,个字数据分别装入,R1,,,R2,,,R3,,,R4,,,R5,中。,24,块拷贝寻址,块拷贝寻址可实现连续地址数据从存储器的某一位置拷贝到另一位置。例:,LDMIA R0,,,R1-R5,;,STMIA R1,,,R1-R5,;,第一条指令从以,R0,的值为起始地址的存储单元中取出,5,个字的数据,第二条指令将取出的数据存入以,R1,的值为起始地址的存储单元中。,25,堆栈寻址,堆栈寻址用于数据栈与寄存器组之间批量数据传输。当,数据写入和读出内存的顺序不同时,使用堆栈寻址可以很好的解决这问题。例:,STMFD R13!,,,R0,R1,R2,R3,R4,;,LDMFD R13!,,,R0,R1,R2,R3,R4,第一条指令,将,R0,R4,中的数据压入堆栈,,R13,为堆栈指针;,第二条指令,将数据出栈,恢复,R0,R4,原先的值。,26,ARM,指令集,数据处理指令;,跳转指令;,Load/Store,指令;,程序状态寄存器指令;,协处理器指令;,软件中断指令,27,数据处理指令,1.MOV,数据传送指令:,MOVS ,;,2.,MVN,数据取反传送指令:,MVNS ,;,3.,ADD,加法指令:,ADDS ,;,4.ADC,带进位加法指令:,ADCS ,;,28,数据处理指令,5.SUB,减法指令,:,SUBS ,;,6.RSB,反向减法指令:,RSBS ,;,7.,SBC,带借位减法指令:,SBCS ,;,8.,RSC,带借位的反向减法指令:,RSCS ,;,29,数据处理指令,9,MUL,32,位乘法指令:,MULS ,;,10,MLA,32,位乘加指令:,MLAS ,;,11.SMULL,64,位有符号数乘法指令,:,SMULLS,;,12,SMLAL,64,位有符号数乘加指令:,SMLALS ,;,30,数据处理指令,13,UMULL,64,位无符号数乘法指令:,UMULLS ,;,14,UMLAL,64,位无符号数乘加指令:,UMLAL S ,;,15,AND,逻辑与指令:,ANDS ,;,16,ORR,逻辑或指令:,ORRS ,;,31,数据处理指令,17.,EOR,逻辑异或指令:,EORS ,;,18,BIC,位清除指令:,BICS ,;,19,CMP,比较指令:,CMP ,;,20,CMN,反值比较指令:,CMN ,;,32,数据处理指令,21,TST,位测试指令:,TST ,;,22,TEQ,相等测试指令:,TEQ ,;,33,跳转指令,跳转指令用于实现程序的跳转和程序状态的切换,。,在,ARM,程序设计中,有两种方式可实现程序的跳转:一种是跳转指令,另一种是直接向程序寄存器,PC,(,R15,),中写入目标地址值。,通过向程序计数器,PC,写入跳转地址值,可以实现在,4,GB,的地址空间中的任意跳转,而使用跳转指令,其跳转空间受到限制。,34,跳转指令,1.,B,跳转指令:,B ;,功能:,B,是最简单的跳转指令。遇到一个,B,指令,,ARM,处理器将立即跳转到给定的地址,addr,,,从那里继续执行。,addr,的值是相对当前,PC(,即寄存器,R15),的值的一个偏移量。,2,.,BL,带返回的,跳转,指令:,BL ;,功能:同,B,指令,但,BL,指令执行跳转操作的同时,还将,PC,(,寄存器,R15,),的值保存到,LR,寄存器(寄存器,R14,),中。该指令用于实现子程序调用,。,35,跳转指令,3,BLX,带返回和状态切换的,跳转,指令:,BLX ;,或,BLX ;,功能:处理器跳转到目标地址处,从那继续执行,并将,PC,(,寄存器,R15,),的值保存到,LR,寄存器(寄存器,R14,),中。目标地址存放在寄存器,Rn,中或为给定的地址,addr,;,如果目标地址处为,Thumb,指令,则程序状态从,ARM,状态切换为,Thumb,状态。该指令用于子程序调用和程序状态的切换,。,36,跳转指令,4,BX,带状态切换的,跳转,指令:,BX ;,功能:处理器跳转到目标地址处,从那继续执行;目标地址为寄存器,Rn,的值和,0,xFFFFFFFE,做与操作的结果。目标地址处的指令可以是,ARM,指令,也可以是,Thumb,指令。,37,Load/Store,指令,Load/Store,指令用于寄存器和内存间数据的传送,,Load,用于把内存中的数据装载到寄存器中,而,Store,则用于把寄存器中的数据存入内存。,Load/Store,指令分为三类:,单一数据传送指令(,LDR,和,STR,等);,多数据传送指令(,LDM,和,STM,);,数据交换指令(,SWP,和,SWPB,)。,38,Load/Store,指令,1,LDR,字数据加载指令:,LDR ,;,2.,LDRB,字节数据加载指令:,LDRB ,;,3,LDRBT,用户模式的字节数据加载指令:,LDRBT ,4,LDRH,半字数据加载指令:,LDRH ,;,39,Load/Store,指令,5,LDRSB,有符号的字节数据加载指令:,LDRSB ,;,6,LDRSH,有符号的半字数据加载指令:,LDRSH ,;,7,LDRT,用户模式的字数据加载指令:,LDRT ,;,8.,STR,字数据存储指令:,STR ,;,40,Load/Store,指令,9.,STRB,字节数据存储指令:,STRB ,;,10.,STRBT,用户模式的字节数据存储指令:,STRBT ,;,11.,STRH,半字数据存储指令:,STRH ,;,12.,STRT,用户模式的字数据存储指令:,STRT ,;,41,Load/Store,指令,13.,LDM,批量数据加载指令:,LDM !,,,;,14.,STM,批量数据存储指令:,STM !,,,;,15.,SWP,字数据交换指令:,SWP ,;,16.,SWPB,字节数据交换指令:,SWPB ,;,42,程序状态寄存器指令,用于状态寄存器和通用寄存器间传送数据,有两条指令:,MRS,和,MSR,,,两者结合可用来修改程序状态寄存器的值。,1.,MRS,程序状态寄存器到通用寄存器的数据传送,指令:,MRS ,,,CPSR/SPSR,;,功能:用于将程序状态寄存器的内容传送到目标寄存器,Rd,中。,2.,MRS,通用寄存器到程序状态寄存器的数据传送,指令:,MRS CPSR/SPSR_,,,;,功能:用于将寄存器,Rd,的值传送到程序状态寄存器中。,43,协处理器指令,ARM,处理器最多可支持,16,个协处理器,用于辅助,ARM,完成各种协处理操作。在程序执行过程中,各协处理器只执行自身的协处理指令,而忽略属于,ARM,处理器和其他协处理器的指令。,ARM,协处理器指令可分为,3,类:,ARM,处理器用于初始化协处理器的数据操作指令(,CDP,);,协处理器寄存器和内存单元之间的数据传送指令(,LDC,,,STC,);,ARM,处理器寄存器和协处理器寄存器之间的数据传送指令(,MCR,MRC,),44,协处理器指令,1.CDP,协处理器数操作指令:,CDP ,,,,,,,,,,,;,功能:用于传递指令给协处理器,p,,,要求其在寄存器,CRn,和,CRm,上,进行操作,opcode1,,,并把结果存放到,CRd,中,可以使用,opcode2,提供与操作有关的补充信息。指令中的所有寄存器均为协处理器的寄存器,操作由协处理器完成。,45,协处理器指令,2,LDC,协处理器数据读取指令:,LDCL ,,,,,;,功能:将,addr,表示的内存地址中的连续数据传送到目的寄存器,CRd,中。,L,表示指令为长读取操作,比如用于双精度数据的传输;目的寄存器,CRd,为协处理器的寄存器;,addr,的寻址方式同,LDR,指令,其寄存器为,ARM,处理器的寄存器。,3,STC,协处理器数据存储指令:,STCL ,,,,,;,功能:将寄存器,CRd,的值传送到,addr,表示的内存地址中。指令中各参数用法同,LDC,指令。,46,协处理器指令,4,MCR,ARM,处理器寄存器到协处理器寄存器的数据传送指令:,MCR ,,,,,,,,,op2;,功能:将,ARM,处理器的寄存器,Rd,中的数据传送到协处理器,p,的寄存器,CRn,,,CRm,中;,op1,,,op2,为协处理器将要执行的操作。,5,MRC,协处理器寄存器到,ARM,处理器寄存器的数据传送指令:,MRC ,,,,,,,,,op2;,功能:将协处理器,p,的寄存器,CRn,,,CRm,中的数据传送到,ARM,处理器的寄存器,Rd,中;,op1,,,op2,为协处理器将要执行的操作。,47,异常中断指令,1,SWI,软件中断指令:,SWI,条件,24,位的立即数;,功能:用于产生软件中断,以使用户程序调用操作系统的系统例程。指令中,24,位的立即数指定用户程序调用系统例程的类型,其参数通过通用寄存器传递。当,24,位的立即数被忽略时,系统例程类型由寄存器,R0,指定,其参数通过其他通用寄存器传递。,2,BKPT,断点中断指令:,BKPT 16,位的立即数;,功能:用于产生软件断点中断,以便软件调试时使用。,16,位的立即数用于保存软件调试中额外的断点信息,。,48,Thumb,指令集,Thumb,指令集可以看作是,ARM,指令集的一个子集,,,Thumb,指令长度为,16,位,但,Thumb,指令集中的数据处理指令的操作数仍然是,32,位的,指令寻址地址也是,32,位的。,Thumb,指令集由四大类构成:,数据处理指令;,跳转指令;,Load/Store,指令;,和软件中断指令,49,数据处理指令,下页续,50,数据处理指令,51,跳转指令,格,式,功,能,Bcond,label,PC,label,;,若有,cond,,,则,label,必须在当前指令的,256,+256,字节范围内;,否则,,label,必须在当前指令的,2,K,2K,字节范围内,BL label,R14,PC,4,,,PC,label,;,label,必须在当前指令的,4,M,4M,字节范围内,BX,Rn,PC,Rn,,,且切换处理器状态,52,Load/Store,指令,下页续,53,Load/Store,指令,54,软件中断指令,格,式,功,能,SWI 8,位立即数,8,位立即数为中断号,55,思考题,1.编写123100的汇编程序。,2.如何实现128位数的减法,举例说明。,3.将存储器中起始地址,M1,处的4个字数据,移动到地址,M2,处。,4.参考,CPSR,寄存器中各标志位的含义,使处理器工作于系统模式。,5.用跳转指令实现两段程序间,来回切换。,56,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服