资源预览内容
第1页 / 共51页
第2页 / 共51页
第3页 / 共51页
第4页 / 共51页
第5页 / 共51页
第6页 / 共51页
第7页 / 共51页
第8页 / 共51页
第9页 / 共51页
第10页 / 共51页
亲,该文档总共51页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1TM第第4章章ARM指令集系统指令集系统ARM微微处处理理器器的的指指令令集集可可以以分分为为数数据据处处理理指指令令、分分支支指指令令、加加载载/存存储储指指令令、批批量量加加载载/存存储储指指令令、交交换换指指令令、程程序序状状态态寄寄存存器器(PSR)处处理理指指令令、协协处处理理器器指指令令和和异异常常产产生生指指令八大类。令八大类。本本章章将将分分类类介介绍绍ARM指指令令语语法法格格式式、指指令编码格式和令编码格式和ARM指令的详细功能。指令的详细功能。2TM2内容提要内容提要41数据处理指令数据处理指令42ARM分支指令分支指令43加载加载/存储指令存储指令44批量加载批量加载/存储指令存储指令45交换指令交换指令46程序状态寄存器程序状态寄存器PSR访问指令访问指令47协处理器操作指令协处理器操作指令48异常产生指令异常产生指令3TM34.1.1基本数据处理指令基本数据处理指令nARM基本的数据处理指可以分为基本的数据处理指可以分为4类:类:数据数据传送指令、算术运算指令、逻辑运算指令和传送指令、算术运算指令、逻辑运算指令和比较指令。比较指令。nARM基本的数据处理指令汇编指令语法格式:基本的数据处理指令汇编指令语法格式:nS,41数据处理指令数据处理指令4TM45TM51.数据传送指令数据传送指令nMOV指令指令MOV指令的汇编语法格式为指令的汇编语法格式为MOVcondSRd,operand2将第二操作数将第二操作数operand2表示的数据传送到表示的数据传送到目标寄存器目标寄存器Rd中;如果指令包含后缀中;如果指令包含后缀“S”,则,则根据根据操作结果或移位情况操作结果或移位情况更新更新CPSR中的相应条中的相应条件标志位(件标志位(N、Z和和C)。)。6TM61.数据传送指令数据传送指令n指令中包含指令中包含S S时:时:1.1.如果指令中的目标寄存器如果指令中的目标寄存器为为R15R15,则当前处理,则当前处理器模式对应的器模式对应的SPSRSPSR的值被复制到的值被复制到CPSRCPSR中;中;2.2.如果指令中的目标寄存器如果指令中的目标寄存器不为不为R15R15,指令根据,指令根据传送的数值设置传送的数值设置CPSRCPSR中的中的N N位和位和Z Z位,并根据移位位,并根据移位器的进位值设置器的进位值设置CPSRCPSR的的C C位。位。7TM71.数据传送指令数据传送指令nMOV指令指令例例4-1:MOVR1,#0x80MOVPC,LRMOVSR1,R2,LSL#0x028TM8nMVN指令指令MVN指令的汇编语法格式为指令的汇编语法格式为MVNcondSRd,operand2将第二操作数将第二操作数operand2表示的数据按位取反表示的数据按位取反后传送到目标寄存器后传送到目标寄存器Rd中;如果指令包含后缀中;如果指令包含后缀“S”,则根据操作结果或移位情况更新,则根据操作结果或移位情况更新CPSR中中的相应条件标志位。的相应条件标志位。9TM9nMVN指令指令例例4-2MVNR1,#0xFF00MVNSR1,R1,LSL#0x0210TM102算术运算指令算术运算指令(1)ADD加法指令加法指令ADD加法指令的汇编语法格式为加法指令的汇编语法格式为ADDcondSRd,Rn,operand2ADD指令将指令将operand2表示的数据与寄存器表示的数据与寄存器Rn中的值相加,并把结果传送到目标寄存器中的值相加,并把结果传送到目标寄存器中;如果指令包含后缀中;如果指令包含后缀“S”,则根据操作结果更,则根据操作结果更新新CPSR中的相应条件标志位。中的相应条件标志位。11TM112算术运算指令算术运算指令(1)ADD加法指令加法指令例:例:4-3ADDR0,R1,R2ADDSR0,R1,#251ADDR0,R2,R2,LSL#112TM12(2)ADC带带C标志位的加法指令标志位的加法指令ADCcondSRd,Rn,operand2n功能:功能:ADC带带C标志位的加法指令将标志位的加法指令将operand2表示表示的数据与寄存器的数据与寄存器Rn中的值相加,再加上中的值相加,再加上CPSR中的中的C条件标志位的值,并把结果传送到目标寄存器条件标志位的值,并把结果传送到目标寄存器Rd中;如果指令包含后缀中;如果指令包含后缀“S”,则根据操作结果更新,则根据操作结果更新CPSR中的相应条件标志位。该指令可以实现两个中的相应条件标志位。该指令可以实现两个高于高于32位的数据相加运算。位的数据相加运算。13TM13(2)ADC带带C标志位的加法指令标志位的加法指令例:实现例:实现64位数据加法运算位数据加法运算ADDSR0,R0,R2ADCR1,R1,R314TM14(3)SUB减法指令减法指令SUBcondSRd,Rn,operand2n功能:功能:SUB指令从寄存器指令从寄存器Rn中减去中减去operand2表示表示的数值,并把结果传送到目标寄存器的数值,并把结果传送到目标寄存器中;如果中;如果指令包含后缀指令包含后缀“S”,则根据操作结果更新,则根据操作结果更新CPSR中中的相应条件标志位。的相应条件标志位。n注意事项:注意事项:当指令包含后缀当指令包含后缀“S”时,时,如果减法运算如果减法运算有借位,则有借位,则C=0,否则,否则C=1。15TM15(4)SBC带带C标志位的减法指令标志位的减法指令SBCcondSRd,Rn,operand2nSBC指令从寄存器指令从寄存器中减去中减去operand2表示的数表示的数值,值,再减去寄存器再减去寄存器CPSR中中C条件标志位的反码,条件标志位的反码,并把结果传送到目标寄存器并把结果传送到目标寄存器Rd中;如果指令包含后中;如果指令包含后缀缀“S”,则根据操作结果更新,则根据操作结果更新CPSR中的相应条件中的相应条件标志位。该指令可以实现两个高于标志位。该指令可以实现两个高于32位的数据相减位的数据相减运算。运算。16TM16(4)SBC带带C标志位的减法指令标志位的减法指令例例4-6实现实现64位操作数减法运算,其中位操作数减法运算,其中R1:R0中放置被减数,中放置被减数,R3:R2中放置减数,结果送中放置减数,结果送回到回到R1:R0中。中。(验证验证)17TM17(5)RSB逆向减法指令逆向减法指令RSBcondSRd,Rn,operand2n功能:功能:RSB指令从第指令从第2操作数操作数operand2表示表示的数值中减去寄存器的数值中减去寄存器Rn值,并把结果传送到值,并把结果传送到目标寄存器目标寄存器Rd中;如果指令包含后缀中;如果指令包含后缀“S”,则根据操作结果更新,则根据操作结果更新CPSR中的相应条件中的相应条件标志位。标志位。18TM18(6)RSC带带C标志位的逆向减法指令标志位的逆向减法指令RSCcondSRd,Rn,operand2n功能:功能:RSC指令从指令从operand2表示的数值中减去寄表示的数值中减去寄存器存器Rn值,再减去寄存器值,再减去寄存器CPSR中中C条件标志位的条件标志位的反码,并把结果传送到目标寄存器反码,并把结果传送到目标寄存器Rd中;如果指令中;如果指令包含后缀包含后缀“S”,则根据操作结果更新,则根据操作结果更新CPSR中的相中的相应条件标志位。应条件标志位。n例:求一个例:求一个64位数的相反数位数的相反数(验证验证)19TM193逻辑运算指令逻辑运算指令(1)AND与逻辑运算指令与逻辑运算指令ANDcondSRd,Rn,operand2n功能:功能:AND指令将指令将operand2表示的数值与寄存器表示的数值与寄存器Rn的值按位做逻辑与操作,并把结果保存到目标的值按位做逻辑与操作,并把结果保存到目标寄存器寄存器Rd中;如果指令包含后缀中;如果指令包含后缀“S”,则根据操,则根据操作结果更新作结果更新CPSR中的相应条件标志位。中的相应条件标志位。ANDR0,R0,#0xFF20TM20(2)ORR或逻辑运算指令或逻辑运算指令ORRcondSRd,Rn,operand2n功能:功能:ORR指令将指令将operand2表示的数值与寄存器表示的数值与寄存器Rn的值按位做逻辑或操作,并把结果保存到目标寄的值按位做逻辑或操作,并把结果保存到目标寄存器存器Rd中;如果指令包含后缀中;如果指令包含后缀“S”,则根据操作,则根据操作结果更新结果更新CPSR中的相应条件标志位。中的相应条件标志位。ORRR0,R0,#0xFF21TM21(3)EOR异或逻辑运算指令异或逻辑运算指令EORcondSRd,Rn,operand2n功能:功能:EOR指令将指令将operand2表示的数值与寄存器表示的数值与寄存器Rn的值按位做逻辑异或操作,并把结果保存到目标的值按位做逻辑异或操作,并把结果保存到目标寄存器寄存器Rd中;如果指令包含后缀中;如果指令包含后缀“S”,则根据操,则根据操作结果更新作结果更新CPSR中的相应条件标志位。中的相应条件标志位。EOR指令指令可用于将寄存器中某些位的值取反。可用于将寄存器中某些位的值取反。EORR0,R0,#0xFF22TM22(4)BIC位清除逻辑运算指令位清除逻辑运算指令BICcondSRd,Rn,operand2n功能:功能:BIC指令将寄存器指令将寄存器Rn的值与的值与operand2表示表示的数值的反码按位做逻辑与操作,并把结果保存到的数值的反码按位做逻辑与操作,并把结果保存到目标寄存器目标寄存器Rd中中BICR0,R0,#0xFF00000023TM234比较指令比较指令n比较指令没有目标寄存器,只用作更新条件标志位,比较指令没有目标寄存器,只用作更新条件标志位,不保存运算结果,不保存运算结果,指令后缀无需加指令后缀无需加“S”。在程序设。在程序设计中,根据操作的结果更新计中,根据操作的结果更新CPSR中相应的条件标中相应的条件标志位,后面的指令就可以根据志位,后面的指令就可以根据CPSR中相应的条件中相应的条件标志位来判断是否执行。标志位来判断是否执行。24TM24(1)CMP相减比较指令相减比较指令CMPcondRn,operand2n功能:功能:CMP指令将寄存器指令将寄存器Rn的值减去的值减去operand2表表示的数值,根据操作结果和寄存器移位情况更新示的数值,根据操作结果和寄存器移位情况更新CPSR中的相应条件标志位。中的相应条件标志位。25TM25(2)CMN负数比较指令负数比较指令CMNcondRn,operand2n功能:功能:CMN指令将寄存器指令将寄存器Rn的值加上的值加上operand2表表示的数值,根据操作结果和寄存器移位情况更新示的数值,根据操作结果和寄存器移位情况更新CPSR中的相应条件标志位。中的相应条件标志位。nCMN相当于不保存操作结果的相当于不保存操作结果的ADDS指令。指令。26TM26(3)TST位测试指令位测试指令TSTcondRn,operand2n功能:功能:CMN指令将寄存器指令将寄存器Rn的值与的值与operand2表示表示的数值按位作逻辑的数值按位作逻辑“与与”操作,根据操作结果和寄操作,根据操作结果和寄存器移位情况更新存器移位情况更新CPSR中的相应条件标志位。中的相应条件标志位。27TM274)TEQ相等测试指令相等测试指令TEQcondRn,operand2n功能:功能:TEQ指令将寄存器指令将寄存器Rn的值与的值与operand2表示表示的数值按位作逻辑的数值按位作逻辑“异或异或”操作,根据操作结果和操作,根据操作结果和寄存器移位情况更新寄存器移位情况更新CPSR中的相应条件标志位。中的相应条件标志位。n可以利用可以利用CPSR中的中的Z位、位、N位判断两个操作数或它位判断两个操作数或它们的符号是否相等。们的符号是否相等。28TM284.1.2乘法指令乘法指令nARM乘法指令完成乘法指令完成2个寄存器中数据的乘法,按个寄存器中数据的乘法,按照保存结果的数据长度可以分为两类:一类为照保存结果的数据长度可以分为两类:一类为32位的乘法指令,即乘法操作的结果为位的乘法指令,即乘法操作的结果为32位;位;另一类为另一类为64位的乘法指令,即乘法操作的结果位的乘法指令,即乘法操作的结果为为64位。位。29TM29132位乘法指令位乘法指令30TM30(1)MULMULcondSRd,Rm,RsnMUL指令实现两个指令实现两个32位的数(可以为无符号数,位的数(可以为无符号数,也可为有符号数)的乘积(也可为有符号数)的乘积(Rm*Rs)并将结果)并将结果存放到一个存放到一个32位的寄存器位的寄存器Rd中;如果指令包含后中;如果指令包含后缀缀“S”,则根据操作结果更新,则根据操作结果更新CPSR中的相应条中的相应条件标志位件标志位(N,Z);Rd和和Rm不能为同一个寄存器不能为同一个寄存器。例:例:MULSR3,R2,R131TM31(2)MLAMLAcondSRd,Rm,Rs,RnnMLA指令实现两个指令实现两个32位的数(可以为无符号数,也位的数(可以为无符号数,也可为有符号数)的乘积,再将乘积(可为有符号数)的乘积,再将乘积(Rm*Rs)加)加上第上第3个操作数个操作数Rn,并将结果存放到一个,并将结果存放到一个32位的寄位的寄存器存器Rd中;如果指令包含后缀中;如果指令包含后缀“S”,则根据操作,则根据操作结果更新结果更新CPSR中的相应条件标志位。中的相应条件标志位。例:例:MLASR0,R1,R2,R332TM32264位乘法指令位乘法指令33TM33(1)UMULLUMULLcondSRdLo,RdHi,Rm,RsnUMULL指令实现两个指令实现两个32位无符号数的乘积,乘积位无符号数的乘积,乘积结果的高结果的高32位存放到一个位存放到一个32位的寄存器位的寄存器RdHi中,中,乘积结果的低乘积结果的低32位存放到另一个位存放到另一个32位的寄存器位的寄存器RdLo中;如果指令包含后缀中;如果指令包含后缀“S”,则根据操作结,则根据操作结果更新果更新CPSR中的相应条件标志位。中的相应条件标志位。例:例:UMULLR0,R1,R2,R334TM34(2)UMLALUMLALcondSRdLo,RdHi,Rm,RsnUMLAL指令将两个指令将两个32位无符号数的位无符号数的64位乘积结果位乘积结果与由(与由(RdHi:RdLo)表示的)表示的64位无符号数相加,位无符号数相加,结果的高结果的高32位存放到寄存器位存放到寄存器RdHi中,结果的低中,结果的低32位存放到寄存器位存放到寄存器RdLo中;如果指令包含后缀中;如果指令包含后缀“S”,则根据操作结果更新,则根据操作结果更新CPSR中的相应条件标志位。中的相应条件标志位。例:例:UMLALR0,R1,R2,R335TM35(3)SMULLSMULLcondSRdLo,RdHi,Rm,RsnSMULL指令实现两个指令实现两个32位有符号数的乘积,乘积位有符号数的乘积,乘积结果的高结果的高32位存放到一个位存放到一个32位的寄存器的位的寄存器的RdHi,乘积结果的低乘积结果的低32位存放到另一个位存放到另一个32位的寄存器的位的寄存器的RdLo;如果指令包含后缀;如果指令包含后缀“S”,则根据操作结果,则根据操作结果更新更新CPSR中的相应条件标志位。中的相应条件标志位。36TM36例例4-21写出执行完下面的程序段后,写出执行完下面的程序段后,R3:R2、R5:R4所存放的所存放的64位乘法结果分别为多少?位乘法结果分别为多少?(验证验证)MVNR0,#0x0MOVR1,#0x1UMULLR2,R3,R1,R0SMULLR4,R5,R1,R0;37TM37(4)SMLALSMLALcondSRdLo,RdHi,Rm,RsnSMLAL指令将两个指令将两个32位有符号数的位有符号数的64位乘积结果位乘积结果与由(与由(RdHi:RdLo)表示的)表示的64位位无无符号数相加,符号数相加,加法结果的高加法结果的高32位存放到寄存器位存放到寄存器RdHi中,乘积结果中,乘积结果的低的低32位存放到寄存器位存放到寄存器RdLo中;如果指令包含后中;如果指令包含后缀缀“S”,则根据操作结果更新,则根据操作结果更新CPSR中的相应条件中的相应条件标志位。标志位。38TM38杂类数据处理指令杂类数据处理指令n前导零计数指令:前导零计数指令:CLZCLZ,n从从ARMV5版本指令系统开始支持该指令版本指令系统开始支持该指令,计算,计算32位寄存器位寄存器操作数从第操作数从第31位开始连续位开始连续“0”位的个数,主要用于计算操位的个数,主要用于计算操作数规范化。作数规范化。n例:例:MOVR4,#0xAACLZR2,R439TM394.2ARM分支指令分支指令分支指令用于实现程序流程的跳转,在分支指令用于实现程序流程的跳转,在ARM程序中有两种方法可以实现程序流程的程序中有两种方法可以实现程序流程的跳转:跳转:n使用专门的分支指令。使用专门的分支指令。n直接向程序计数器直接向程序计数器PC写入跳转地址值。写入跳转地址值。40TM40nARM分支指令可以实现从当前指令向前或向后的分支指令可以实现从当前指令向前或向后的32M的地址空间跳转。的地址空间跳转。n通过向程序计数器通过向程序计数器PC写入跳转地址值,可以实现在写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使的地址空间中的任意跳转,在跳转之前结合使用用MOVLR,PC等类似指令,能够保存程序的返等类似指令,能够保存程序的返回地址值,从而实现在回地址值,从而实现在4GB连续地址空间的子程序连续地址空间的子程序调用。调用。41TM41n分支指令分支指令B分支指令分支指令B可以实现跳转到指定的地址执行程序。可以实现跳转到指定的地址执行程序。n指令的汇编语法格式如下:指令的汇编语法格式如下:B42TM42n在指令的汇编语法中在指令的汇编语法中target_address这个目标地址的计算方这个目标地址的计算方法是:将指令中的法是:将指令中的24位带符号的补码立即数扩展为位带符号的补码立即数扩展为32位;将位;将此此32位数左移两位将得到的值位数左移两位将得到的值写入写入到程序计数器到程序计数器PC中,即中,即跳转到目标地址。能够实现跳转的范围为跳转到目标地址。能够实现跳转的范围为-32MB+32MB。n例:例:BLabel;目标地址由程序标号给出目标地址由程序标号给出CMPR1,#0BEQstop43TM43n带链接的分支指令带链接的分支指令BL带链接的分支指令带链接的分支指令BL可以实现跳转到指定的可以实现跳转到指定的地址执行程序,同时地址执行程序,同时BL指令还将指令还将程序计数器程序计数器PC的的值值(下一条指令地址下一条指令地址)保存到保存到LR寄存器中。寄存器中。指令的汇编语法格式如下:指令的汇编语法格式如下:BL如何从子程序中返回?如何从子程序中返回?44TM44nL决定是否保存返回地址。当有决定是否保存返回地址。当有L时,指令将下一条指令地址时,指令将下一条指令地址保存到保存到LR寄存器中;当无寄存器中;当无L时同时同B指令仅执行跳转,当前指令仅执行跳转,当前PC寄存器的值将不会保存到寄存器的值将不会保存到LR寄存器中。寄存器中。从指令的编码可以从指令的编码可以看出,看出,B与与BL指令的唯一区别是指令的唯一区别是bit24,当,当bit24=0是是B指指令,当令,当bit24=1是是BL指令。指令。nBL跳转指令编码中跳转指令编码中signed_immed_24的含义同的含义同B指令。指令。45TM45n带状态切换的跳转指令带状态切换的跳转指令BXBX指令跳转到指令中所指定的目标地址,目标指令跳转到指令中所指定的目标地址,目标地址处的指令既可以是地址处的指令既可以是ARM指令,也可以是指令,也可以是Thumb指令。指令。指令的汇编语法格式如下:指令的汇编语法格式如下:BX46TM46nBX指令跳转到指令跳转到Rm指定的地址执行程序,如果指定的地址执行程序,如果Rm的的bit0为为1,则跳转时自动将,则跳转时自动将CPSR中的标志位中的标志位T置位,目标地址的代置位,目标地址的代码为码为Thumb代码;如果代码;如果Rm的的bit0为为0,则跳转时自动将,则跳转时自动将CPSR中的中的T标志位清标志位清0,目标地址的代码为,目标地址的代码为ARM代码。代码。47TM47n带链接和状态切换的跳转指令带链接和状态切换的跳转指令BLXBLX指令从指令从ARM指令集跳转到指令中所指定指令集跳转到指令中所指定的目标地址,并将处理器的工作状态由的目标地址,并将处理器的工作状态由ARM状态状态切换到切换到Thumb状态,该指令同时将程序计数器状态,该指令同时将程序计数器PC的当前内容保存到链接寄存器的当前内容保存到链接寄存器R14中。中。48TM48n带链接和状态切换的跳转指令带链接和状态切换的跳转指令BLX(1)由程序标号给出目标地址)由程序标号给出目标地址这种形式的这种形式的BLX指令汇编语法格式如下:指令汇编语法格式如下:BLX49TM49n目标地址目标地址target_address的计算方法:先对指令中定义的有的计算方法:先对指令中定义的有符号符号24位偏移量用符号位扩展为位偏移量用符号位扩展为32位,并将该位,并将该32位数左移位数左移2位,然后将其位,然后将其加到加到程序计数器程序计数器PC中,中,H位(位(bit24)加到目)加到目标地址的第标地址的第1位(位(bit1),),目标地址总是目标地址总是Thumb指令指令。跳。跳转的范围为转的范围为-32MB+32MB。50TM50(2)寄存器的内容作为目标地址)寄存器的内容作为目标地址这种形式的这种形式的BLX指令汇编语法格式如下:指令汇编语法格式如下:BLX51TM51nBLX指令跳转到指令跳转到Rm指定的地址执行程序,如果指定的地址执行程序,如果Rm的的bit0为为1,则跳转时自动将,则跳转时自动将CPSR中的标志位中的标志位T置位,目标地址的置位,目标地址的代码为代码为Thumb代码;如果代码;如果Rm的的bit0为为0,则跳转时自动将,则跳转时自动将CPSR中的中的T标志位清标志位清0,目标地址的代码为,目标地址的代码为ARM代码。代码。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号