嵌入式体系结构及接口技术:第4章 ARM指令集系统1_第1页
嵌入式体系结构及接口技术:第4章 ARM指令集系统1_第2页
嵌入式体系结构及接口技术:第4章 ARM指令集系统1_第3页
嵌入式体系结构及接口技术:第4章 ARM指令集系统1_第4页
嵌入式体系结构及接口技术:第4章 ARM指令集系统1_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

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

2、44 批量加载批量加载/存储指令存储指令45 交换指令交换指令46 程序状态寄存器程序状态寄存器PSR访问指令访问指令47 协处理器操作指令协处理器操作指令48 异常产生指令异常产生指令3TM34.1.1 基本数据处理指令基本数据处理指令nARM基本的数据处理指可以分为基本的数据处理指可以分为4类:类:数据数据传送指令、算术运算指令、逻辑运算指令和传送指令、算术运算指令、逻辑运算指令和比较指令。比较指令。nARM基本的数据处理指令汇编指令语法格式:基本的数据处理指令汇编指令语法格式:nS,41 数据处理指令数据处理指令4TM45TM51.数据传送指令数据传送指令nMOV指令指令MOV指令的汇编

3、语法格式为指令的汇编语法格式为MOVcondS Rd, operand2 将第二操作数将第二操作数operand2表示的数据传送到表示的数据传送到目标寄存器目标寄存器Rd中;如果指令包含后缀中;如果指令包含后缀“S”,则,则根据根据操作结果或移位情况操作结果或移位情况更新更新CPSR中的相应条中的相应条件标志位(件标志位(N、Z和和C)。)。 6TM61.数据传送指令数据传送指令n指令中包含指令中包含S S时:时:1.1.如果指令中的目标寄存器如果指令中的目标寄存器为为R15R15,则当前处理,则当前处理器模式对应的器模式对应的SPSRSPSR的值被复制到的值被复制到CPSRCPSR中;中;2

4、.2.如果指令中的目标寄存器如果指令中的目标寄存器不为不为R15R15,指令根据,指令根据传送的数值设置传送的数值设置CPSRCPSR中的中的N N位和位和Z Z位,并根据移位位,并根据移位器的进位值设置器的进位值设置CPSRCPSR的的C C位。位。7TM71.数据传送指令数据传送指令nMOV指令指令例例4-1:MOV R1,#0 x80MOV PC,LRMOVS R1,R2,LSL #0 x028TM8nMVN指令指令MVN指令的汇编语法格式为指令的汇编语法格式为MVNcondS Rd, operand2将第二操作数将第二操作数operand2表示的数据按位取反表示的数据按位取反后传送到目

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

6、目标寄存器中;如果指令包含后缀中;如果指令包含后缀“S”,则根据操作结果更,则根据操作结果更新新CPSR中的相应条件标志位。中的相应条件标志位。 11TM112算术运算指令算术运算指令(1)ADD加法指令加法指令例:例:4-3ADD R0,R1,R2ADDS R0,R1,#251ADD R0,R2,R2,LSL #1 12TM12(2)ADC 带带C标志位的加法指令标志位的加法指令ADCcondS Rd, Rn, operand2n功能:功能:ADC带带C标志位的加法指令将标志位的加法指令将operand2表示表示的数据与寄存器的数据与寄存器Rn中的值相加,再加上中的值相加,再加上CPSR中的

7、中的C条件标志位的值,并把结果传送到目标寄存器条件标志位的值,并把结果传送到目标寄存器Rd中;如果指令包含后缀中;如果指令包含后缀“S”,则根据操作结果更新,则根据操作结果更新CPSR中的相应条件标志位。该指令可以实现两个中的相应条件标志位。该指令可以实现两个高于高于32位的数据相加运算。位的数据相加运算。13TM13(2)ADC 带带C标志位的加法指令标志位的加法指令例:实现例:实现64位数据加法运算位数据加法运算ADDS R0,R0,R2ADC R1,R1,R314TM14(3)SUB减法指令减法指令SUBcondS Rd, Rn, operand2n功能:功能:SUB指令从寄存器指令从寄

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

9、PSR中中C条件标志位的反码,条件标志位的反码,并把结果传送到目标寄存器并把结果传送到目标寄存器Rd中;如果指令包含中;如果指令包含后缀后缀“S”,则根据操作结果更新,则根据操作结果更新CPSR中的相应条中的相应条件标志位。该指令可以实现两个高于件标志位。该指令可以实现两个高于32位的数据相位的数据相减运算。减运算。 16TM16(4)SBC带带C标志位的减法指令标志位的减法指令例例4-6 实现实现64位操作数减法运算,其中位操作数减法运算,其中R1:R0中放置被减数,中放置被减数,R3:R2中放置减数,结果送中放置减数,结果送回到回到R1:R0中。中。(验证验证)17TM17(5)RSB 逆

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

11、,再减去寄存器值,再减去寄存器CPSR中中 C条件标志位的条件标志位的反码,并把结果传送到目标寄存器反码,并把结果传送到目标寄存器Rd中;如果指令中;如果指令包含后缀包含后缀“S”,则根据操作结果更新,则根据操作结果更新CPSR中的相中的相应条件标志位。应条件标志位。n例:求一个例:求一个64位数的相反数位数的相反数(验证验证)19TM193逻辑运算指令逻辑运算指令(1)AND与逻辑运算指令与逻辑运算指令ANDcondS Rd, Rn, operand2n功能:功能:AND指令将指令将operand2表示的数值与寄存器表示的数值与寄存器Rn 的值按位做逻辑与操作,并把结果保存到目标的值按位做逻

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

13、应条件标志位。中的相应条件标志位。ORR R0,R0,#0 xFF 21TM21(3)EOR异或逻辑运算指令异或逻辑运算指令EORcondS Rd, Rn, operand2n功能:功能:EOR指令将指令将operand2表示的数值与寄存器表示的数值与寄存器Rn的值按位做逻辑异或操作,并把结果保存到目标的值按位做逻辑异或操作,并把结果保存到目标寄存器寄存器Rd中;如果指令包含后缀中;如果指令包含后缀“S”,则根据操,则根据操作结果更新作结果更新CPSR中的相应条件标志位。中的相应条件标志位。EOR指令指令可用于将寄存器中某些位的值取反。可用于将寄存器中某些位的值取反。EOR R0,R0,#0

14、xFF 22TM22(4)BIC位清除逻辑运算指令位清除逻辑运算指令BICcondS Rd, Rn, operand2n功能:功能:BIC指令将寄存器指令将寄存器Rn的值与的值与operand2表示表示的数值的反码按位做逻辑与操作,并把结果保存到的数值的反码按位做逻辑与操作,并把结果保存到目标寄存器目标寄存器Rd中中 BIC R0,R0,#0 xFF00000023TM234比较指令比较指令n比较指令没有目标寄存器,只用作更新条件标志位比较指令没有目标寄存器,只用作更新条件标志位,不保存运算结果,不保存运算结果,指令后缀无需加指令后缀无需加“S”。在程序。在程序设计中,根据操作的结果更新设计中

15、,根据操作的结果更新CPSR中相应的条件中相应的条件标志位,后面的指令就可以根据标志位,后面的指令就可以根据CPSR中相应的条中相应的条件标志位来判断是否执行。件标志位来判断是否执行。24TM24(1)CMP相减比较指令相减比较指令CMPcond Rn, operand2n功能:功能:CMP指令将寄存器指令将寄存器Rn的值减去的值减去operand2表表示的数值,根据操作结果和寄存器移位情况更新示的数值,根据操作结果和寄存器移位情况更新CPSR中的相应条件标志位。中的相应条件标志位。25TM25(2)CMN负数比较指令负数比较指令CMNcond Rn, operand2n功能:功能:CMN指令

16、将寄存器指令将寄存器Rn的值加上的值加上operand2表表示的数值,根据操作结果和寄存器移位情况更新示的数值,根据操作结果和寄存器移位情况更新CPSR中的相应条件标志位。中的相应条件标志位。nCMN相当于不保存操作结果的相当于不保存操作结果的ADDS指令。指令。26TM26(3)TST位测试指令位测试指令TSTcond Rn, operand2n功能:功能:CMN指令将寄存器指令将寄存器Rn的值与的值与operand2表示表示的数值按位作逻辑的数值按位作逻辑“与与”操作,根据操作结果和寄操作,根据操作结果和寄存器移位情况更新存器移位情况更新CPSR中的相应条件标志位。中的相应条件标志位。27

17、TM274)TEQ相等测试指令相等测试指令TEQcond Rn, operand2n功能:功能:TEQ指令将寄存器指令将寄存器Rn的值与的值与operand2表示表示的数值按位作逻辑的数值按位作逻辑“异或异或”操作,根据操作结果和操作,根据操作结果和寄存器移位情况更新寄存器移位情况更新CPSR中的相应条件标志位。中的相应条件标志位。n可以利用可以利用CPSR中的中的Z位、位、N位判断两个操作数或它位判断两个操作数或它们的符号是否相等。们的符号是否相等。28TM284.1.2 乘法指令乘法指令 nARM乘法指令完成乘法指令完成2个寄存器中数据的乘法,按个寄存器中数据的乘法,按照保存结果的数据长度

18、可以分为两类:一类为照保存结果的数据长度可以分为两类:一类为32位的乘法指令,即乘法操作的结果为位的乘法指令,即乘法操作的结果为32位;位;另一类为另一类为64位的乘法指令,即乘法操作的结果位的乘法指令,即乘法操作的结果为为64位。位。 29TM291 32位乘法指令位乘法指令30TM30(1)MULMULcondS Rd, Rm, RsnMUL指令实现两个指令实现两个32位的数(可以为无符号数,位的数(可以为无符号数,也可为有符号数)的乘积(也可为有符号数)的乘积(Rm * Rs )并将结果)并将结果存放到一个存放到一个32位的寄存器位的寄存器Rd中;如果指令包含后中;如果指令包含后缀缀“S

19、”,则根据操作结果更新,则根据操作结果更新CPSR中的相应条中的相应条件标志位件标志位(N, Z);Rd和和Rm不能为同一个寄存器不能为同一个寄存器。例:例: MULS R3,R2,R1 31TM31(2)MLAMLAcondS Rd, Rm, Rs, Rn nMLA指令实现两个指令实现两个32位的数(可以为无符号数,也位的数(可以为无符号数,也可为有符号数)的乘积,再将乘积(可为有符号数)的乘积,再将乘积(Rm * Rs )加)加上第上第3个操作数个操作数Rn,并将结果存放到一个,并将结果存放到一个32位的寄位的寄存器存器Rd中;如果指令包含后缀中;如果指令包含后缀“S”,则根据操作,则根据

20、操作结果更新结果更新CPSR中的相应条件标志位。中的相应条件标志位。 例:例: MLAS R0,R1,R2,R332TM322 64位乘法指令位乘法指令33TM33(1)UMULLUMULLcondS RdLo, RdHi, Rm, Rs nUMULL指令实现两个指令实现两个32位无符号数的乘积,乘积位无符号数的乘积,乘积结果的高结果的高32位存放到一个位存放到一个32位的寄存器位的寄存器RdHi中,中,乘积结果的低乘积结果的低32位存放到另一个位存放到另一个32位的寄存器位的寄存器RdLo中;如果指令包含后缀中;如果指令包含后缀“S”,则根据操作结,则根据操作结果更新果更新CPSR中的相应条

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

22、L R0,R1,R2,R335TM35(3)SMULLSMULLcondS RdLo, RdHi, Rm, Rs nSMULL指令实现两个指令实现两个32位有符号数的乘积,乘积位有符号数的乘积,乘积结果的高结果的高32位存放到一个位存放到一个32位的寄存器的位的寄存器的RdHi,乘积结果的低乘积结果的低32位存放到另一个位存放到另一个32位的寄存器的位的寄存器的RdLo;如果指令包含后缀;如果指令包含后缀“S”,则根据操作结果,则根据操作结果更新更新CPSR中的相应条件标志位。中的相应条件标志位。36TM36例例4-21 写出执行完下面的程序段后,写出执行完下面的程序段后,R3:R2、R5:R

23、4所存放的所存放的64位乘法结果分别为多少?位乘法结果分别为多少?(验证验证)MVN R0,#0 x0MOV R1,#0 x1UMULL R2,R3,R1,R0SMULL R4,R5,R1,R0;37TM37(4)SMLALSMLALcondS RdLo, RdHi, Rm, Rs nSMLAL指令将两个指令将两个32位有符号数的位有符号数的64位乘积结果位乘积结果与由(与由(RdHi: RdLo)表示的)表示的64位位无无符号数相加,符号数相加,加法结果的高加法结果的高32位存放到寄存器位存放到寄存器RdHi中,乘积结中,乘积结果的低果的低32位存放到寄存器位存放到寄存器RdLo中;如果指令

24、包含中;如果指令包含后缀后缀“S”,则根据操作结果更新,则根据操作结果更新CPSR中的相应条中的相应条件标志位。件标志位。 38TM38杂类数据处理指令杂类数据处理指令n前导零计数指令:前导零计数指令:CLZCLZ , n从从ARM V5版本指令系统开始支持该指令版本指令系统开始支持该指令,计算,计算32位寄存器位寄存器操作数从第操作数从第31位开始连续位开始连续“0”位的个数,主要用于计算操作位的个数,主要用于计算操作数规范化。数规范化。n例:例:MOV R4,#0 xAA CLZR2,R439TM394.2 ARM分支指令分支指令 分支指令用于实现程序流程的跳转,在分支指令用于实现程序流程

25、的跳转,在ARM程序中有两种方法可以实现程序流程的程序中有两种方法可以实现程序流程的跳转:跳转:n使用专门的分支指令。使用专门的分支指令。n直接向程序计数器直接向程序计数器PC写入跳转地址值。写入跳转地址值。40TM40nARM分支指令可以实现从当前指令向前或向后的分支指令可以实现从当前指令向前或向后的32M的地址空间跳转。的地址空间跳转。n通过向程序计数器通过向程序计数器PC写入跳转地址值,可以实现在写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使的地址空间中的任意跳转,在跳转之前结合使用用MOV LR,PC等类似指令,能够保存程序的返等类似指令,能够保存程序的返回地

26、址值,从而实现在回地址值,从而实现在4GB连续地址空间的子程序连续地址空间的子程序调用。调用。41TM41n分支指令分支指令B分支指令分支指令B可以实现跳转到指定的地址执行程序。可以实现跳转到指定的地址执行程序。n指令的汇编语法格式如下:指令的汇编语法格式如下:B 42TM42n在指令的汇编语法中在指令的汇编语法中target_address这个目标地址的计算方这个目标地址的计算方法是:将指令中的法是:将指令中的24位带符号的补码立即数扩展为位带符号的补码立即数扩展为32位;位;将此将此32位数左移两位将得到的值位数左移两位将得到的值写入写入到程序计数器到程序计数器PC中,中,即跳转到目标地址

27、。能够实现跳转的范围为即跳转到目标地址。能够实现跳转的范围为-32MB+32MB。n例:例:BLabel ;目标地址由程序标号给出目标地址由程序标号给出CMP R1,#0BEQ stop 43TM43n带链接的分支指令带链接的分支指令BL 带链接的分支指令带链接的分支指令BL可以实现跳转到指定的可以实现跳转到指定的地址执行程序,同时地址执行程序,同时BL指令还将指令还将程序计数器程序计数器PC的值的值(下一条指令地址下一条指令地址)保存到保存到LR寄存器中。寄存器中。指令的汇编语法格式如下:指令的汇编语法格式如下:BL 如何从子程序中返回?如何从子程序中返回?44TM44nL决定是否保存返回地

28、址。当有决定是否保存返回地址。当有L时,指令将下一条指令地时,指令将下一条指令地址保存到址保存到LR寄存器中;当无寄存器中;当无L时同时同B指令仅执行跳转,当前指令仅执行跳转,当前PC寄存器的值将不会保存到寄存器的值将不会保存到LR寄存器中。寄存器中。从指令的编码可从指令的编码可以看出,以看出,B与与BL指令的唯一区别是指令的唯一区别是bit24,当,当bit24=0是是B指令,当指令,当bit24=1是是BL指令。指令。nBL跳转指令编码中跳转指令编码中signed_immed_24的含义同的含义同B指令。指令。 45TM45n带状态切换的跳转指令带状态切换的跳转指令 BXBX指令跳转到指令中所指定的目标地址,目标指令跳转到指令中所指定的目标地址,目标地址处的指令既可以是地址处的指令既可以是ARM指令,也可以是指令,也可以是Thumb指令。指令。指令的汇编语法格式如下:指令的汇编语法格式如下: BX 46TM46nBX指令跳转到指令跳转到Rm指定的地址执行程序,如果指定的地址执

温馨提示

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

评论

0/150

提交评论