第4章 ARM指令集系统(1)_第1页
第4章 ARM指令集系统(1)_第2页
第4章 ARM指令集系统(1)_第3页
第4章 ARM指令集系统(1)_第4页
第4章 ARM指令集系统(1)_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

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

文档简介

1、1TM第第4章章ARM指令集系统指令集系统ARM微处理器的指令集可以分为微处理器的指令集可以分为数据处理指令数据处理指令跳转指令跳转指令程序状态寄存器(程序状态寄存器(PSRPSR)处理指令)处理指令加载加载/ /存储指令存储指令协处理器指令协处理器指令杂类指令杂类指令本章将分类介绍本章将分类介绍ARM指令语法格式、指令编码格式和指令语法格式、指令编码格式和ARM指指令的详细功能。令的详细功能。2TM2内容提要内容提要41 数据处理指令数据处理指令42 ARM分支指令分支指令43 加载加载/存储指令存储指令44 批量加载批量加载/存储指令存储指令45 交换指令交换指令46 程序状态寄存器程序状

2、态寄存器PSR访问指令访问指令47 协处理器操作指令协处理器操作指令48 异常产生指令异常产生指令3TM341 数据处理指令数据处理指令n基本数据处理指令基本数据处理指令n乘法指令乘法指令 4TM44.1.1 基本数据处理指令基本数据处理指令nARM基本的数据处理指可以分为基本的数据处理指可以分为4类:类: 数据传送指令、算术运算指令、逻辑运算指数据传送指令、算术运算指令、逻辑运算指令和比较指令。令和比较指令。ARM基本的数据处理指令汇编指令语法格式:基本的数据处理指令汇编指令语法格式:S,5TM56TM6n1.数据传送指令数据传送指令MOV指令指令MOV指令的汇编语法格式为指令的汇编语法格式

3、为MOVcondS Rd, operand2将第二操作数将第二操作数operand2表示的数据传送到目标寄表示的数据传送到目标寄存器存器Rd中;如果指令包含后缀中;如果指令包含后缀“S”,则根据操作,则根据操作结果或移位情况更新结果或移位情况更新CPSR中的相应条件标志位中的相应条件标志位。 7TM78TM8nMVN指令指令MNV指令的汇编语法格式为指令的汇编语法格式为MVNcondS Rd, operand2将第二操作数将第二操作数operand2表示的数据按位取表示的数据按位取反后传送到目标寄存器反后传送到目标寄存器Rd中;如果指令包中;如果指令包含后缀含后缀“S”,则根据操作结果或移位情

4、况,则根据操作结果或移位情况更新更新CPSR中的相应条件标志位。中的相应条件标志位。 9TM910TM10n2算术运算指令算术运算指令(1)ADD加法指令加法指令ADD加法指令的汇编语法格式为加法指令的汇编语法格式为ADDcondS Rd, Rn, operand2ADD指令将指令将operand2表示的数据与寄存器表示的数据与寄存器Rn中的中的值相加,并把结果传送到目标寄存器值相加,并把结果传送到目标寄存器中;如中;如果指令包含后缀果指令包含后缀“S”,则根据操作结果更新,则根据操作结果更新CPSR中的相应条件标志位。中的相应条件标志位。 11TM1112TM12n(2)ADC带带C标志位的

5、加法指令标志位的加法指令ADCcondS Rd, Rn, operand2功能:功能:ADC带带C标志位的加法指令将标志位的加法指令将operand2表示表示的数据与寄存器的数据与寄存器Rn中的值相加,再加上中的值相加,再加上CPSR中的中的C条件标志位的值,并把结果传送到目标寄存器条件标志位的值,并把结果传送到目标寄存器Rd中;如果指令包含后缀中;如果指令包含后缀“S”,则根据操作结果更新,则根据操作结果更新CPSR中的相应条件标志位。该指令可以实现两个中的相应条件标志位。该指令可以实现两个高于高于32位的数据相加运算。位的数据相加运算。13TM1314TM14n(3)SUB减法指令减法指令

6、SUBcondS Rd, Rn, operand2功能:功能:SUB指令从寄存器指令从寄存器Rn中减去中减去operand2表示表示的数值,并把结果传送到目标寄存器的数值,并把结果传送到目标寄存器中;如中;如果指令包含后缀果指令包含后缀“S”,则根据操作结果更新,则根据操作结果更新CPSR中的相应条件标志位。中的相应条件标志位。注意事项:注意事项:当指令包含后缀当指令包含后缀“S”时,如果减法运算时,如果减法运算有借位,则有借位,则C=0,否则,否则C=1。 15TM1516TM16n(4)SBC带带C标志位的减法指令标志位的减法指令SBCcondS Rd, Rn, operand2SBC指令

7、从寄存器指令从寄存器中减去中减去operand2表表示的数值,再减去寄存器示的数值,再减去寄存器CPSR中中C条件标志条件标志位的反码,并把结果传送到目标寄存器位的反码,并把结果传送到目标寄存器Rd中中;如果指令包含后缀;如果指令包含后缀“S”,则根据操作结果,则根据操作结果更新更新CPSR中的相应条件标志位。该指令可中的相应条件标志位。该指令可以实现两个高于以实现两个高于32位的数据相减运算。位的数据相减运算。 17TM1718TM18n(5)RSB逆向减法指令逆向减法指令RSBcondS Rd, Rn, operand2功能:功能:RSB指令从第指令从第2操作数操作数operand2表示表

8、示的数值中减去寄存器的数值中减去寄存器Rn 值,并把结果传送到值,并把结果传送到目标寄存器目标寄存器Rd中;如果指令包含后缀中;如果指令包含后缀“S”,则根据操作结果更新则根据操作结果更新CPSR中的相应条件标中的相应条件标志位。志位。 19TM1920TM20n(6)RSC带带C标志位的逆向减法指令标志位的逆向减法指令RSCcondS Rd,Rn, operand2功能:功能:RSC指令从指令从operand2表示的数值中减表示的数值中减去寄存器去寄存器Rn 值,再减去寄存器值,再减去寄存器CPSR中中 C条条件标志位的反码,并把结果传送到目标寄存件标志位的反码,并把结果传送到目标寄存器器R

9、d中;如果指令包含后缀中;如果指令包含后缀“S”,则根据操,则根据操作结果更新作结果更新CPSR中的相应条件标志位。中的相应条件标志位。21TM2122TM22n3逻辑运算指令逻辑运算指令(1)AND与逻辑运算指令与逻辑运算指令ANDcondS Rd, Rn, operand2功能:功能:AND指令将指令将operand2表示的数值与寄存器表示的数值与寄存器Rn 的值按位做逻辑与操作,并把结果保存到目标的值按位做逻辑与操作,并把结果保存到目标寄存器寄存器Rd中;如果指令包含后缀中;如果指令包含后缀“S”,则根据操,则根据操作结果更新作结果更新CPSR中的相应条件标志位。中的相应条件标志位。 2

10、3TM2324TM24n(2)ORR或逻辑运算指令或逻辑运算指令ORRcondS Rd, Rn, operand2功能:功能:ORR指令将指令将operand2表示的数值与表示的数值与寄存器寄存器Rn的值按位做逻辑或操作,并把结果的值按位做逻辑或操作,并把结果保存到目标寄存器保存到目标寄存器Rd中;如果指令包含后缀中;如果指令包含后缀“S”,则根据操作结果更新,则根据操作结果更新CPSR中的相应中的相应条件标志位。条件标志位。 25TM2526TM26n(3)EOR异或逻辑运算指令异或逻辑运算指令ORRcondS Rd, Rn, operand2功能:功能:ORR指令将指令将operand2表

11、示的数值与表示的数值与寄存器寄存器Rn的值按位做逻辑异或操作,并把结的值按位做逻辑异或操作,并把结果保存到目标寄存器果保存到目标寄存器Rd中;如果指令包含后中;如果指令包含后缀缀“S”,则根据操作结果更新,则根据操作结果更新CPSR中的相中的相应条件标志位。应条件标志位。EOR指令可用于将寄存器中指令可用于将寄存器中某些位的值取反。某些位的值取反。 27TM2728TM28n(4)BIC清除逻辑运算指令清除逻辑运算指令BICcondS Rd, Rn, operand2功能:功能:BIC指令将寄存器指令将寄存器Rn的值与的值与operand2表示的数值的反码按位做逻辑与操作,并把表示的数值的反码

12、按位做逻辑与操作,并把结果保存到目标寄存器结果保存到目标寄存器Rd中中 29TM29 30TM30n4比较指令比较指令比较指令没有目标寄存器,只用作更新条比较指令没有目标寄存器,只用作更新条件标志位,不保存运算结果,指令后缀无需件标志位,不保存运算结果,指令后缀无需加加“S”。在程序设计中,根据操作的结果更。在程序设计中,根据操作的结果更新新CPSR中相应的条件标志位,后面的指令中相应的条件标志位,后面的指令就可以根据就可以根据CPSR中相应的条件标志位来判中相应的条件标志位来判断是否执行。断是否执行。31TM31n(1)CMP相减比较指令相减比较指令CMPcond Rn, operand2功

13、能:功能:CMP指令将寄存器指令将寄存器Rn的值减去的值减去operand2表示的数值,根据操作结果和寄存表示的数值,根据操作结果和寄存器移位情况更新器移位情况更新CPSR中的相应条件标志位中的相应条件标志位。32TM3233TM33n(2)CMN负数比较指令负数比较指令CMNcond Rn, operand2功能:功能:CMN指令将寄存器指令将寄存器Rn的值加上的值加上operand2表示的数值,根据操作结果和寄存表示的数值,根据操作结果和寄存器移位情况更新器移位情况更新CPSR中的相应条件标志位中的相应条件标志位。34TM3435TM35n(3)TST位测试指令位测试指令TSTcond R

14、n, operand2功能:功能:CMN指令将寄存器指令将寄存器Rn的值与的值与operand2表示的数值按位作逻辑表示的数值按位作逻辑“与与”操作操作,根据操作结果和寄存器移位情况更新,根据操作结果和寄存器移位情况更新CPSR中的相应条件标志位。中的相应条件标志位。36TM3637TM37n4)TEQ相等测试指令相等测试指令TEQcond Rn, operand2功能:功能:TEQ指令将寄存器指令将寄存器Rn的值与的值与operand2表示的数值按位作逻辑表示的数值按位作逻辑“异或异或”操操作,根据操作结果和寄存器移位情况更新作,根据操作结果和寄存器移位情况更新CPSR中的相应条件标志位。中

15、的相应条件标志位。38TM3839TM394.1.2 乘法指令乘法指令 nARM乘法指令完成乘法指令完成2个寄存器中数据的乘法个寄存器中数据的乘法,按照保存结果的数据长度可以分为两类:,按照保存结果的数据长度可以分为两类:一类为一类为32位的乘法指令,即乘法操作的结果位的乘法指令,即乘法操作的结果为为32位;另一类为位;另一类为64位的乘法指令,即乘法位的乘法指令,即乘法操作的结果为操作的结果为64位。位。 40TM40助记符说明操作条件码位置MUL Rd,Rm,Rs32位乘法指令RdRm*Rs(RdRm)MULcondSMLA Rd,Rm,Rs,Rn32位乘加指令RdRm*Rs+Rn(RdR

16、m)MLAcondSUMULL RdLo,RdHi,Rm,Rs64位无符号乘法指令(RdLo,RDHi)Rm*RsUMULLcondSUMLAL RdLo,RdHi,Rm,Rs64位无符号乘加指令(RdLo,RDHi)Rm*Rs+(RdLo,RDHi)UMLALcondSSMULL RdLo,RdHi,Rm,Rs64位有符号乘法指令(RdLo,RDHi)Rm*RsSMULLcondSSMLAL RdLo,RdHi,Rm,Rs64位有符号乘加指令(RdLo,RDHi)Rm*Rs+(RdLo,RDHi)SMLALcondSARM乘法指令乘法指令41TM41n1 32位乘法指令位乘法指令42TM42

17、n(1)MULMULcondS Rd, Rm, RsMUL指令实现两个指令实现两个32位的数(可以为无符号位的数(可以为无符号数,也可为有符号数)的乘积(数,也可为有符号数)的乘积(Rm * Rs )并将结果存放到一个并将结果存放到一个32位的寄存器位的寄存器Rd中;如中;如果指令包含后缀果指令包含后缀“S”,则根据操作结果更新,则根据操作结果更新CPSR中的相应条件标志位。中的相应条件标志位。 43TM4344TM44n(2)MLAMLAcondS Rd, Rm, Rs, Rn MLA指令实现两个指令实现两个32位的数(可以为无符号位的数(可以为无符号数,也可为有符号数)的乘积,再将乘积(数

18、,也可为有符号数)的乘积,再将乘积(Rm * Rs )加上第)加上第3个操作数个操作数Rn,并将结果,并将结果存放到一个存放到一个32位的寄存器位的寄存器Rd中;如果指令包中;如果指令包含后缀含后缀“S”,则根据操作结果更新,则根据操作结果更新CPSR中中的相应条件标志位。的相应条件标志位。 45TM4546TM46n2 64位乘法指令位乘法指令47TM47n(1)UMULLUMULLcondS RdLo, RdHi, Rm, Rs UMULL指令实现两个指令实现两个32位无符号数的乘积,乘积位无符号数的乘积,乘积结果的高结果的高32位存放到一个位存放到一个32位的寄存器的位的寄存器的RdHi

19、,乘积结果的低乘积结果的低32位存放到另一个位存放到另一个32位的寄存器的位的寄存器的RdLo;如果指令包含后缀;如果指令包含后缀“S”,则根据操作结果,则根据操作结果更新更新CPSR中的相应条件标志位。中的相应条件标志位。48TM4849TM49n(2)UMLALUMLALcondS RdLo, RdHi, Rm, Rs UMLAL指令将两个指令将两个32位无符号数的位无符号数的64位乘积结果位乘积结果与由(与由(RdHi: RdLo)表示的)表示的64位无符号数相加,位无符号数相加,加法结果的高加法结果的高32位存放到寄存器位存放到寄存器RdHi中,乘积结中,乘积结果的低果的低32位存放到

20、寄存器位存放到寄存器RdLo中;如果指令包含中;如果指令包含后缀后缀“S”,则根据操作结果更新,则根据操作结果更新CPSR中的相应条中的相应条件标志位。件标志位。50TM5051TM51n(3)SMULLSMULLcondS RdLo, RdHi, Rm, Rs SMULL指令实现两个指令实现两个32位有符号数的乘积,乘积位有符号数的乘积,乘积结果的高结果的高32位存放到一个位存放到一个32位的寄存器的位的寄存器的RdHi,乘积结果的低乘积结果的低32位存放到另一个位存放到另一个32位的寄存器的位的寄存器的RdLo;如果指令包含后缀;如果指令包含后缀“S”,则根据操作结果,则根据操作结果更新更

21、新CPSR中的相应条件标志位。中的相应条件标志位。52TM5253TM53例:写出执行完下面的程序段后,例:写出执行完下面的程序段后,R3:R2、R5:R4所存放的所存放的64位乘法结果分别为多少?位乘法结果分别为多少?MVN R0,#0 x0MOV R1,#0X1UMULL R2,R3,R1,R0SMULL R4,R5,R1,R0R3:R2中存放的是无符号数,中存放的是无符号数,0 xFFFFFFFFR5:R4中存放的是有符号数,中存放的是有符号数,0 xFFFFFFFFFFFFFFFF (-1)54TM54n(4)SMLALSMLALcondS RdLo, RdHi, Rm, Rs SML

22、AL指令将两个指令将两个32位有符号数的位有符号数的64位乘积结果位乘积结果与由(与由(RdHi: RdLo)表示的)表示的64位无符号数相加,位无符号数相加,加法结果的高加法结果的高32位存放到寄存器位存放到寄存器RdHi中,乘积结中,乘积结果的低果的低32位存放到寄存器位存放到寄存器RdLo中;如果指令包含中;如果指令包含后缀后缀“S”,则根据操作结果更新,则根据操作结果更新CPSR中的相应条中的相应条件标志位。件标志位。 55TM5556TM564.2 ARM分支指令分支指令分支指令用于实现程序流程的跳转,在分支指令用于实现程序流程的跳转,在ARM程序中有两种方法可以实现程序流程的程序中

23、有两种方法可以实现程序流程的跳转:跳转:n使用专门的分支指令。使用专门的分支指令。n直接向程序计数器直接向程序计数器PCPC写入跳转地址值。写入跳转地址值。57TM57n通过向程序计数器通过向程序计数器PC写入跳转地址值,可以写入跳转地址值,可以实现在实现在4GB的地址空间中的任意跳转,在跳的地址空间中的任意跳转,在跳转之前结合使用转之前结合使用MOV LR,PC等类似指令等类似指令,能够保存程序的返回地址值,从而实现在,能够保存程序的返回地址值,从而实现在4GB连续地址空间的子程序调用。连续地址空间的子程序调用。58TM58n分支指令分支指令B分支指令分支指令B可以实现跳转到指定的地址执行可

24、以实现跳转到指定的地址执行程序。程序。指令的汇编语法格式如下:指令的汇编语法格式如下:B 59TM59n在指令的汇编语法中在指令的汇编语法中target_address这个目标地址这个目标地址的计算方法是:将指令中的的计算方法是:将指令中的24位带符号的补码立即位带符号的补码立即数扩展为数扩展为32位;将此位;将此32位数左移两位将得到的值写位数左移两位将得到的值写入到程序计数器入到程序计数器PC中,即跳转到目标地址。能够实中,即跳转到目标地址。能够实现跳转的范围为现跳转的范围为-32MB+32MB。 60TM60n带链接的分支指令带链接的分支指令BLn带链接的分支指令带链接的分支指令BL可以

25、实现跳转到指定可以实现跳转到指定的地址执行程序,同时的地址执行程序,同时BL指令还将程序计指令还将程序计数器数器PC的值保存到的值保存到LR寄存器中。寄存器中。n指令的汇编语法格式如下:指令的汇编语法格式如下:nBL 61TM61nL决定是否保存返回地址。当有决定是否保存返回地址。当有L时,指令将下一条指令地时,指令将下一条指令地址保存到址保存到LR寄存器中;当无寄存器中;当无L时同时同B指令仅执行跳转,当前指令仅执行跳转,当前PC寄存器的值将不会保存到寄存器的值将不会保存到LR寄存器中。从指令的编码可寄存器中。从指令的编码可以看出,以看出,B与与BL指令的唯一区别是指令的唯一区别是bit24

26、,当,当bit24=0是是B指令,当指令,当bit24=1是是BL指令。指令。nBL跳转指令编码中跳转指令编码中signed_immed_24的含义同的含义同B指令。指令。 62TM62n带状态切换的跳转指令带状态切换的跳转指令 BXnBX指令跳转到指令中所指定的目标地址,指令跳转到指令中所指定的目标地址,目标地址处的指令既可以是目标地址处的指令既可以是ARM指令,也指令,也可以是可以是Thumb指令。指令。n指令的汇编语法格式如下:指令的汇编语法格式如下:nB 63TM63nBX指令跳转到指令跳转到Rm指定的地址执行程序,如果指定的地址执行程序,如果Rm的的bit0为为1,则跳转时自动将,则

27、跳转时自动将CPSR中的标志位中的标志位T置位,目标地址的代置位,目标地址的代码为码为Thumb代码;如果代码;如果Rm的的bit0为为0,则跳转时自动将,则跳转时自动将CPSR中的中的T标志位清标志位清0,目标地址的代码为,目标地址的代码为ARM代码。代码。64TM64指令实例:指令实例:CODE32CODE32;ARMARM程序段,程序段,3232位编码位编码ARM1ARM1;语句标号;语句标号 ADR R0,THUMB1+1ADR R0,THUMB1+1;把;把THUMB1THUMB1所在的地址赋给所在的地址赋给R0R0 BX R0 BX R0;跳转到;跳转到THUMB1THUMB1指令集指令集 CODE16 CODE16THUMB1:THUMB1: ADR R0,ARM1ADR R0,ARM1;把语句标号;把语句标号ARM1ARM1所在的地址赋给所在的地址赋给R0R0BIC R0,R0,#01BIC R0,R0,#01;末位;末位R00R00清清0 0BX R0BX R0;跳转到;跳转到ARMARM指令集指令集65TM65n带链接和状态切

温馨提示

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

评论

0/150

提交评论