PPT-ARM指令集_第1页
PPT-ARM指令集_第2页
PPT-ARM指令集_第3页
PPT-ARM指令集_第4页
PPT-ARM指令集_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

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

文档简介

1、0:361第三章 ARM指令集3.1 ARM指令集概述3.2 ARM寻址方式3.3 ARM指令详细介绍 0:3623.1 ARM指令集概述ARM指令集是32位的,程序的启动都是从ARM指令集开始。所有的ARM指令集都可以是有条件执行的。本节从以下三个方面介绍:3.1.1 指令集编码 3.1.2 条件执行 3.1.3 指令分类及指令格式 0:3633.1.1ARM指令集编码ARM指令集是以32位二进制编码的方式给出的,大部分的指令编码中定义了第一操作数、第二操作数、目的操作数、条件标志影响位以及每条指令所对应的不同功能实现的二进制位。每条32位ARM指令都具有不同的二进制编码方式,和不同的指令功

2、能相对应 。0:364判断方法:左判断方法:左/右移偶数位,是否可以得到一个不大于右移偶数位,是否可以得到一个不大于0XFF的立即数的立即数判断0X3FF0X3FC0:3683.1.2条件执行 ARM指令根据CPSR中的条件位自动判断是否执行指令,在条件满足时,指令执行,否则指令被忽略。 在ARM的指令编码表中,统一占用编码的最高四位31:28来表示“条件码”(即“cond”)。 0:369条件码标志:条件码标志:N、Z、C、V N在结果是带符号的二进制补码情况下,如果结果为负数,则在结果是带符号的二进制补码情况下,如果结果为负数,则N=1;如;如果结果为非负数,则果结果为非负数,则N=0。Z

3、如果结果为如果结果为0,则,则Z=1;如果结果为非;如果结果为非0,则,则Z=0。C它的设置分以下几种情况;它的设置分以下几种情况;对于加法指令(包括比较指令对于加法指令(包括比较指令CMN),如果产生进位,则),如果产生进位,则C=1;否则;否则C=0。对于减法指令(包括比较指令对于减法指令(包括比较指令CMP),如果产生借位,则),如果产生借位,则C=0;否则;否则C=1。对于有移位操作的非加减法指令,对于有移位操作的非加减法指令,C为移位操作中最后移出位的值。为移位操作中最后移出位的值。对于其他指令,对于其他指令,C通常不变。通常不变。V它的设置也分为以下两种情况:它的设置也分为以下两种

4、情况:对于加减法指令,在操作数和结果是带符号的整数时,如果发生溢出,则对于加减法指令,在操作数和结果是带符号的整数时,如果发生溢出,则V=1;如果无溢出发生,则;如果无溢出发生,则V=0。对于其他指令,对于其他指令,V通常不发生变化。通常不发生变化。0:3610条件域表1条件码后缀标 志含 义0000EQZ置位相等0001NEZ清零不等0010CSC置位无符号=0011CCC清零无符号1001LSC清零Z置位无符号=1011LTN不等于V带符号1101LEZ置位或N不等于V带符号数=1110AL忽略无条件执行 1111 NV 无 未使用0:36123.1.3指令分类及指令格式 ARM指令集可以

5、分为六大类,分别为数据处理指令、Load/Store指令、跳转指令、程序状态寄存器处理指令、协处理器指令和异常产生指令。 0:3613指令格式使用举例:LDR R0,R1;读取R1地址上的存储单元内容, 执行条件ALBEQ DATAEVEN;条件执行分支指令,执行条件 EQ,即相等则跳转到DATAEVENADDS R2,R1,#1;加法指令,R2R1+1,影响CPSR 寄存器(S)SUBNES R2,R1,#0 x20;条件执行的减法运算,执行 条件NE,R2 R1-0 x20, 影响CPSR寄存器(S)0:36143.2 ARM寻址方式3.2.1 3.2.1 立即寻址立即寻址3.2.2 3.

6、2.2 寄存器寻址寄存器寻址3.2.3 3.2.3 寄存器间接寻址寄存器间接寻址3.2.4 3.2.4 寄存器偏移寻址寄存器偏移寻址 3.2.5 3.2.5 基址加偏址寻址基址加偏址寻址 3.2.6 3.2.6 堆栈寻址堆栈寻址 3.2.7 3.2.7 块拷贝寻址块拷贝寻址 3.2.8 3.2.8 相对寻址相对寻址3.2.9 3.2.9 多寄存器寻址多寄存器寻址0:36153.2.1 3.2.1 立即寻址立即寻址F立即寻址也叫立即数寻址,这是一种特殊的寻址方立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也式,操作数本身就在指令中给出,只要取出指令也就取到

7、了操作数,这个操作数被称为立即数,对应就取到了操作数,这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。例如以下指令:的寻址方式也就叫做立即寻址。例如以下指令:一 ADDR0,R0,1/*R0R01*/一 ADDR0,R0,0 x3f/*R0R00 x3f*/F 在以上两条指令中,第二个源操作数即为立即数,在以上两条指令中,第二个源操作数即为立即数,要求以要求以“”为前缀,对于以十六进制表示的立即为前缀,对于以十六进制表示的立即数,还要求在数,还要求在“”后加上后加上“0 x”0 x”。0:36163.2.23.2.2寄存器寻址寄存器寻址寄存器寻址就是利用寄存器中的数值作为操作寄存器寻址

8、就是利用寄存器中的数值作为操作数,这种寻址方式是一种执行效率较高的数,这种寻址方式是一种执行效率较高的寻址方式。以下指令:寻址方式。以下指令: ADDR0,R1,R2/*R0R1R2*/ 该指令的执行效果是将寄存器该指令的执行效果是将寄存器R1R1和和R2R2的内容相的内容相加,其结果存放在寄存器加,其结果存放在寄存器R0R0中中。0:36173.2.3.2.3 3寄存器偏移寻址寄存器偏移寻址第二操作数为寄存器型的移位操作第二操作数为寄存器型的移位操作 在ARM指令的数据处理指令中参与操作的第二操作数为寄存器型时,在执行寄存器寻址操作时,可以选择是否对第二操作数进行移位,即Rm,其中Rm称为第

9、二操作数寄存器,用来指定移位类型(LSL,LSR,ASL,ASR,ROR或RRX)和移位位数。移位位数可以是5位立即数(#)或寄存器(Rs)。在指令执行时将移位后的内容作为第二操作数参与运算。例如指令: ADD R3,R2,R1,LSR #2 ;R3R2 + R140:3618第二操作数移位方式第二操作数移位方式 LSL:逻辑左移,空出的最低有效位用0填充。LSR:逻辑右移,空出的最高有效位用0填充。ASL:算术左移,由于左移空出的有效位用0填充,因此 它与LSL同义。ASR:算术右移,算术移位的对象是带符号数,移位过程中必须保持操作数的符号不变。如果源操作数是正数,空出的最高有效位用0填充,

10、如果是负数用1填充。 ROR:循环右移,移出的字的最低有效位依次填入空出的最高有效位。RRX:带扩展的循环右移。将寄存器的内容循环右移1位,空位用原来C标志位填充。0:3619寄存器寻址 0:3620第二操作数的移位位数第二操作数的移位位数 移位位数可以用立即数方式或者寄存器方式给出,如下所示:ADD R3,R2,R1,LSR #2 ;R3 R2 + R14ADD R3,R2,R1,LSR R4 ;R3 R2 + R12R4寄存器R1的内容分别逻辑右移2位、R4位(亦即R14、R12R4),再与寄存器R2的内容相加,结果放入R3中。 0:36213.2.4寄存器间接寻址 寄存器间接寻址就是以寄

11、存器中的值作为操作数的地址,而操作数本身存放在存储器中。例如以下指令: LDRR0,R1/*R0R1*/ STRR0,R1/*R1R0*/ 第一条指令将以R1的值为地址的存储器中的数据传送到R0中。第二条指令将R0的值传送到以R1的值为地址的存储器中。0:36223.2.5基址加偏址寻址 基址变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用于访问某基地址附近的地址单元。采用变址寻址方式的指令又可以分为以下几种形式:前变址模式前变址模式:LDR R0,R1,4;R0R14自动变址模式自动变址模式:LDR R0,R

12、1,4!;R0R14、R1R14后变址模式后变址模式:LDR R0,R1 ,4;R0R1、R1R140:3623基址加偏址寻址基址寄存器的地址偏移可以是一个立即数,也可以是另一个寄存器,并且在加到基址寄存器前还可以经过移位操作,如下所示:LDR r0,r1,r2;r0mem32r1+r2LDR r0,r1,r2,LSL #2;r0r1+r2*4但常用的是立即数偏移的形式,地址偏移为寄存器形式的指令很少使用。0:3624传送数据类型 传送数据可以是有符号、无符号的8位、16位半字和32位字。 相对应的在指令中增加一个字母表示数据类型:B:选择字节操作H:选择半字操作不加则选择字操作LDRB R0

13、,R1;R0mem8R1LDRH R1,R0,#20;R1mem16R0+200:36253.2.6堆栈寻址F堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。F当堆栈指针指向最后压入堆栈的数据时,称为满堆满堆栈栈(Full Stack),而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈空堆栈(Empty Stack)。F即访问存储器时,存储器的地址向高地址方向生长,称为递增堆栈递增堆栈(ascending stack)。 存储器的地址向低地址方向生长,称为递减堆栈递减堆栈

14、(descending stack)。 0:3626堆栈寻址四种类型的堆栈工作方式 FFA满递增堆栈满递增堆栈:堆栈指针指向最后压入的数据,且由低地址向高地址生成。FFD满递减堆栈满递减堆栈:堆栈指针指向最后压入的数据,且由高地址向低地址生成。FEA空递增堆栈空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。FED空递减堆栈空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成STMFD SP!,R1-R7,LRLDMFA SP!,R1-R7,LR0:36293.2.7块拷贝寻址F块 拷 贝 寻 址 是 多 寄 存 器 传 送 指 令LDM/STM

15、的寻址方式。LDM/STM指令可以把存储器中的一个数据块加载到多个寄存器中,也可以把多个寄存器中的内容保存到存储器中。寻址操作中的寄存器可以是R0-R15这16个寄存器的子集或是所有寄存器。FLDM/STM指令依据其后缀名的不同其寻址的方式也有很大不同,见下表。0:36300:3631IA操作完成后地址递增IB地址先增而后完成操作DA操作完成后地址递增DB地址先减而后完成操作FD满递减堆栈ED空递减堆栈FA满递增堆栈EA空递增堆栈0:3632ARM指令:STMFD SP! R1-R7,LR;入栈LDMFD SP! R1-R7,LR;出栈Thumb指令:PUSH R1-R7,LR;入栈POP R

16、1-R7,LR;出栈0:36333.2.7相对寻址 与基址变址寻址方式相类似,相对寻址以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。以下程序段完成子程序的调用和返回,跳转指令BL采用了相对寻址方式:BLNEXT;跳转到子程序 ;NEXT处执行NEXTMOVPC,LR;从子程序返回 0:36343.3 3.3.1 数据处理指令3.3.2 Load/Store指令3.3.3 程序状态寄存器与通用寄存器之间 的传送指令3.3.4 转移指令3.3.5 异常中断指令3.3.6 协处理器指令0:36353.3.1 数据处理指令ARM的数据处理指令主要完成

17、寄存器中数据的算术和逻辑运算操作。 数据处理指令分类 数据处理指令二进制编码 数据处理指令表0:3636数据处理指令分类数据处理指令根据指令实现处理功能可分为以下六类: 数据传送指令; 算术运算指令; 逻辑运算指令; 比较指令; 测试指令; 乘法指令。0:3637数据处理指令二进制编码数据处理指令的二进制编码如下(前5类格式):0:3638灵活的第二操作数两种可能形式:1、#immed_8r:常量必须对应于8位位图在32位字中被循环偶数位(0、2、4、8、28、30)后的值。合法常量:0 xFF、0 x104、0 xFF0、0 xF000000F非法常量:0 x101、0 x102、0 xFF

18、003、0 xF000001F2、Rm ,shift:Rm为存储第二操作数数据的RAM寄存器,可用以下方法对寄存器中的位图进行移位。type Rs ASR、LSL、LSR、ROR中的一种中的一种0:3639数据处理指令指令表操作码24:21助记符意义效果0000AND逻辑位与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

19、-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 = Op21110BIC位清零Rd = Rn AND NOT Op21111MVN求反Rd = NOT Op20:36401、ADD、SUB、 RSB、 ADC、 SBC、RSC加、减、反减,不带进位和带进位条件码标志:条件码标志:若指定S,那么这些

20、指令根据结果,更新NZCV。R15的使用:的使用:若将R15作为Rn使用,其值是指令的地址加8若使用R15作为Rd,则:l执行转移到结果对应的地址l若使用后缀“S”,则将当前的SPSR拷贝到CPSR。可以使用这一点从异常返回。(在用户模式或系统模式下当将R15作为Rd使用时,不要使用后缀“S”)l在有寄存器控制移位的任何数据处理指令中,不能将R15作为Rd或任何操作数来使用。0:3641例子:例子:ADD R2,R2,R3SUBS R8,R6,#240;根据结果设置标志RSB R4,R4,#1280 ;1280R4ADCHI R11,R0,R3;只有标志C置位且标志Z清零时才执行RSCLES

21、R0,R5,R0,LSL R4 ;有条件执行,设置标志错例:错例:RSCLESR0,R15,R0,LSL R4;R15不允许与被控制移位的寄存器一起使用0:3642多个字节算术运算举例:R2,R3中的64位整数与R0,R1中的64位整数相加,结果放在R4,R5中:ADDS R4,R0,R2;加低有效位ADC R5,R1,R3;加高有效位96位减法举例:SUBS R3,R6,R9SBCS R4,R7,R10SBC R5,R8,R110:3643AND、ORR、EOR、BIC逻辑与、或、异或、位清零条件码标志:条件码标志:若指定S,则这些指令将:1)根据结果更新标志N、Z2)在计算Operand2

22、时更新标志C3)不影响标志VR15的使用:的使用:同前0:3644例子:例子:AND R9,R2,#0 xFF00ORREQ R2,R0,R5;Z值位则或操作EORS R0,R0,R3,ROR R6BICNES R8,R10,R0,RRX;Z清零则操作位清零,同时值位CPSR相应位错例:错例:EORS R15,R10,R0,ROR R6 ;R15不允许与被控制移位的寄存器一起出现0:3645MOV和MVN(传送和传送非)条件码标志:条件码标志:若指定S,则这些指令将:1)根据结果更新标志N、Z2)在计算Operand2时更新标志C3)不影响标志VR15的使用:的使用:同前0:3646例子:例子

23、:MOV R5,R2MVNNE R11,#0 xF00000B;Z清零则操作MOVS R0,R0,ASR R3错例:错例:MVN R15,R3,ASR R0;R15不允许与被控制移位的寄存器一起出现0:3647CMP和CMN(比较和比较反值)用法:用法:这些指令将寄存器的值与Operand2进行比较。它们根据结果更新条件标志码,但结果不放到任何寄存器中CMP:根据Rn - Op2设置条件码,结果丢弃CMN:根据Rn + Op2设置条件码,结果丢弃条件码标志:条件码标志:根据结果更新条件码NZCVR15的使用:的使用:若将R15用作Rn,则使用的值是指令的地址加8。在有寄存器控制移位的任何数据处

24、理指令中,必能将R15用于任何操作。0:3648TST和TEQ(测试和测试相等)句法:句法:TST cond Rn,Operand2TEQ cond Rn,Operand2用法:用法:TST:对Rn的值和Operand2的值进行按位“与”操作,设置条件码,丢弃结果TEQ:对Rn的值和OPerand2的值进行按位“异或”操作,设置条件码,丢弃结果条件码设置和条件码设置和R15的使用:的使用:与前相同0:3649乘法指令:二进制编码:二进制编码:31 28 27 24 23 2120 19 16 15 12 11 87 4 3 0cond 0000 mul S Rd/RdHi Rn/RdLoRs1

25、001Rm乘法指令乘法指令操作码23:21 助记符意义效果000MUL乘(32位结果)Rd(RmRs)31:0001MLA乘累加( 32位结果)Rd(RmRs+Rn)31:0100UMULL无符号数长乘RdHi:RdLoRmRs101UMLAL无符号长乘累加RdHi:RdLo+=RmRs110SMULL有符号数长乘RdHi:RdLoRmRs111SMLAL 有符号数长乘累加 RdHi:RdLo+=RmRs0:3650MUL和MLA(乘法和乘加)句法:句法:MUL cond S Rd,Rm,RsMLA cond S Rd,Rm,Rs,RnR15不能用作不能用作Rd、Rm、Rs、Rn。Rn不能与不

26、能与Rm相同。相同。条件标志码:条件标志码:若指定S,则:1)根据结果更新标志N和Z2)不影响标志V3)在ARM4v及以前版本中C不可靠4)在ARM5v及以后版本中不影响标志C0:3651 例子:例子:MUL R10,R2,R5MLA R10,R2,R1,R5MULS R0,R2,R2错例:错例:MUL R15,R1,R30:3652UMULL、UMLAL、SMULL、SMLAL(无符号和带符号长整数乘法和乘加,结果为64位)句法:句法:Op cond S RdLo,RdHi,Rm,Rs其中:RdLo,RdHi:ARM结果寄存器。对于UMLAL和SMLAL,用于保存加法值 Rm,Rs:操作数寄

27、存器0:3653SMULxy、SMLAxy、SMULWy、SMLAWy、SMLALxySMULxy(带符号乘法 16位16位,结果为32位)句法:句法:SMUL cond Rd,Rm,Rs其中: :B或T,B意味着使用Rm的低端15:0 T意味着使用高端31:16 : B或T,B意味着使用Rs的低端15:0 T意味着使用高端31:16 Rd :结果寄存器Rm,Rs :乘数寄存器SMLAxy(带符号乘加 16位16位,加法为32位)0:3654SMULWy(带符号乘 32位16位,结果为32位)句法:句法:SMULW cond Rd,Rm,RsSMLAWy(带符号乘加 32位16位,加法为32位

28、)句法:句法:SMLAW cond Rd,Rm,RsSMLALLxy (带符号加 16位 16位 加法为64位)句法:句法:SMLALL cond RdLo,RdHi,Rm,Rs0:36553.3.2 Load/Store指令 ARM的数据存取指令Load/Store是唯一用于寄存器和存储器之间进行数据传送的指令。ARM指令集中有三种基本的数据存取指令: 单寄存器的存取指令(LDR,STR) 多寄存器存取指令(LDM,STM) 单寄存器交换指令(SWP) 0:3656单寄存器的存取指令 单寄存器存取指令是ARM在寄存器和存储器间传送单个字节和字的最灵活方式。根据传送数据的类型不同,单个寄存器存

29、取指令又可以分为以下两类: 单字和无符号字节的数据传送指令 半字和有符号字节的数据传送指令0:3657单字和无符号字节的数据传送指令这一类数据传送指令的编码格式如下:单字和无符号字节数据传送指令的二进制编码0:3658单字和无符号字节的数据传送指令这一类数据传送指令的汇编格式如下: 前变址格式LDR|STR B Rd, Rn, ! 后变址格式LDR|STR B T Rd, Rn, 相对PC的形式LDR|STR B Rd, LABEL T:特权模式下使用,在用户模式下不可用。存储系统看 成是用户模式下的状态,不能和前索引偏移一起使用0:3659半字和有符号字节的数据传送指令这一类数据传送格式的二

30、进制编码如下:0:3660半字和有符号字节的数据传送指令这一类数据传送指令的汇编格式如下: 前变址格式LDR|STR H|SH|SB Rd, Rn, ! 后变址格式LDR|STR H|SH|SB Rd, Rn, 式中是#或#Rm;H|SH|SB选择传送数据类型;其它部分的汇编器格式与传送字和无符号字节相同。0:3661说明:说明:SH:带符号的半字H :无符号的半字SB:带符号的字节半字传送的地址对准:半字传送的地址对准:半字传送的地址必须是偶数。例:例:LDREQSH R11,R6;(有条件的)R11R6,加载16位半字,带符号扩展到32位LDRSB R6,constf;加载位于标号cons

31、tf地址中的字节,带符号扩展STRH R4,R0,R1!;R4R0+R1,存储最低的有效半字到R0+R1地址开始的两个字节,地址回写到R00:3662LDR和和STR双字双字加载两个相邻的寄存器和存储两个相邻的寄存器,64位双字。句法:句法:opcondD Rd,RnopcondD Rd,Rn,offset!opcondD Rd,labelopcondD Rd,Rn,offset其中:Rd加载或存储寄存器其中一个,另一个是R(d+1)。 Rd必须是偶数寄存器,且不是R14 Rn 除非指令为零偏移,或不带回写的前索引,否 则,Rn不允许与Rd和R(d+1)相同0:3663例句:LDRD R6,R

32、11LDRMID R4,R7,R2STRD R4,R9,#24STRD R0,R9,R2!LDRD R1,R6STRD R14,R9,#36STRD R2,R3,R60:3664多寄存器存取指令LDM/STM多寄存器传送指令可以用一条指令将16个可见寄存器(R0R15)的任意子集合(或全部)存储到存储器或从存储器中读取数据到该寄存器集合中。与单寄存器存取指令相比,多寄存器数据存取可用的寻址模式更加有限。多寄存器存取指令的汇编格式如下:LDM/STM Rn!, 0:3665多寄存器存取指令多寄存器存取指令的二进制编码如下:0:3666LDM/STM Rn!, add modeIA、IB、DA、D

33、B、FD、ED、FA、EARn基址寄存器,装有传送数据的初始地址,Rn不允许是R15registers存储寄存器列表。不允许在用户模式或系统模式下使用,两种目的:1)LDM且reglist中包含PC(R15),那么除了正常的多寄存器传送外,将SPSR也拷贝到CPSR中。仅在异常模式下使用。2)数据传入或传出的是用户模式的寄存器,而不是当前模式的寄存器0:3667非字对准地址:非字对准地址:这些指令忽略地址的位1:0。例句:例句:LDMIAR8,R0,R2,R9STMDBR1!,R3-R6,R11,R12STMFDR13!,R0,R4-R7,LRLDMFDR13!,R0,R4-R7,PCSTMI

34、AR5!,R5,R4,R9LDMDAR2,0:3668单寄存器交换指令(SWP)其二进制编码格式如下:其汇编格式如下:SWP B Rd,Rm,Rn 例句:例句:SWPB R1,R1,R0 交换字节,将R0中的字节数据读取到R1中,同时将R1中的数据写入到R0中SWP R1,R2,R3 交换字节数据,将R3中的数据读取到R1中,同时将R2中的数据写入到R3中0:36693.3.3程序状态寄存器与通用寄存器之间的传送指令ARM指令中有两条指令,用于在状态寄存器和通用寄存器之间传送数据。修改状态寄存器一般是通过“读取修改写回”三个步骤的操作来实现的。 这两条指令分别是: 状态寄存器到通用寄存器的传送

35、指令(MRS) 通用寄存器到状态寄存器的传送指令(MSR) 0:3670MRS MRS的二进制编码如下:其汇编格式如下:MRS Rd,CPSR|SPSR 0:3671MSR MSR的二进制编码如下:其汇编格式如下:MSR CPSR_f | SPSR_f,#MSR CPSR_ | SPSR_,Rm 0:3672fieldc控制域屏蔽字节(PSR7:0)x扩展域屏蔽字节(PSR15:8)s状态域屏蔽字节(PSR23:16)f标志域屏蔽字节(PSR31:24)0:36733.3.4转移指令ARM的转移指令可以从当前指令向前或向后的32MB的地址空间跳转,根据完成的功能它可以分为以下4种 : B 转移

36、指令 BL 带链接的转移指令 BX 带状态切换的转移指令 BLX 带链接和状态切换的转移指令 0:3674转移和转移链接指令(B,BL) 转移指令B在程序中完成简单的跳转指令,可以跳转到指令中指定的目的地址。BL指令完全象转移指令一样地执行转移,同时把转移后面紧接的一条指令的地址保存到链接寄存器LR(R14)。 二进制编码如下:汇编格式如下:BL 0:3675转移交换和转移链接交换(BX,BLX) 这些指令用于支持Thumb(16位)指令集的ARM芯片,程序可以通过这些指令完成处理器从ARM状态到Thumb状态的切换。类似的Thumb指令可以使处理器切换回32位ARM指令。 二进制编码如下:汇编格式如下:1: BLX Rm2: BLX 0:3676说明:BX格式中:Rm的第0位拷贝到CPSR中的T位,31:1位移入PC。若Rm0=1,切换到Thumb状态,Rm最低位清0,从Rm开始执行;若Rm0=0,将Rm1位清0,从Rm开始执行。BLX格式中:将指令中有符号的24位偏移量用符号扩展为32位,然后左移2位形成偏移,然后加载到PC中,把H位加到目标地址的第1位,使得目标指令选择奇数的半字地址,执行Thumb指令。(该指令转移出一定是Thumb指

温馨提示

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

评论

0/150

提交评论