ARM的指令系统_第1页
ARM的指令系统_第2页
ARM的指令系统_第3页
ARM的指令系统_第4页
ARM的指令系统_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

1、1TM1ARM处理器的指令系统2TM2ARM处理器的指令系统3TM3ARM处理器的指令系统内内 容容 简简 介介 以ARM控制器LPC2104及基于LPC2104的开发学习板EasyARM2104入手,逐步引导读者掌握使用开发ARM的基本知识。本书分3个部分: 第1部分为基础篇,包括第1章和第2章,主要从ARM芯片开发者的角度介绍ARM7TDMI的体系结构和指令系统。第2部分为实验篇,包括第3章、第4章和第5章,详细介绍ARM控制器LPC2104的内部结构和开发学习板EasyARM2104的硬件结构等知识,给出LPC2104的各个功能部件的编程方法,包括汇编代码和C语言代码。第3部分为提高篇,

2、包括第6章第13章,介绍如何把嵌入式实时操作系统C/OSII移植到LPC2104,在不同情况下如何编译这些代码。然后介绍LPC2104的几个重要功能部件在C/OSII的驱动程序(中间件),以及其它功能部件在C/OSII上的使用方法。 本书可作为高等院校嵌入式系统课程的参考用书,以及ARM应用技术开发人员的参考手册。定价:49.00元4TM4ARM处理器的指令系统nARM指令集指令集nThumb指令集指令集第四章、第四章、ARMARM的指令系统的指令系统5TM5ARM处理器的指令系统ARM指令集指令集nARMARM微处理器的指令集是加载微处理器的指令集是加载/ /存储型的,也即指令存储型的,也即

3、指令集仅能处理寄存器中的数据,而且处理结果都要放集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问则需要通过专回寄存器中,而对系统存储器的访问则需要通过专门的加载门的加载/ /存储指令来完成。存储指令来完成。nARMARM微处理器的指令集可以分为跳转指令、数据处微处理器的指令集可以分为跳转指令、数据处理指令、程序状态寄存器(理指令、程序状态寄存器(PSRPSR)处理指令、加载处理指令、加载/ /存储指令、协处理器指令和异常产生指令六大类存储指令、协处理器指令和异常产生指令六大类 6TM6ARM处理器的指令系统ARM指令编码格式指令编码格式n说明说明nCondn指令执行

4、的条件编码nOpcoden指令操作符编码nSn决定指令的操作是否影响CPSR的值nRdn操作目标寄存器编码nRnn包含第一操作数的寄存器编码nShifter_operandn表示第二操作数cond001opcodesRnRdShifter_operand 31 28 27 25 24 21 20 19 16 15 12 11 8 7 07TM7ARM处理器的指令系统nARM指令可以通过添加适当的条件码指令可以通过添加适当的条件码后缀后缀来达到条件执行的目的。来达到条件执行的目的。n这样可以提高代码密度,减少分支跳转指令数目,提高性能。 CMP r3,#0 CMP r3,#0 BEQ skip

5、ADDNE r0,r1,r2 ADD r0,r1,r2skipn默认情况下,数据处理指令不影响条件码标志位,但可以选择通过添加默认情况下,数据处理指令不影响条件码标志位,但可以选择通过添加“S”来影来影响标志位响标志位。 CMP不需要增加不需要增加 “S”就可改变相应的标志位。就可改变相应的标志位。loop SUBS r1,r1,#1 BNE loop条件执行及标志位条件执行及标志位如果 Z标志清零则跳转R1减1,并设置标志位 8TM8ARM处理器的指令系统ARM指令及功能描述指令及功能描述 助记符指令功能描述ADC带进位加法指令ADD加法指令AND逻辑与指令B跳转指令BIC位清零指令BL带返

6、回的跳转指令BLX带返回和状态切换的跳转指令BX带状态切换的跳转指令CDP协处理器数据操作指令CMN比较反值指令CMP比较指令9TM9ARM处理器的指令系统ARM指令及功能描述指令及功能描述 EOR异或指令LDC存储器到协处理器的数据传输指令LDM加载多个寄存器指令LDR存储器到寄存器的数据传输指令MCR从ARM-R到协处理器-R的数据传输指令MLA乘加运算指令MOV数据传送指令MRC从协处理器-R到ARM-R的数据传输指令MRS传送CPSR或SPSR的内容到通用寄存器指令MSR传送通用寄存器到CPSR或SPSR的指令MUL32位乘法指令MLA32位乘加指令10TM10ARM处理器的指令系统A

7、RM指令及功能描述指令及功能描述 MVN数据取反传送指令ORR逻辑或指令RSB逆向减法指令RSC带借位的逆向减法指令SBC带借位减法指令STC协处理器寄存器写入存储器指令STM批量内存字写入指令STR寄存器到存储器的数据传输指令SUB减法指令SWI软件中断指令SWP交换指令TEQ相等测试指令TST位测试指令11TM11ARM处理器的指令系统指令的条件域指令的条件域 当处理器工作在ARM状态时,几乎所有的指令均根据CPSR中条件码的状态和指令的条件域有条件的执行。当指令的执行条件满足时,指令被执行,否则指令被忽略。每一条ARM指令包含4位的条件码,位于指令的最高4位31:28。条件码共有16种,

8、每种条件码可用两个字符表示,这两个字符可以添加在指令助记符的后面和指令同时使用。例如,跳转指令B可以加上后缀EQ变为BEQ表示“相等则跳转”,即当CPSR中的Z标志置位时发生跳转。 12TM12ARM处理器的指令系统所有可能的条件码所有可能的条件码不等于(Not equal)无符号的大于或等于无符号的小于负数(Minus)等于(Equal)溢出(Overflow)没溢出无符号的大于无符号的小于或大于正数或零小于(Less Than)大于(Greater Than)小于等于总是执行(Always)大于等于EQNECS/HSCC/LOPLVSHILSGELTGTLEALMIVCSuffix描述描述

9、Z=0C=1C=0Z=1测试的标志位测试的标志位N=1N=0V=1V=0C=1 & Z=0C=0 or Z=1N=VN!=VZ=0 & N=VZ=1 or N=!Vn下表为所有可能的条件码:下表为所有可能的条件码:13TM13ARM处理器的指令系统条件执行示例条件执行示例n一系列的指令都使用条件指令一系列的指令都使用条件指令if (a=0) func(1);CMP r0,#0MOVEQ r0,#1BLEQ funcn置标志位,再使用不同的条件码置标志位,再使用不同的条件码if (a=0) x=0;if (a0) x=1;CMP r0,#0MOVEQ r1,#0MOVGT r1,

10、#1n使用条件比较指令使用条件比较指令if (a=4 | a=10) x=0;CMP r0,#4CMPNE r0,#10MOVEQ r1,#014TM14ARM处理器的指令系统ARM指令的寻址方式指令的寻址方式 n所谓寻址方式就是处理器根据指令中给出的所谓寻址方式就是处理器根据指令中给出的地址信息来寻找物理地址的方式。地址信息来寻找物理地址的方式。n目前目前ARM指令系统支持如下指令系统支持如下7 7种常见的寻址种常见的寻址方式。方式。 15TM15ARM处理器的指令系统1 立即寻址立即寻址 n立即寻址也叫立即数寻址,这是一种特殊的寻址方立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本

11、身就在指令中给出,只要取出指令也式,操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。例如以下指令:的寻址方式也就叫做立即寻址。例如以下指令:nADDR0,R0,1 ;R0R0R01 1nADDR0,R0,0 x3f ;R0R0R00 x3f0 x3fn在以上两条指令中,第二个源操作数即为立即数,在以上两条指令中,第二个源操作数即为立即数,要求以要求以“”为前缀,对于以十六进制表示的立即为前缀,对于以十六进制表示的立即数,还要求在数,还要求在“”后加上后加上“0“0 x”x”或或“&

12、;”“&”。 16TM16ARM处理器的指令系统2 寄存器寻址寄存器寻址 n寄存器寻址就是利用寄存器中的数值作为操寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻用的一种方式,也是一种执行效率较高的寻址方式。以下指令:址方式。以下指令:nADDR0,R1,R2;R0R1R1R2R2n该指令的执行效果是将寄存器该指令的执行效果是将寄存器R1R1和和R2R2的内容的内容相加,其结果存放在寄存器相加,其结果存放在寄存器R0R0中。中。 17TM17ARM处理器的指令系统3 寄存器间接寻址寄

13、存器间接寻址 n寄存器间接寻址就是以寄存器中的值作为操作数的地址,而寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。例如以下指令:操作数本身存放在存储器中。例如以下指令:nADD R0,R1,R2;R0R1R1R2R2nLDRLDR R0R0,R1R1;R0R1R1nSTRSTR R0R0,R1R1;R1R1R0n在第一条指令中,以寄存器在第一条指令中,以寄存器R2R2的值作为操作数的地址,在存的值作为操作数的地址,在存储器中取得一个操作数后与储器中取得一个操作数后与R1R1相加,结果存入寄存器相加,结果存入寄存器R0R0中。中。n第二条指令将以第二条指令将以R1

14、R1的值为地址的存储器中的数据传送到的值为地址的存储器中的数据传送到R0R0中中。n第三条指令将第三条指令将R0R0的值传送到以的值传送到以R1R1的值为地址的存储器中。的值为地址的存储器中。 18TM18ARM处理器的指令系统4 基址变址寻址基址变址寻址 n基址变址寻址就是将寄存器(该寄存器一般称作基址寄存器基址变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。作数的有效地址。n变址寻址方式常用于访问某基地址附近的地址单元。采用变变址寻址方式常用于访问某基地址附近的地址单元。

15、采用变址寻址方式的指令常见有以下几种形式,如下所示:址寻址方式的指令常见有以下几种形式,如下所示:nLDR R0,R1,4;R0R1R144nLDR R0,R1,4!;R0R1R144、R1R1R1R14 4n在第一条指令中,将寄存器在第一条指令中,将寄存器R1R1的内容加上的内容加上4 4形成操作数的有效形成操作数的有效地址,从而取得操作数存入寄存器地址,从而取得操作数存入寄存器R0R0中。中。n在第二条指令中,将寄存器在第二条指令中,将寄存器R1R1的内容加上的内容加上4 4形成操作数的有效形成操作数的有效地址,从而取得操作数存入寄存器地址,从而取得操作数存入寄存器R0R0中,然后,中,然

16、后,R1R1的内容自的内容自增增4 4个字节。个字节。 19TM19ARM处理器的指令系统4 基址变址寻址基址变址寻址 nLDR R0,R1 ,4;R0R1R1、R1R1R1R14 4nLDR R0,R1,R2;R0R1R1R2R2n在第三条指令中,以寄存器在第三条指令中,以寄存器R1R1的内容作为操作数的的内容作为操作数的有效地址,从而取得操作数存入寄存器有效地址,从而取得操作数存入寄存器R0R0中,然后中,然后,R1R1的内容自增的内容自增4 4个字节。个字节。n在第四条指令中,将寄存器在第四条指令中,将寄存器R1R1的内容加上寄存器的内容加上寄存器R2R2的内容形成操作数的有效地址,从而

17、取得操作数存的内容形成操作数的有效地址,从而取得操作数存入寄存器入寄存器R0R0中。中。 20TM20ARM处理器的指令系统5 多寄存器寻址多寄存器寻址 n采用多寄存器寻址方式,一条指令可以完成多个寄采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。这种寻址方式可以用一条指令完成存器值的传送。这种寻址方式可以用一条指令完成传送最多传送最多1616个通用寄存器的值。以下指令:个通用寄存器的值。以下指令:nLDMIA R0,R1,R2,R3,R4;R1R0R0 ;R2R0R044 ;R3R0R088 ;R4R0R01212n该指令的后缀该指令的后缀IAIA表示在每次执行完加载表示在每次执行

18、完加载/ /存储操作存储操作后,后,R0R0按字长度增加,因此,指令可将连续存储单按字长度增加,因此,指令可将连续存储单元的值传送到元的值传送到R1R1R4R4。21TM21ARM处理器的指令系统6 相对寻址相对寻址 n与基址变址寻址方式相类似,相对寻址以程序计数器与基址变址寻址方式相类似,相对寻址以程序计数器PCPC的当的当前值为基地址,指令中的地址标号作为偏移量,将两者相加前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。之后得到操作数的有效地址。n以下程序段完成子程序的调用和返回,跳转指令以下程序段完成子程序的调用和返回,跳转指令BLBL采用了相采用了相对寻址

19、方式:对寻址方式: BLNEXT;跳转到子程序跳转到子程序NEXT处执行处执行 NEXTNEXT MOV MOVPCPC,LRLR;从子程序返回从子程序返回 22TM22ARM处理器的指令系统7 堆栈寻址堆栈寻址 n堆栈是一种数据结构,按先进后出(堆栈是一种数据结构,按先进后出(First In Last First In Last OutOut,FILOFILO)的方式工作,使用一个称作堆栈指针的专的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。顶。n当堆栈指针指向最后压入堆栈的数据时,称为满堆栈当堆栈指针指

20、向最后压入堆栈的数据时,称为满堆栈(Full StackFull Stack),),而当堆栈指针指向下一个将要放入而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(数据的空位置时,称为空堆栈(Empty StackEmpty Stack)。)。n根 据 堆 栈 的 生 成 方 式 , 又 可 以 分 为 递 增 堆 栈 (根 据 堆 栈 的 生 成 方 式 , 又 可 以 分 为 递 增 堆 栈 (Ascending StackAscending Stack)和递减堆栈(和递减堆栈(DecendingDecending Stack Stack),当堆栈由低地址向高地址生成时,称为递增堆

21、栈,当堆栈由低地址向高地址生成时,称为递增堆栈,当堆栈由高地址向低地址生成时,称为递减堆栈。当堆栈由高地址向低地址生成时,称为递减堆栈。 23TM23ARM处理器的指令系统7 堆栈寻址堆栈寻址 n这样就有四种类型的堆栈工作方式,这样就有四种类型的堆栈工作方式,ARMARM微处理器微处理器支持这四种类型的堆栈工作方式,即:支持这四种类型的堆栈工作方式,即:n 满递增堆栈:堆栈指针指向最后压入的数据,满递增堆栈:堆栈指针指向最后压入的数据,且由低地址向高地址生成。且由低地址向高地址生成。n 满递减堆栈:堆栈指针指向最后压入的数据,满递减堆栈:堆栈指针指向最后压入的数据,且由高地址向低地址生成。且由

22、高地址向低地址生成。n 空递增堆栈:堆栈指针指向下一个将要放入数空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。据的空位置,且由低地址向高地址生成。n 空递减堆栈:堆栈指针指向下一个将要放入数空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成。据的空位置,且由高地址向低地址生成。 24TM24ARM处理器的指令系统ARM指令集的分类指令指令集的分类指令n1 1 跳转指令跳转指令 n2 2 数据处理指令数据处理指令 n3 3 乘法指令与乘加指令乘法指令与乘加指令 n4 4 程序状态寄存器访问指令程序状态寄存器访问指令 n5 5 加载加载/ /存

23、储指令存储指令n6 6 批量数据加载批量数据加载/ /存储指令存储指令n7 7 数据交换指令数据交换指令 n8 8 移位指令(操作)移位指令(操作) n9 9 协处理器指令协处理器指令 n10 10 异常产生指令异常产生指令 25TM25ARM处理器的指令系统1 跳转指令跳转指令 跳转指令用于实现程序流程的跳转,在跳转指令用于实现程序流程的跳转,在ARMARM程序中有两种程序中有两种方法可以实现程序流程的跳转:方法可以实现程序流程的跳转: 使用专门的跳转指令。使用专门的跳转指令。 直接向程序计数器直接向程序计数器PCPC写入跳转地址值。写入跳转地址值。通过向程序计数器通过向程序计数器PCPC写

24、入跳转地址值,可以实现在写入跳转地址值,可以实现在4 4GBGB的地址的地址空间中的任意跳转,在跳转之前结合使用空间中的任意跳转,在跳转之前结合使用MOVLR,PC等类似指令,可以保存将来的返回地址值,从而实现在等类似指令,可以保存将来的返回地址值,从而实现在4 4GBGB连连续的线性地址空间的子程序调用。续的线性地址空间的子程序调用。26TM26ARM处理器的指令系统1 跳转指令跳转指令 ARMARM指令集中的跳转指令可以完成从当前指令向前指令集中的跳转指令可以完成从当前指令向前或向后的或向后的3232MBMB的地址空间的跳转,包括以下的地址空间的跳转,包括以下4 4条指条指令:令: B B

25、跳转指令跳转指令 BLBL带返回的跳转指令带返回的跳转指令 BLXBLX带返回和状态切换的跳转指令带返回和状态切换的跳转指令BXBX带状态切换的跳转指令带状态切换的跳转指令 Ex: BLLabel;程序无条件跳转到标号程序无条件跳转到标号Label处处执行时,同时将当前的执行时,同时将当前的PC值保存到值保存到R14中中27TM27ARM处理器的指令系统2 数据处理指令数据处理指令 n数据处理指令可分为数据传送指令、算术逻辑数据处理指令可分为数据传送指令、算术逻辑运算指令和比较指令等。运算指令和比较指令等。n数据传送指令用于在寄存器和存储器之间进行数据数据传送指令用于在寄存器和存储器之间进行数

26、据的双向传输。的双向传输。n算术逻辑运算指令完成常用的算术与逻辑的运算,算术逻辑运算指令完成常用的算术与逻辑的运算,该类指令不但将运算结果保存在目的寄存器中,同该类指令不但将运算结果保存在目的寄存器中,同时更新时更新CPSRCPSR中的相应条件标志位。中的相应条件标志位。n比较指令不保存运算结果,只更新比较指令不保存运算结果,只更新CPSRCPSR中相应的条中相应的条件标志位。件标志位。 28TM28ARM处理器的指令系统数据处理指令包括数据处理指令包括 MOVMOV数据传送指令数据传送指令MVNMVN数据取反传送指令数据取反传送指令CMPCMP比较指令比较指令CMNCMN反值比较指令反值比较

27、指令TSTTST位测试指令位测试指令TEQTEQ相等测试指令相等测试指令ADDADD加法指令加法指令ADCADC带进位加法指令带进位加法指令SUBSUB减法指令减法指令SBCSBC带借位减法指令带借位减法指令29TM29ARM处理器的指令系统数据处理指令包括数据处理指令包括 RSBRSB逆向减法指令逆向减法指令RSCRSC带借位的逆向减法指令带借位的逆向减法指令ANDAND逻辑与指令逻辑与指令ORRORR逻辑或指令逻辑或指令EOREOR逻辑异或指令逻辑异或指令BICBIC位清除指令位清除指令EX:MOVEX:MOV条件条件SS目的寄存器,源操作数目的寄存器,源操作数MOVR1,R0;将寄存器将

28、寄存器R0的值传送到寄存器的值传送到寄存器R1BIC R0,R0,1011 ; 该指令清除该指令清除 R0 中的位中的位 0、1、和和 3,其余的位保持不变。,其余的位保持不变。30TM30ARM处理器的指令系统3 乘法指令与乘加指令乘法指令与乘加指令 ARM ARM微处理器支持的乘法指令与乘加指令共有微处理器支持的乘法指令与乘加指令共有6 6条,可分为条,可分为运算结果为运算结果为3232位和运算结果为位和运算结果为6464位两类,与前面的数据处理位两类,与前面的数据处理指令不同,指令中的所有操作数、目的寄存器必须为通用寄指令不同,指令中的所有操作数、目的寄存器必须为通用寄存器,不能对操作数

29、使用立即数或被移位的寄存器,同时,存器,不能对操作数使用立即数或被移位的寄存器,同时,目的寄存器和操作数目的寄存器和操作数1 1必须是不同的寄存器。必须是不同的寄存器。 MUL MUL 3232位乘法指令位乘法指令 MLAMLA3232位乘加指令位乘加指令 SMULLSMULL 6464位有符号数乘法指令位有符号数乘法指令 SMLALSMLAL 6464位有符号数乘加指令位有符号数乘加指令 UMULLUMULL 6464位无符号数乘法指令位无符号数乘法指令 UMLALUMLAL 6464位无符号数乘加指令位无符号数乘加指令31TM31ARM处理器的指令系统MLAMLA指令指令 MLA MLA指

30、令的格式为:指令的格式为:MLAMLA条件条件SS目的寄存器,操作数目的寄存器,操作数1 1,操作数,操作数2 2,操作数,操作数3 3MLAMLA指令完成将操作数指令完成将操作数1 1与操作数与操作数2 2的乘法运算,再将乘积加上操的乘法运算,再将乘积加上操作数作数3 3,并把结果放置到目的寄存器中,同时可以根据运算结,并把结果放置到目的寄存器中,同时可以根据运算结果设置果设置CPSRCPSR中相应的条件标志位。其中,操作数中相应的条件标志位。其中,操作数1 1和操作数和操作数2 2均为均为3232位的有符号数或无符号数。位的有符号数或无符号数。指令示例:指令示例:MLAS R0,R1,R2

31、,R3;R0 = R1 R2 + R3,同时设同时设置置CPSR中的相关条件标志位中的相关条件标志位32TM32ARM处理器的指令系统SMULLSMULL指令指令 SMULLSMULL指令的格式为:指令的格式为:SMULLSMULL条件条件SS目的寄存器目的寄存器LowLow,目的寄存器低目的寄存器低HighHigh,操作操作数数1 1,操作数,操作数2 2SMULLSMULL指令完成将操作数指令完成将操作数1 1与操作数与操作数2 2的乘法运算,并把结果的低的乘法运算,并把结果的低3232位放置到目的寄存器位放置到目的寄存器LowLow中,结果的高中,结果的高3232位放置到目的寄存位放置到

32、目的寄存器器HighHigh中,同时可以根据运算结果设置中,同时可以根据运算结果设置CPSRCPSR中相应的条件标中相应的条件标志位。其中,操作数志位。其中,操作数1 1和操作数和操作数2 2均为均为3232位的有符号数。位的有符号数。指令示例:指令示例:SMULL R0,R1,R2,R3 ;R0 =(R2 R3)的低的低32位位 ;R1 =(R2 R3)的高的高32位位 33TM33ARM处理器的指令系统4 程序状态寄存器访问指令程序状态寄存器访问指令 nARMARM微处理器支持程序状态寄存器访问指令,用于在微处理器支持程序状态寄存器访问指令,用于在程序状态寄存器和通用寄存器之间传送数据,程

33、序程序状态寄存器和通用寄存器之间传送数据,程序状态寄存器访问指令包括以下两条:状态寄存器访问指令包括以下两条:nMRS-MRS-程序状态寄存器到通用寄存器的数据传送指令程序状态寄存器到通用寄存器的数据传送指令nMSR-MSR-通用寄存器到程序状态寄存器的数据传送指令通用寄存器到程序状态寄存器的数据传送指令 34TM34ARM处理器的指令系统MRSMRS指令指令 MRSMRS指令的格式为:指令的格式为:MRSMRS条件条件 通用寄存器,程序状态寄存器(通用寄存器,程序状态寄存器(CPSRCPSR或或SPSRSPSR)MRSMRS指令用于将程序状态寄存器的内容传送到通用寄存器中。该指令用于将程序状

34、态寄存器的内容传送到通用寄存器中。该指令一般用在以下几种情况:指令一般用在以下几种情况:当需要改变程序状态寄存器的内容时,可用当需要改变程序状态寄存器的内容时,可用MRSMRS将程序状态寄将程序状态寄存器的内容读入通用寄存器,修改后再写回程序状态寄存器存器的内容读入通用寄存器,修改后再写回程序状态寄存器。当在异常处理或进程切换时,需要保存程序状态寄存器当在异常处理或进程切换时,需要保存程序状态寄存器的值,可先用该指令读出程序状态寄存器的值,然后保存。的值,可先用该指令读出程序状态寄存器的值,然后保存。指令示例:指令示例:MRSMRSR0R0,CPSRCPSR;传送传送CPSRCPSR的内容到的

35、内容到R0R0MRSMRSR0R0,SPSRSPSR;传送传送SPSRSPSR的内容到的内容到R0 R0 35TM35ARM处理器的指令系统5 加载加载/存储指令存储指令 ARM ARM微处理器支持加载微处理器支持加载/ /存储指令用于在寄存器和存储指令用于在寄存器和存储器之间传送数据,加载指令用于将存储器中的存储器之间传送数据,加载指令用于将存储器中的数据传送到寄存器,存储指令则完成相反的操作。数据传送到寄存器,存储指令则完成相反的操作。常用的加载存储指令如下:常用的加载存储指令如下: LDRLDR字数据加载指令字数据加载指令 LDRBLDRB字节数据加载指令字节数据加载指令 LDRHLDR

36、H半字数据加载指令半字数据加载指令 STRSTR字数据存储指令字数据存储指令 STRBSTRB字节数据存储指令字节数据存储指令 STRHSTRH半字数据存储指令半字数据存储指令36TM36ARM处理器的指令系统LDRLDR指令指令 LDRLDR指令的格式为:指令的格式为:LDRLDR条件条件 目的寄存器,目的寄存器, nLDRLDR指令用于从存储器中将一个指令用于从存储器中将一个3232位的字数据传送到位的字数据传送到目的寄存器中。该指令通常用于从存储器中读取目的寄存器中。该指令通常用于从存储器中读取3232位的字数据到通用寄存器,然后对数据进行处理。位的字数据到通用寄存器,然后对数据进行处理

37、。n当程序计数器当程序计数器PCPC作为目的寄存器时,指令从存储器作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。序流程的跳转。n该指令在程序设计中比较常用,且寻址方式灵活多该指令在程序设计中比较常用,且寻址方式灵活多样,请认真掌握。样,请认真掌握。 37TM37ARM处理器的指令系统LDRLDR指令指令 nLDR R0,R1 ;将存储器地址为将存储器地址为R1的字数据读入寄存器的字数据读入寄存器R0。nLDR R0,R1,R2;将存储器地址为将存储器地址为R1+R2的字数据读入寄存器的字数据读入寄存器R0。n

38、LDR R0,R1,8;将存储器地址为将存储器地址为R1+8的字数据读入寄存器的字数据读入寄存器R0。nLDR R0,R1,R2 !;!;将存储器地址为将存储器地址为R1+R2的字数据读入寄存器的字数据读入寄存器R0,并将新地址并将新地址R1R2写入写入R1。nLDR R0,R1,8 !;!;将存储器地址为将存储器地址为R1+8的字数据读入寄存器的字数据读入寄存器R0,并将新地址并将新地址R18写入写入R1。nLDR R0,R1,R2 ;将存储器地址为将存储器地址为R1的字数据读入寄存器的字数据读入寄存器R0,并并将新地址将新地址R1R2写入写入R1。nLDR R0,R1,R2,LSL2!;!

39、;将存储器地址为将存储器地址为R1R24的字数据读的字数据读入寄存器入寄存器R0,并将新地址并将新地址R1R24写入写入R1。nLDR R0,R1,R2,LSL2 ;将存储器地址为将存储器地址为R1的字数据读入寄存器的字数据读入寄存器R0,并将新地址并将新地址R1R24写入写入R1。 38TM38ARM处理器的指令系统6 批量数据加载批量数据加载/存储指令存储指令 nARMARM微处理器所支持批量数据加载微处理器所支持批量数据加载/ /存储指令可以一存储指令可以一次在一片连续的存储器单元和多个寄存器之间传送次在一片连续的存储器单元和多个寄存器之间传送数据,批量加载指令用于将一片连续的存储器中的

40、数据,批量加载指令用于将一片连续的存储器中的数据传送到多个寄存器,批量数据存储指令则完成数据传送到多个寄存器,批量数据存储指令则完成相反的操作。相反的操作。n常用的加载存储指令如下:常用的加载存储指令如下:nLDMLDM批量数据加载指令批量数据加载指令n STMSTM批量数据存储指令批量数据存储指令39TM39ARM处理器的指令系统LDMLDM(或或STMSTM)指令指令 nLDMLDM(或或STMSTM)指令的格式为:指令的格式为:nLDMLDM(或或STMSTM) 条件条件类型类型 基址寄存器基址寄存器 ! ,寄存,寄存器列表器列表 nLDMLDM(或或STMSTM)指令用于从由基址寄存器

41、所指示的一指令用于从由基址寄存器所指示的一片连续存储器到寄存器列表所指示的多个寄存器之片连续存储器到寄存器列表所指示的多个寄存器之间传送数据,该指令的常见用途是将多个寄存器的间传送数据,该指令的常见用途是将多个寄存器的内容入栈或出栈。内容入栈或出栈。 40TM40ARM处理器的指令系统LDMLDM(或或STMSTM)指令指令 类型类型 为以下几种情况:为以下几种情况:nIAIA每次传送后地址加每次传送后地址加1 1;nIBIB每次传送前地址加每次传送前地址加1 1;nDADA每次传送后地址减每次传送后地址减1 1;nDBDB每次传送前地址减每次传送前地址减1 1;nFDFD满递减堆栈;满递减堆

42、栈;nEDED空递减堆栈;空递减堆栈;nFAFA满递增堆栈;满递增堆栈;nEAEA空递增堆栈;空递增堆栈;41TM41ARM处理器的指令系统LDMLDM(或或STMSTM)指令指令 ! 为可选后缀,若选用该后缀,则当数据传送完毕之后,将最为可选后缀,若选用该后缀,则当数据传送完毕之后,将最后的地址写入基址寄存器,否则基址寄存器的内容不改变。后的地址写入基址寄存器,否则基址寄存器的内容不改变。基址寄存器不允许为基址寄存器不允许为R15R15,寄存器列表可以为寄存器列表可以为R0R0R15R15的任意组合的任意组合。 为可选后缀,当指令为为可选后缀,当指令为LDMLDM且且寄存器列表中包含寄存器列

43、表中包含R15R15,选用该选用该后缀时表示:除了正常的数据传送之外,还将后缀时表示:除了正常的数据传送之外,还将SPSRSPSR复制到复制到CPSRCPSR。同时,该后缀还表示传入或传出的是用户模式下的寄存器,同时,该后缀还表示传入或传出的是用户模式下的寄存器,而不是当前模式下的寄存器。而不是当前模式下的寄存器。指令示例:指令示例:STMFD R13!,R0,R4-R12,LR;将寄存器列表将寄存器列表中的寄存器(中的寄存器(R0,R4到到R12,LR)存入堆栈。存入堆栈。LDMFD R13!,R0,R4-R12,PC;将堆栈内容恢将堆栈内容恢复到寄存器(复到寄存器(R0,R4到到R12,L

44、R)。)。42TM42ARM处理器的指令系统7 数据交换指令数据交换指令 ARMARM微处理器所支持数据交换指令能在存储器和寄存器之间交换数微处理器所支持数据交换指令能在存储器和寄存器之间交换数据。数据交换指令有如下两条:据。数据交换指令有如下两条: SWPSWP字数据交换指令字数据交换指令 SWPBSWPB字节数据交换指令字节数据交换指令1 1、SWPSWP指令指令SWPSWP指令的格式为:指令的格式为:SWPSWP条件条件 目的寄存器,源寄存器目的寄存器,源寄存器1 1, 源寄存器源寄存器22SWP SWP R0R0,R1R1,R2 R2 ;将将R2R2所指向的存储器中的字数据传送到所指向

45、的存储器中的字数据传送到R0R0,同时将同时将R1R1中的字数据传送到中的字数据传送到R2R2所指向的存储单元。所指向的存储单元。43TM43ARM处理器的指令系统8 移位指令(操作)移位指令(操作) ARM ARM微处理器内嵌的桶型移位器(微处理器内嵌的桶型移位器(Barrel ShifterBarrel Shifter),),支持数据的各种移位操作,移位操作在支持数据的各种移位操作,移位操作在ARMARM指令集中指令集中不作为单独的指令使用,它只能作为指令格式中是一不作为单独的指令使用,它只能作为指令格式中是一个字段,在汇编语言中表示为指令中的选项。个字段,在汇编语言中表示为指令中的选项。

46、例如,数据处理指令的第二个操作数为寄存器时,就可例如,数据处理指令的第二个操作数为寄存器时,就可以加入移位操作选项对它进行各种移位操作。移位操以加入移位操作选项对它进行各种移位操作。移位操作包括如下作包括如下6 6种类型,种类型,ASL和和LSL是等价的,可以自由是等价的,可以自由互换:互换:MOV R0,R1,LSL#2;将将R1中的内容左移两位后传送中的内容左移两位后传送到到R0中。中。44TM44ARM处理器的指令系统桶型移位器桶型移位器DestinationCF0DestinationCFLSL : Logical Left ShiftASR: Arithmetic Right Shi

47、ft(无符号数)乘2除2,并保留符号位DestinationCF.0DestinationCFLSR : Logical Shift RightROR: Rotate Right(无符号数)除2位循环 DestinationRRX: Rotate Right Extended位轮换,从 CF到MSB都参与操作CF45TM45ARM处理器的指令系统 寄存器寄存器, 可选择是否增加移位操作可选择是否增加移位操作.n移位值可以是:n 5 bit 无符号整数n放在另一个寄存器的低字节n用于常数乘法 立即数立即数n8 bit ,大小范围0-255。n右移偶数位n允许直接加载32-bit 常数到寄存器中。

48、结果结果操作数操作数1BarrelShifter操作数操作数2ALU桶型移位器桶型移位器:第二个操作数第二个操作数46TM46ARM处理器的指令系统9 协处理器指令协处理器指令 ARM ARM微处理器可支持多达微处理器可支持多达1616个协处理器,用于各种协处理操作个协处理器,用于各种协处理操作,在程序执行的过程中,每个协处理器只执行针对自身的协处,在程序执行的过程中,每个协处理器只执行针对自身的协处理指令,忽略理指令,忽略ARMARM处理器和其他协处理器的指令。处理器和其他协处理器的指令。 ARM ARM的协处理器指令主要用于的协处理器指令主要用于ARMARM处理器初始化处理器初始化ARMA

49、RM协处理器的协处理器的数据处理操作,以及在数据处理操作,以及在ARMARM处理器的寄存器和协处理器的寄存处理器的寄存器和协处理器的寄存器之间传送数据,和在器之间传送数据,和在ARMARM协处理器的寄存器和存储器之间传协处理器的寄存器和存储器之间传送数据。送数据。ARMARM协处理器指令包括以下协处理器指令包括以下5 5条:条: CDPCDP 协处理器数操作指令协处理器数操作指令 LDCLDC协处理器数据加载指令协处理器数据加载指令 STCSTC协处理器数据存储指令协处理器数据存储指令 MCRMCRARMARM处理器寄存器到协处理器寄存器的数据传送指令处理器寄存器到协处理器寄存器的数据传送指令

50、 MRCMRC协处理器寄存器到协处理器寄存器到ARMARM处理器寄存器的数据传送指令处理器寄存器的数据传送指令47TM47ARM处理器的指令系统CDPCDP指令指令 CDP CDP指令的格式为:指令的格式为:CDPCDP条件条件 协处理器编码,协处理器操作码协处理器编码,协处理器操作码1 1,目的寄存器,源寄,目的寄存器,源寄存器存器1 1,源寄存器,源寄存器2 2,协处理器操作码,协处理器操作码2 2。CDPCDP指令用于指令用于ARMARM处理器通知处理器通知ARMARM协处理器执行特定的操作协处理器执行特定的操作, ,若协处若协处理器不能成功完成特定的操作,则产生未定义指令异常。其中理器

51、不能成功完成特定的操作,则产生未定义指令异常。其中协处理器操作码协处理器操作码1 1和协处理器操作码和协处理器操作码2 2为协处理器将要执行的操为协处理器将要执行的操作,目的寄存器和源寄存器均为协处理器的寄存器,指令不涉作,目的寄存器和源寄存器均为协处理器的寄存器,指令不涉及及ARMARM处理器的寄存器和存储器。处理器的寄存器和存储器。指令示例:指令示例:CDP P3,2,C12,C10,C3,4 ;该指令完成协处理器该指令完成协处理器P3的初的初始化始化 48TM48ARM处理器的指令系统10 异常产生指令异常产生指令 ARMARM微处理器所支持的异常指令有如下两条:微处理器所支持的异常指令

52、有如下两条: SWISWI 软件中断指令软件中断指令 BKPT BKPT 断点中断指令断点中断指令1 1、SWISWI指令指令SWISWI指令的格式为:指令的格式为:SWISWI条件条件 24 24位的立即数位的立即数SWISWI指令用于产生软件中断,以便用户程序能调用操作系统的系统指令用于产生软件中断,以便用户程序能调用操作系统的系统例程。例程。SWI 0 x02 ;该指令调用操作系统编号位该指令调用操作系统编号位02的系的系统例程。统例程。 49TM49ARM处理器的指令系统10 异常产生指令异常产生指令 BKPTBKPT指令指令BKPT BKPT 指令的格式为:指令的格式为:BKPT 1

53、6BKPT 16位的立即数位的立即数BKPTBKPT指令产生软件断点中断,可用于程序的调试。指令产生软件断点中断,可用于程序的调试。50TM50ARM处理器的指令系统Thumb指令集指令集n为兼容数据总线宽度为为兼容数据总线宽度为16位的应用系统,位的应用系统,ARM体系体系结构除了支持执行效率很高的结构除了支持执行效率很高的32位位ARM指令集以外指令集以外,同时支持,同时支持16位的位的Thumb指令集。指令集。nThumb指令集是指令集是ARM指令集的一个子集,允许指令指令集的一个子集,允许指令编码为编码为16位的长度。位的长度。n与等价的与等价的32位代码相比较,位代码相比较,Thum

54、b指令集在保留指令集在保留32代码优势的同时,大大的节省了系统的存储空间。代码优势的同时,大大的节省了系统的存储空间。 51TM51ARM处理器的指令系统015310ADDS r2,r2,#1ADD r2,#132-bit ARM 指令16-bit Thumb 指令对于由编译器产生的大部分指令:对于由编译器产生的大部分指令:n没有条件执行n源、目的寄存器必须相同n仅能使用低寄存器n常数大小有限制n不能使用在线移位器ThumbnThumb 是是16-bit 指令集指令集n代码密度优化 (总代码大小约为ARM指令的65%)n使用窄总线存储器时可以大大提高性能。n是 ARM 指令集的一个子集。n核存

55、在一个执行状态核存在一个执行状态 Thumb状态状态nARM和Thumb之间切换使用BX 指令52TM52ARM处理器的指令系统n使用使用Branch Exchange 指令来完成指令来完成 InterworkingnBX Rn; Thumb 状态下的状态下的Bx指令指令nBX Rn; ARM状态下的状态下的Bx指令指令n也可以只是执行一个绝对跳转,无须状态更换。也可以只是执行一个绝对跳转,无须状态更换。ARM / Thumb InterworkingRnBX跳转的地址跳转的地址31013101ARM / Thumb 选择选择0 - ARM 状态状态1 - Thumb 状态状态053TM53A

56、RM处理器的指令系统Thumb指令及应用指令及应用 所有的所有的Thumb指令都有对应的指令都有对应的ARM指令,而且指令,而且Thumb的编程模型也对应于的编程模型也对应于ARM的编程模型,在应的编程模型,在应用程序的编写过程中,只要遵循一定调用的规则,用程序的编写过程中,只要遵循一定调用的规则,Thumb子程序和子程序和ARM子程序就可以互相调用。子程序就可以互相调用。 当处理器在执行当处理器在执行ARM程序段时,称程序段时,称ARM处理器处处理器处于于ARM工作状态,当处理器在执行工作状态,当处理器在执行Thumb程序段时程序段时,称,称ARM处理器处于处理器处于Thumb工作状态。工作

57、状态。 54TM54ARM处理器的指令系统Thumb指令及应用指令及应用 与与ARMARM指令集相比较,指令集相比较,ThumbThumb指令集中的数据处理指指令集中的数据处理指令的操作数仍然是令的操作数仍然是3232位,指令地址也为位,指令地址也为3232位,但位,但ThumbThumb指令集为实现指令集为实现1616位的指令长度,舍弃了位的指令长度,舍弃了ARMARM指令指令集的一些特性,如大多数的集的一些特性,如大多数的ThumbThumb指令是无条件执行指令是无条件执行的,而几乎所有的的,而几乎所有的ARMARM指令都是有条件执行的;大多指令都是有条件执行的;大多数的数的ThumbThumb数据处理指令的目的寄存器与其中一个源数据处理指令的目的寄存器与其中一个源寄存器相同。寄存器相同。 由于由于ThumbThumb指令的长度为指令的长度为1616位,即只用位,即只用ARMARM指令一半指令一半的位数来实现同样的功能,所以,要实现特定的程序的位数来实现同样的功能,所以,要实现特定的程序功

温馨提示

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

评论

0/150

提交评论