精编ARM体系结构与结构--第三章资料课件.ppt

上传人(卖家):晟晟文业 文档编号:5202745 上传时间:2023-02-16 格式:PPT 页数:160 大小:1.16MB
下载 相关 举报
精编ARM体系结构与结构--第三章资料课件.ppt_第1页
第1页 / 共160页
精编ARM体系结构与结构--第三章资料课件.ppt_第2页
第2页 / 共160页
精编ARM体系结构与结构--第三章资料课件.ppt_第3页
第3页 / 共160页
精编ARM体系结构与结构--第三章资料课件.ppt_第4页
第4页 / 共160页
精编ARM体系结构与结构--第三章资料课件.ppt_第5页
第5页 / 共160页
点击查看更多>>
资源描述

1、第3章 ARM指令系统第3章 目录q指令集介绍 ARM指令集 Thumb指令集 ARM指令集跳转(分支)指令 在在ARMARM中有中有两两种方式可以实现程序的种方式可以实现程序的跳转跳转:1 1、使用跳转、使用跳转(分支(分支Branch)指令指令B B或或BLBL跳转跳转2 2、直接向、直接向PCPC寄存器赋值实现跳转寄存器赋值实现跳转,实现在实现在2 23232(4GB4GB)空)空间的跳转,如:间的跳转,如:mov pcmov pc,r2 r2;r2;r2跳转的地址跳转的地址 。B B、BLBL跳转指令:跳转指令:跳转指令跳转指令B B,仅仅跳转;,仅仅跳转;带返回地址的跳转指令带返回地

2、址的跳转指令BLBL,跳转同时还将跳转同时还将BLBL指令指令的下一条指令的地址(返回地址)放入的下一条指令的地址(返回地址)放入LRLR;取指译码执行取指译码执行取指译码执行PC指针?PC8PC4MOV LR,PCMOV PC,#0XFF000000n带返回的跳转指令BLADD R0,R1,R2跳转并执行完跳转并执行完0XFF000000处的子程序,用处的子程序,用 MOV PC,LR 实现返回。实现返回。注意:将暂时放弃注意:将暂时放弃ADD指令的执行。指令的执行。取指译码执行取指译码执行取指译码执行PC指针?PC8PC4n使用PC实现长跳转BL Lable执行执行BL Lable 指令的

3、同时将指令的同时将LR=PC-4,执行完,执行完Lable处的子程序处的子程序后用后用 MOV PC,LR 实现返回实现返回ADD R3,R0,R2B、BL指令格式如下:指令格式如下:BL 为指令跳转的目标地址。为指令跳转的目标地址。如:如:B Label B B、BLBL指令跳转范围限制在当前指令的指令跳转范围限制在当前指令的32M32M字节地址内字节地址内(ARM(ARM指令为字对齐,最低指令为字对齐,最低2 2位地址固定为位地址固定为0)0)。跳转指令中的实际值(跳转指令中的实际值(signed_immed_24)是相对是相对PC值的一个值的一个偏偏移量移量;它的值由汇编器来计算,它是;

4、它的值由汇编器来计算,它是 24 位位有符号数有符号数,左移两位后,左移两位后(去掉一位符号位后,有效偏移为(去掉一位符号位后,有效偏移为 25 位位(+/-32 M)),由符号扩展,由符号扩展到到 32 位。位。cond1 0 1Lsigned-immed_24B及BL指令的编码格式0232427 26 2531 28BL LabelxxxxxxLabelxxxMOV PC,LRAddr1Addr2xxxxxxLRPC ARM指令分支指令BL指令格式如下:指令格式如下:BLcond Label;PClabel,LR PC-4带返回地址的带返回地址的BLBL指令,适用于子程序调用,使用该指令指

5、令,适用于子程序调用,使用该指令后,后,下一条指令的地址下一条指令的地址拷贝到拷贝到R14(R14(即即LR)LR)寄存器中,然后跳转寄存器中,然后跳转到指定地址运行程序。到指定地址运行程序。LabelAddr2Addr21.当程序执行到BL跳转指令时,硬件将下一条指令的地址Addr2装入LR寄存器,并把跳转地址装入程序计数器(PC)2.程序跳转到目标地址Label继续执行,当子程序执行结束后,将LR寄存器内容存入PC,返回调用函数继续执行3.2 指令集介绍 ARM指令集ARM数据处理指令数据处理指令大致可分为数据处理指令大致可分为4 4类:类:数据传送指令数据传送指令:MOVMOVMVNMV

6、N;算术运算指令算术运算指令:ADDADDADCADCSUBSUBSBCSBCRSBRSBRSCRSC;逻辑运算指令逻辑运算指令:ANDANDORRORREOREORBICBIC;比较指令比较指令:CMPCMPCMNCMNTSTTSTTEQTEQ。数据处理指令只能对数据处理指令只能对寄存器寄存器的内容进行操作,而不能对的内容进行操作,而不能对内存中的数据进行操作。数据处理指令中除比较指令外均可内存中的数据进行操作。数据处理指令中除比较指令外均可选择使用选择使用S S后缀,并影响后缀,并影响cpsrcpsr状态标志。状态标志。3.2 指令集介绍 ARM指令集ARM数据处理指令数据处理指令大致可分

7、为数据处理指令大致可分为4 4类:类:数据传送指令数据传送指令:MOVMOVMVNMVN;算术运算指令算术运算指令:ADDADDADCADCSUBSUBSBCSBCRSBRSBRSC;RSC;逻辑运算指令逻辑运算指令:ANDANDORRORREOREORBICBIC;比较指令比较指令:CMPCMPCMNCMNTSTTSTTEQTEQ。数据处理指令只能对寄存器的内容进行操作,而不能对数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。内存中的数据进行操作。数据处理指令中除比较指令外数据处理指令中除比较指令外均可选择均可选择使用使用S S后缀,并影响状态标志。后缀,并影响状态标志

8、。ARM数据处理指令数据传送MOVMOV指令格式如下:指令格式如下:MOVcondS Rd,operand2;Rdoperand2 MOVMOV指令将立即数(指令将立即数(合法合法)或寄存器传送到目标寄存器)或寄存器传送到目标寄存器(RdRd),可用于移位运算等操作。),可用于移位运算等操作。MOVMOV指令举例如下:指令举例如下:MOV R1,#0 x10;R1=0 x10 R1=0 x10 MOV R0,R1;R0=R1 R0=R1 MOV R2,R2,LSL#2MOVS PC,LR;PCPC为目标寄存器时,为目标寄存器时,PC=LRPC=LR,同时,同时spsr-spsr-cpsrcps

9、r,本条指令只能在异常模式下使,本条指令只能在异常模式下使用,因为用户和系统模式没有用,因为用户和系统模式没有spsrspsr。ARM数据处理指令数据传送MVNMVN指令格式如下:指令格式如下:MVN condS Rd,operand2;Rd(operand2)MVNMVN指令将立即数或寄存器指令将立即数或寄存器按位取反按位取反后传送到目标寄存器后传送到目标寄存器(Rd),),operand2为一个合法立即数,因为其具有取反功能,为一个合法立即数,因为其具有取反功能,所以可以装载所以可以装载范围更广范围更广的立即数。的立即数。MVNMVN指令举例如下:指令举例如下:MVN R1,#0 xFF;

10、R1=0 xFFFFFF00 MVN R1,R2;将将R2取反,结果存到取反,结果存到R1MVN R2,#0;将将-1放入放入R2 3.2 指令集介绍 ARM指令集ARM数据处理指令数据处理指令大致可分为4类:数据传送指令:MOVMVN;算术运算指令:ADDADCSUBSBCRSBRSC;逻辑运算指令:ANDORREORBIC;比较指令:CMPCMNTSTTEQ。数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。数据处理指令中除比较指令外数据处理指令中除比较指令外均可选择使用S后缀,并影响状态标志。ADD(addition加)指令格式如下:ADDcondS Rd,Rn,op

11、erand2ADDcondS Rd,Rn,operand2;RdRn+operand2 加法运算指令加法运算指令ADDADD将将operand2operand2的值与的值与RnRn的值相的值相加,结果保存到加,结果保存到RdRd寄存器,寄存器,operand2 为立即数时,为立即数时,必须为合法立即数必须为合法立即数。应用示例:应用示例:ADDS R1,R1,#1;R1=R1+1;R1=R1+1,并影响标志位,并影响标志位 ADD R1,R1,R2;R1=R1+R2;R1=R1+R2 ARM数据处理指令算术运算ADCADC指令格式如下:指令格式如下:ADCcondS Rd,Rn,operand

12、2;RdRn+operand2+Carry 带进位加法指令带进位加法指令ADCADC将将operand2operand2的值与的值与RnRn的值相加,的值相加,再加上再加上CPSRCPSR中的中的C C标志位,结果保存到标志位,结果保存到RdRd寄存器。寄存器。应用示例(使用应用示例(使用ADCADC实现实现6464位加法,结果存于位加法,结果存于R1R1、R0R0中):中):ADDS R0,R0,R2;R0;R0等于低等于低3232位相加,并影响标志位位相加,并影响标志位 ADC R1,R1,R3;R1;R1等于高等于高3232位相加,并加上低位相加,并加上低3232位进位位进位C CSUB

13、SUB(subsubtracttract减减)指令格式如下:指令格式如下:SUBcondS SUBcondS Rd,Rn,operand2;Rd,Rn,operand2;RdRn-operand2 减法运算指令减法运算指令SUBSUB指令用寄存器指令用寄存器RnRn减去减去operand2operand2,结果保存到结果保存到RdRd中。中。应用示例:应用示例:SUBR0,R0,#1;R0=R0-1;R0=R0-1,不影响标志位,不影响标志位 SUBS R2,R1,R2;R2=R1-R2;R2=R1-R2,并影响标志位,并影响标志位SBCSBC指令格式如下:指令格式如下:SBCcondS Rd

14、,Rn,operand2;RdRn-operand2-(非非)Carry带进位减法指令带进位减法指令SBCSBC用寄存器用寄存器RnRn减去减去operand2operand2,再减去再减去CPSRCPSR中的中的C C标志位的标志位的非非(减法中产生借位时(减法中产生借位时C C位位=0=0),结果保存到),结果保存到RdRd中。中。应用示例(使用应用示例(使用SBCSBC实现实现6464位减法,结果存于位减法,结果存于R1R1、R0R0中):中):SUBS R0,R0,R2;低;低3232位相减,并影响标志位位相减,并影响标志位SBC R1,R1,R3;高;高3232位相减,并减去低位借位

15、位相减,并减去低位借位C C的的;反码;反码 ARM数据处理指令算术运算RSBRSB(R Reverse Subtracteverse Subtract)指令格式如下:)指令格式如下:RSBcondS Rd,Rn,operand2;Rdoperand2-Rn 逆向减法运算指令逆向减法运算指令RSBRSB指令将指令将operand2operand2的值减去的值减去RnRn,结,结果保存到果保存到RdRd中。中。应用示例:应用示例:RSB R3,R1,#0 xFF00;R3=0 xFF00-R1;R3=0 xFF00-R1 RSBS R1,R2,R2,LSL#2;R1=(R22)-R2=R2;R1

16、=(R22)-R2=R23 3 RSCRSC指令格式如下:指令格式如下:RSCcondS Rd,Rn,operand2 ;Rdoperand2-Rn-(NOT)Carry 带进位逆向减法指令带进位逆向减法指令RSCRSC指令用寄存器指令用寄存器operand2operand2减去减去RnRn,再减去,再减去CPSRCPSR中的中的C C位的非位的非(减法中产生借位时(减法中产生借位时C位位=0),),结果保存到结果保存到RdRd中。中。应用示例(使用应用示例(使用RSCRSC指令实现求指令实现求6464位数值的负数位数值的负数 ):):RSBS R2,R0,#0 RSC R3,R1,#03.2

17、 指令集介绍 ARM指令集ARM数据处理指令数据处理指令大致可分为4类:数据传送指令:MOVMVN;算术运算指令:ADDADCSUBSBCRSBRSC;逻辑运算指令:ANDORREORBIC;比较指令:CMPCMNTSTTEQ。数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。数据处理指令中除比较指令外数据处理指令中除比较指令外均可选择使用S后缀,并影响状态标志。AND指令格式如下:ANDcondS Rd,Rn,operand2;RdRn&operand2(&为与运算符)为与运算符)逻辑与操作指令逻辑与操作指令ANDAND指令将指令将operand2operand2的值与寄

18、的值与寄存器存器RnRn的值的值按位按位作逻辑作逻辑“与与”操作,结果保存到操作,结果保存到RdRd中。中。应用示例:应用示例:ANDS R0,R0,#0 x01;R0=R0&0 x01;R0=R0&0 x01,取出最低位数据。,取出最低位数据。;影响标志位影响标志位AND R2,R1,R3;R2=R1&R3;R2=R1&R3 ORR指令格式如下:ORRcondS Rd,Rn,operand2;RdRn|operand2 (|为或运算符)为或运算符)逻辑或操作指令逻辑或操作指令ORRORR指令将指令将operand2operand2的值与寄的值与寄存器存器RnRn的值按位作逻辑的值按位作逻辑“

19、或或”操作,结果保存到操作,结果保存到RdRd中。中。应用示例:应用示例:ORR R0,R0,#0 x0F;将将R0R0的低的低4 4位置位置1 1 MOV R1,R2,LSR#24 ORR R3,R1,R3,LSL#8;使用使用ORRORR指令将指令将R2R2的高的高8 8位数据移入到位数据移入到R3R3低低8 8位中位中 ARM数据处理指令逻辑运算指令EOREOR指令格式如下:指令格式如下:EORcondS Rd,Rn,operand2;RdRn operand2 (为异或运算符)为异或运算符)逻辑异或操作指令逻辑异或操作指令EOREOR指令将指令将operand2operand2的值与寄

20、存器的值与寄存器RnRn的值按位作逻辑的值按位作逻辑“异或异或”操作操作(不相同的位为不相同的位为1 1,相同的位为,相同的位为0 0),),结果保存到结果保存到RdRd中。中。应用示例:应用示例:EORR1,R1,#0 x0F;将将R1R1的低的低4 4位取反位取反 EOR R2,R1,R0;R2=R1R0;R2=R1R0 EORSR0,R5,#0 x01;将将R5R5和和0 x010 x01进行逻辑异或,进行逻辑异或,;结果保存到结果保存到R0R0,并影响标志位,并影响标志位 ARM数据处理指令逻辑运算指令BIC(Bit Clear)BIC(Bit Clear)指令格式如下:指令格式如下:

21、BICcondS Rd,Rn,operand2;RdRn&(operand2)位清除位清除指令指令BICBIC指令将寄存器指令将寄存器RnRn的值与的值与operand2operand2的值的反的值的反码按位作逻辑码按位作逻辑“与与”操作,结果保存到操作,结果保存到RdRd中。中。应用示例:应用示例:BIC R1,R1,#0 x0F;将将R1R1的低的低4 4位清零,其它位不变位清零,其它位不变 BIC R1,R2,R3;将将R3R3的反码和的反码和R2R2相逻辑相逻辑“与与”,;结果保存到结果保存到R1R1中,实际上将中,实际上将R2R2中中;与与R3R3中为中为1 1的位号处清零的位号处清

22、零 ARM数据处理指令比较指令CMP(Compare)CMP(Compare)指令格式如下:指令格式如下:CMPcond Rn,operand2;Rn-operand2 标志标志N、Z、C、V 比较指令比较指令CMPCMP指令将寄存器指令将寄存器RnRn的值减去的值减去operand2operand2的值,的值,根据操作的结果更新根据操作的结果更新CPSRCPSR中的相应条件标志位,中的相应条件标志位,以便以便后面的后面的指令根据相应的条件标志来判断是否执行。指令根据相应的条件标志来判断是否执行。应用示例:应用示例:CMPR1,#10;R1;R1与与1010比较,设置相关标志位比较,设置相关标

23、志位 CMPR1,R2;R1R1与与R2R2比较,设置相关标比较,设置相关标志位志位注意注意:CMP指令与指令与SUBS指令的区别在于指令的区别在于CMP指令不保存运算指令不保存运算结果。结果。ARM数据处理指令比较取反指令CMN(Compare Negative)CMN(Compare Negative)指令格式如下:指令格式如下:CMNcond Rn,operand2;Rn+operand2 标志标志N、Z、C、V 负数比较指令负数比较指令CMNCMN指令使用寄存器指令使用寄存器RnRn的值加上的值加上operand2operand2的值,根据操作的结果更新的值,根据操作的结果更新CPSR

24、CPSR中的相应条件标志位,以便后中的相应条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。面的指令根据相应的条件标志来判断是否执行。应用示例:应用示例:CMN R0,#1;R0+1;R0+1(或(或R0-R0-(-1-1),影响条件标志),影响条件标志位位注意注意:CMN指令与指令与ADDS指令的区别在于指令的区别在于CMN指令不保存运算指令不保存运算结果。结果。CMN指令可用于负数比较:指令可用于负数比较:比如比如CMN R0,#1指令则表示指令则表示R0与与-1比较。比较。ARM数据处理指令位测试指令TST(test)TST(test)指令格式如下:指令格式如下:TSTcond

25、 Rn,operand2;Rn&operand2 影响标志影响标志N、Z、C 位位测试指令测试指令TSTTST指令将寄存器指令将寄存器RnRn的值与的值与operand2operand2的值按位的值按位作逻辑作逻辑“与与”操作,根据操作的结果更新操作,根据操作的结果更新CPSRCPSR中的相应条件中的相应条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。标志位,以便后面的指令根据相应的条件标志来判断是否执行。应用示例:应用示例:TSTR0,#0 x01;判断判断R0R0的最低位是否为的最低位是否为0 0 TSTR1,#0 x0F;判断判断R1R1的低的低4 4位是否为位是否为0 0

26、注意注意:TST指令与指令与ANDS指令的区别在于指令的区别在于TST指令不保存运算指令不保存运算结果。结果。TST指令通常与指令通常与EQ、NE条件码配合使用,当所有测试条件码配合使用,当所有测试位均为位均为0时,时,EQ有效(有效(Z=1),而只要有一个测试位不为),而只要有一个测试位不为0,则则NE有效(有效(Z=0)。)。ARM数据处理指令比较指令TEQ(Test Equal)TEQ(Test Equal)指令格式如下:指令格式如下:TEQcond Rn,operand2;Rn operand2,影响标志影响标志N、Z、C、V 相等测试指令相等测试指令TEQTEQ指令将寄存器指令将寄存

27、器RnRn的值与的值与operand2operand2的的值按位作逻辑值按位作逻辑“异或异或”操作,根据操作的结果更新操作,根据操作的结果更新CPSRCPSR中的中的相应条件标志位,以便后面的指令根据相应的条件标志来判断相应条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。是否执行。应用示例:应用示例:TEQ R0,R1;比较比较R0R0与与R1R1是否相等是否相等注意注意:TEQ指令与指令与EORS指令的区别在于指令的区别在于TEQ指令不保存运算指令不保存运算结果。使用结果。使用TEQ进行相等测试时,常与进行相等测试时,常与EQ、NE条件码配合使条件码配合使用。当两个数据相等时,用

28、。当两个数据相等时,EQ有效有效(Z=1);否则;否则NE有效有效(Z=0)。ARM指令小节目录1.指令格式2.条件码3.存储器访问指令4.数据处理指令5.乘法指令6.ARM分支指令7.协处理器指令8.杂项指令9.伪指令 ARM指令集乘法指令ARMARM微处理器支持的乘法指令与乘加指令微处理器支持的乘法指令与乘加指令共有共有6 6条,可分为条,可分为运算结果为运算结果为3232位位和和运算结果为运算结果为6464位位的两类。的两类。n3232位乘法位乘法/乘加指令;乘加指令;n3232位结果为位结果为64位的乘位的乘/乘加指令。乘加指令。与前面的数据处理指令不同,指令中的所有与前面的数据处理指

29、令不同,指令中的所有操作数、目的寄存器操作数、目的寄存器必须为通用寄存器必须为通用寄存器,操作数,操作数不能使用立即数或被移位的寄存器。不能使用立即数或被移位的寄存器。ARM指令乘法指令MUL指令格式如下:指令格式如下:MULcondS Rd,Rm,Rs;RdRm*Rs (RdRm)32位乘法指令位乘法指令MUL(Multiply)指令将指令将Rm和和Rs中的值相乘,中的值相乘,结果的结果的低低32位保存到位保存到Rd中。中。应用示例:应用示例:MUL R1,R2,R3 ;R1=R2R3低低32位位;R2=0 x00FFFFFF,R3=0 x00123456,R1=0 x55EDCBAA;0

30、x00FFFFFF*0 x00123456=123455EDCBAA MULS R0,R3,R7 ;R0=R3R7,同时影响标志位,同时影响标志位 ARM指令乘法指令MLA指令格式如下:指令格式如下:MLAcondS Rd,Rm,Rs,Rn ;RdRm*Rs+Rn (RdRm)32位乘加指令位乘加指令MLA(Multiply Accumulate)指令将指令将Rm和和Rs中的值相乘,再将乘积加上第中的值相乘,再将乘积加上第3个操作数,结果的个操作数,结果的低低32位位保存到保存到Rd中。中。应用示例:应用示例:MLA R0,R1,R2,R3;R0=(R1 R2+R3)低)低32位位 MLAS

31、R0,R1,R2,R3;R0=(R1 R2+R3)低)低32位,同时设置位,同时设置CPSR中的相关条件中的相关条件标志位标志位 ARM指令乘法指令UMULL指令格式如下:指令格式如下:UMULLcondS RdLo,RdHi,Rm,Rs;(RdLo,RdHi)Rm*Rs 6464位无符号乘法指令位无符号乘法指令UMULL(Unsigned Multiply long)UMULL(Unsigned Multiply long)指指令将令将RmRm和和RsRs中的值作无符号数相乘,结果的低中的值作无符号数相乘,结果的低3232位保存到位保存到RdLoRdLo中,而高中,而高3232位保存到位保存

32、到RdHiRdHi中。中。应用示例:应用示例:UMULL R0,R1,R5,R8;(R1;(R1、R0)=R5R0)=R5R8R8 ;R0=(R5 R8)的低)的低32位位;R1=(R5 R8)的高)的高32位位 ARM指令乘法指令UMLAL指令格式如下:指令格式如下:UMLALcondS RdLo,RdHi,Rm,Rs;(RdLo,RdHi)Rm*Rs+(RdLo,RdHi)64 64位无符号乘加指令位无符号乘加指令UMLAL(Unsigned Multiply UMLAL(Unsigned Multiply Accumulate Long)Accumulate Long)指令将指令将RmR

33、m和和RsRs中的值作无符号数相乘,中的值作无符号数相乘,6464位乘积与位乘积与RdHiRdHi、RdLoRdLo相加,结果的低相加,结果的低3232位保存到位保存到RdLoRdLo中,而中,而高高3232位保存到位保存到RdHiRdHi中。中。应用示例:应用示例:UMLAL R0,R1,R5,R8 ;(R1、R0)=R5R8+(R1、R0);R0=(R5 R8)的低)的低32位位 R0;R1=(R5 R8)的高)的高32位位 R1 ARM指令乘法指令SMULL指令格式如下:指令格式如下:SMULLcondS RdLo,RdHi,Rm,Rs;(RdLo,RdHi)Rm*Rs6464位有符号乘

34、法指令位有符号乘法指令SMULL(Signed Multiply Long)SMULL(Signed Multiply Long)指令将指令将RmRm和和RsRs中的值作有符号数相乘,结果的低中的值作有符号数相乘,结果的低3232位保存到位保存到RdLoRdLo中,中,而高而高3232位保存到位保存到RdHiRdHi中。中。应用示例:应用示例:SMULL R2,R3,R7,R6 ;(R3;(R3、R2)=R7R2)=R7R6 R6 ARM指令乘法指令SMLAL指令格式如下指令格式如下:SMLALcondS RdLo,RdHi,Rm,Rs;(RdLo,RdHi)Rm*Rs+(RdLo,RdHi)

35、6464位有符号乘加指令位有符号乘加指令SMLAL(Signed Multiply SMLAL(Signed Multiply Accumulate Long)Accumulate Long)指令将指令将RmRm和和RsRs中的值作有符号数相乘,中的值作有符号数相乘,6464位乘积与位乘积与RdHiRdHi、RdLoRdLo相加,结果的低相加,结果的低3232位保存到位保存到RdLoRdLo中,而中,而高高3232位保存到位保存到RdHiRdHi中。中。应用示例:应用示例:SMLAL R2,R3,R7,R6;(R3;(R3、R2)=R7R2)=R7R6+(R3R6+(R3、R2)R2)杂类的算

36、术指令 ARM V5及以上版本有一条指令及以上版本有一条指令CLZ(count left zeros)该指令用于计算最高位与第一个该指令用于计算最高位与第一个“1”之间的之间的“0”的个数。的个数。用于以下两种场合:用于以下两种场合:1、使操作数规范化(使其最高为、使操作数规范化(使其最高为1)时,计算需要左移的位数。)时,计算需要左移的位数。2、确定优先级掩码中的最高位、确定优先级掩码中的最高位CLZ R1,R2;把;把R2中第一个中第一个“1”前面的前面的“0”的个数放入的个数放入R1MOV R2,R2,LSL R1;把;把R2左移左移R1位,使位,使R2的的bit31=1程序状态寄存器访

37、问指令(MRS/MSR)ARM ARM中有两条指令用于在中有两条指令用于在程序状态寄存器程序状态寄存器(CPSR/SPSRCPSR/SPSR)和)和通用寄存器通用寄存器(R0-R15)R0-R15)之间传送数据。之间传送数据。只有程序状态寄存器访问指令只有程序状态寄存器访问指令(MRS/MSR)(MRS/MSR)才可才可以对状态寄存器以对状态寄存器CPSRCPSR和和SPSRSPSR进行进行读读/写写操作。操作。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)

38、R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq程序状态寄存器CPSR CPSR(Current Pro

39、gram Status Register)当前程序状态寄存器 SPSR(Saved Program Status Register)程序状态保存寄存器 每种异常都有自己的SPSR(由于用户模式和系统模式不是异常模式,所以它们没有SPSR),当异常发生时SPSR保存CPSR的当前值,异常退出时可通过SPSR恢复CPSR。1.6 程序状态寄存器 简介 ARM内核包含1个CPSR和5个供异常处理程序使用的SPSR。CPSR反映了当前处理器的状态,其包含:4个条件代码标志(符号(N)、零(Z)、进位(C)和溢出(V));2个中断禁止位(F/I),分别控制一种类型的中断;5个对当前处理器模式进行编码的位

40、M4:0;1个用于指示当前执行指令(ARM还是Thumb)的T位。NZCVQIM0M1M2M3M4TF.31 30 29 28 27 26 8 7 6 5 4 3 2 1 01.6 程序状态寄存器 简介条件代码标志保留控制位溢出标志进位或借位扩展零符号标志位IRQ禁止FIQ禁止状态位模式位NZCVIM0M1M2M3M4TFCPSR寄存器的格式程序状态寄存器访问指令(MRS/MSR)读读CPSRCPSR可以了解当前处理器(无论出于何种模式下)的工可以了解当前处理器(无论出于何种模式下)的工作状态,。作状态,。读读SPSRSPSR寄存器可以了解寄存器可以了解进入异常前进入异常前的处理器状态的处理器

41、状态CPSRCPSR。以上两条可以通过,以上两条可以通过,MRSMRS指令把指令把cpsr/spsrcpsr/spsr读入通用寄存器(读入通用寄存器(r0-r15r0-r15)。)。对对CPSRCPSR或或SPSRSPSR寄存器的写操作,可以寄存器的写操作,可以切换切换处理器模式、或处理器模式、或者允许者允许/禁止禁止IRQ/FIQIRQ/FIQ中断等。中断等。上面一条可以通过,上面一条可以通过,MSRMSR指令把通用寄存器(指令把通用寄存器(r0-r15r0-r15)或立即数的值,)或立即数的值,写入写入cpsr/spsrcpsr/spsr。注意:不能通过注意:不能通过写写状态寄存器来改变处

42、理器的状态状态寄存器来改变处理器的状态(ARM(ARM态态/Thumb/Thumb态),只能通过带状态切换的分支指令态),只能通过带状态切换的分支指令BX BX 来改变。来改变。程序状态寄存器读指令-MRS 在在ARMARM处理器中,只有处理器中,只有MRSMRS指令可以对状态寄存器指令可以对状态寄存器CPSRCPSR和和SPSRSPSR进行读操作。进行读操作。MRScond Rd,psrMRS指令格式指令对应编码指令执行的条件码目标寄存器,不能为R15区别CPSR(为0)和SPSR(为1)寄存器 应用示例:应用示例:MRS R1,CPSR;将将CPSRCPSR状态寄存器读取到状态寄存器读取到

43、R1R1中中 ARM杂项指令状态寄存器写指令 在ARM处理器中,只有MSR指令可以对状态寄存器CPSR和SPSR进行写操作。与MRS配合使用,可以实现对CPSR或SPSR寄存器的读-修改-写操作,可以切换处理器模式、或者允许/禁止IRQ/FIQ中断等。MSRcond psr_fields,#immed_8rMSR指令格式1MSRcond psr_fields,RmMSR指令格式2指令执行的条件码CPSR或SPSR指定传送的区域,可以为以下字母(必须小写)的一个或者多个组合:c 控制域(psr7.0)x 扩展域(psr15.8)s 状态域(psr23.16)f 标志域(psr31.24)要传送到

44、cpsr/spsr的源寄存器要传送到cpsr/spsr的(合法)立即数保存要传送到状态寄存器指定域数据的源寄存器 ARM杂项指令状态寄存器写指令 在ARM处理器中,只有MSR指令可以对状态寄存器CPSR和SPSR进行写操作。与MRS配合使用,可以实现对CPSR或SPSR寄存器的读-修改-写操作,可以切换处理器模式、或者允许/禁止IRQ/FIQ中断等。指令执行的条件码CPSR(r=0)或SPSR(r=1)指定传送的区域,可以为以下字母(必须小写)的一个或者组合:c 控制域(psr7.0)x 扩展域(psr15.8)s 状态域(psr23.16)f 标志域(psr31.24)要传送到cpsr/sp

45、sr的寄存器MSR指令1编码MSR指令2编码Rotate:X2后为移位位数8_bit_immediate:8位合法立即数(1)(2)(3)(4)ARM杂项指令状态寄存器写指令 在ARM处理器中,只有MSR指令可以对状态寄存器CPSR和SPSR进行写操作。与MRS配合使用,可以实现对CPSR或SPSR寄存器的读-修改-写操作,可以切换处理器模式、或者允许/禁止IRQ/FIQ中断等。应用示例1:;子程序:使能IRQ中断ENABLE_IRQ MRS R0,CPSR BIC R0,R0,#0 x80 MSR CPSR_c,R0 MOV PC,LR 应用示例2:;子程序:禁能IRQ中断DISABLE_I

46、RQ MRS R0 CPSR ORR R0,R0,#0 x80 MSR CPSR_c,R0 MOV PC,LR 1.将CPSR寄存器内容读到R0;2.修改对应于CPSR中的I控制位;3.将修改后的值写回 CPSR寄存器的对应控制域;4.返回上一层函数;ARM指令集存储器访问指令 包括:单寄存器操作指令:LDR/STR SWP多寄存器操作指令:LDM/STMLoad指令用于从指令用于从存储器存储器(包括内存和外存)中读取数据放入(包括内存和外存)中读取数据放入寄存器寄存器中。中。LDR R1,R2,R5LDR R1,R2,R5!;R1;R1 R2+R5,R2R2+R5,R2R2+R5R2+R5,

47、;R2+R5R2+R5的内容为地址,的内容为地址,R2+R5 R2+R5 为该地址处的数据为该地址处的数据 Store指令用于将指令用于将寄存器寄存器的数据保存到的数据保存到存储器存储器。STR R1,R2,R5STR R1,R2,R5!;R1;R1 R2+R5,R2R2+R5,R2R2+R5R2+R5;R2+R5;R2+R5的内容为地址,的内容为地址,R2+R5 R2+R5 为该地址处的数据为该地址处的数据各种类型的各种类型的Load/Store指令的寻址方式由两部分组成:指令的寻址方式由两部分组成:1基址基址寄存器:一般寄存器:一般使用通用寄存器使用通用寄存器 2地址地址偏移量偏移量:立即

48、数、寄存器、寄存器及一个移位常数立即数、寄存器、寄存器及一个移位常数 需要的地址需要的地址=基址寄存器基址寄存器+地址偏移量地址偏移量偏移量的形式如下页偏移量的形式如下页:地址地址偏移量偏移量有以下有以下3 3种格式:种格式:立即数立即数。如:如:LDR R1,R0,#0 x12 寄存器寄存器。如:如:LDR R1,R0,R2 寄存器及移位常数寄存器及移位常数。如:如:LDR R1,R0,R2,LSL#2 LDR和STR指令应用示例:(1)LDRR0,R1;R0R1(2)LDR R0,R1,R2(3)LDR R0,R1,8(4)LDR R0,R1,R2!(5)LDR R0,R1,8!(6)LD

49、R R0,R1,R2,LSL2!(7)LDR R0,R1,R2(8)LDR R0,R1,R2,LSL2(9)STR R0,R1,#0XC;R0R1+0XC(10)STR R0,R1,#8;R0R1,R1=R1+8用于将存储器中的一个字节或半字数据传送到寄存器。常用的加载指令如下:LDRB字节数据加载指令LDRH半字数据加载指令LDRSB有符号字节数据加载指令LDRSH有符号半字数据加载指令Byte HalfSign3.2 指令集介绍LDRB指令的格式为:LDRB Rd,LDRB用于从存储器中将一个8位的字节数据传送到目的寄存器Rd中,同时将寄存器的高24位清零。LDRB R0,R1;将内存单元

50、R1中的字节放入R0中,R0中高24位设置成0LDRSB指令的格式为:LDRSB Rd,LDRSB指令用于从存储器中将一个8位的有符号字节数据传送到目的寄存器中,同时用符号位扩展到32位。LDRSB R0,R1;将内存单元R1中的字节放入R0中,R0中高24位设置成符号位LDRH指令的格式为:LDR条件H 目的寄存器,LDRH用于从存储器中将一个16位的半字数据传送到目的寄存器中,同时将寄存器的高16位清零。LDRH R0,R1;将内存单元R1中的半字放入R0中,R0中高16位设置成0LDRSH指令的格式为:LDR条件SH 目的寄存器,LDRSH指令用于从存储器中将一个16位的有符号半字数据传

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(精编ARM体系结构与结构--第三章资料课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|