欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    ARM体系结构与结构-第三章.ppt

    • 资源ID:70725460       资源大小:1.02MB        全文页数:160页
    • 资源格式: PPT        下载积分:11.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要11.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    ARM体系结构与结构-第三章.ppt

    第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,仅仅跳转;,仅仅跳转;带带返返回回地地址址的的跳跳转转指指令令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 指令的同时将指令的同时将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值的一个值的一个偏偏移量移量;它的值由汇编器来计算,它是;它的值由汇编器来计算,它是 24 位位有符号数有符号数,左移两位后,左移两位后(去掉一位符号位后,有效偏移为(去掉一位符号位后,有效偏移为 25 位位(+/-32 M)),由符号扩展,由符号扩展到到 32 位。位。cond1 0 1Lsigned-immed_24B及BL指令的编码格式0232427 26 2531 28BLLabelxxxxxxLabelxxxMOVPC,LRAddr1Addr2xxxxxxLRPCARM指令分支指令BL指令格式如下:指令格式如下:BLcond Label;PClabel,LR PC-4带带返返回回地地址址的的BLBL指指令令,适适用用于于子子程程序序调调用用,使使用用该该指指令令后后,下下一一条条指指令令的的地地址址拷拷贝贝到到R14(R14(即即LR)LR)寄寄存存器器中中,然然后后跳跳转转到指定地址运行程序。到指定地址运行程序。LabelAddr2Addr21.当程序执行到BL跳转指令时,硬件将下一条指令的地址Addr2装入LR寄存器,并把跳转地址装入程序计数器(PC)2.程序跳转到目标地址Label继续执行,当子程序执行结束后,将LR寄存器内容存入PC,返回调用函数继续执行3.2 指令集介绍ARM指令集ARM数据处理指令数据处理指令大致可分为数据处理指令大致可分为4 4类:类:数据传送指令数据传送指令:MOVMOVMVNMVN;算术运算指令算术运算指令:ADDADDADCADCSUBSUBSBCSBCRSBRSBRSCRSC;逻辑运算指令逻辑运算指令:ANDANDORRORREOREORBICBIC;比较指令比较指令:CMPCMPCMNCMNTSTTSTTEQTEQ。数数据据处处理理指指令令只只能能对对寄寄存存器器的的内内容容进进行行操操作作,而而不不能能对对内内存存中中的的数数据据进进行行操操作作。数数据据处处理理指指令令中中除除比比较较指指令令外外均均可可选择使用选择使用S S后缀,并影响后缀,并影响cpsrcpsr状态标志。状态标志。3.2 指令集介绍ARM指令集ARM数据处理指令数据处理指令大致可分为数据处理指令大致可分为4 4类:类:数据传送指令数据传送指令:MOVMOVMVNMVN;算术运算指令算术运算指令:ADDADDADCADCSUBSUBSBCSBCRSBRSBRSC;RSC;逻辑运算指令逻辑运算指令:ANDANDORRORREOREORBICBIC;比较指令比较指令:CMPCMPCMNCMNTSTTSTTEQTEQ。数数据据处处理理指指令令只只能能对对寄寄存存器器的的内内容容进进行行操操作作,而而不不能能对对内内存存中中的的数数据据进进行行操操作作。数数据据处处理理指指令令中中除除比比较较指指令令外外均均可可选选择择使用使用S S后缀,并影响状态标志。后缀,并影响状态标志。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-cpsrcpsr,本条指令只能在异常模式下使,本条指令只能在异常模式下使用,因为用户和系统模式没有用,因为用户和系统模式没有spsrspsr。ARM数据处理指令数据传送MVNMVN指令格式如下:指令格式如下:MVN condS Rd,operand2;Rd(operand2)MVNMVN指指令令将将立立即即数数或或寄寄存存器器按按位位取取反反后后传传送送到到目目标标寄寄存存器器(Rd),operand2为为一一个个合合法法立立即即数数,因因为为其其具具有有取取反反功功能能,所以可以装载所以可以装载范围更广范围更广的立即数。的立即数。MVNMVN指令举例如下:指令举例如下:MVN R1,#0 xFF;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,operand2ADDcondS 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,operand2;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 CSUBSUB(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,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位相减,并减去低位借位位相减,并减去低位借位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=(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 指令集介绍ARM指令集ARM数据处理指令数据处理指令大致可分为4类:数据传送指令:MOVMVN;算术运算指令:ADDADCSUBSBCRSBRSC;逻辑运算指令:ANDORREORBIC;比较指令:CMPCMNTSTTEQ。数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。数数据据处处理理指指令令中中除除比比较较指指令令外外均可选择使用S后缀,并影响状态标志。AND指令格式如下:ANDcondS Rd,Rn,operand2;RdRn&operand2(&为与运算符)为与运算符)逻辑与操作指令逻辑与操作指令ANDAND指令将指令将operand2operand2的值与寄存的值与寄存器器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的值按位作逻辑的值按位作逻辑“或或”操作,结果保存到操作,结果保存到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的值与寄存器的值与寄存器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)指令格式如下:指令格式如下: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的位号处清零的位号处清零ARM数据处理指令比较指令CMP(Compare)CMP(Compare)指令格式如下:指令格式如下:CMPcond Rn,operand2;Rn-operand2 标志标志N、Z、C、V 比较指令比较指令CMPCMP指令将寄存器指令将寄存器RnRn的值减去的值减去operand2operand2的值,的值,根据操作的结果更新根据操作的结果更新CPSRCPSR中的相应条件标志位,中的相应条件标志位,以便以便后面的后面的指令根据相应的条件标志来判断是否执行。指令根据相应的条件标志来判断是否执行。应用示例:应用示例:CMPR1,#10;R1;R1与与1010比较,设置相关标志位比较,设置相关标志位 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的值,根据操作的结果更新的值,根据操作的结果更新CPSRCPSR中的相应条件标志位,以便后中的相应条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。面的指令根据相应的条件标志来判断是否执行。应用示例:应用示例: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 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 注注意意: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指指令令将将寄寄存存器器RnRn的的值值与与operand2operand2的的值值按按位位作作逻逻辑辑“异异或或”操操作作,根根据据操操作作的的结结果果更更新新CPSRCPSR中中的的相相应应条条件件标标志志位位,以以便便后后面面的的指指令令根根据据相相应应的的条条件件标标志志来来判判断断是否执行。是否执行。应用示例:应用示例:TEQ R0,R1;比较比较R0R0与与R1R1是否相等是否相等注注意意:TEQ指指令令与与EORS指指令令的的区区别别在在于于TEQ指指令令不不保保存存运运算算结结果果。使使用用TEQ进进行行相相等等测测试试时时,常常与与EQ、NE条条件件码码配配合合使使用。当两个数据相等时,用。当两个数据相等时,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位的乘位的乘/乘加指令。乘加指令。与前面的数据处理指令不同,指令中的所有与前面的数据处理指令不同,指令中的所有操作数、目的寄存器操作数、目的寄存器必须为通用寄存器必须为通用寄存器,操作数,操作数不能使用立即数或被移位的寄存器。不能使用立即数或被移位的寄存器。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 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 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位保存到位保存到RdHiRdHi中。中。应用示例:应用示例:UMULL R0,R1,R5,R8;(R1;(R1、R0)=R5R8R0)=R5R8 ;R0=(R5 R8)的低)的低32位位;R1=(R5 R8)的高)的高32位位 ARM指令乘法指令UMLAL指令格式如下:指令格式如下:UMLALcondS RdLo,RdHi,Rm,Rs;(RdLo,RdHi)Rm*Rs+(RdLo,RdHi)6464位位 无无 符符 号号 乘乘 加加 指指 令令 UMLAL(Unsigned UMLAL(Unsigned Multiply Multiply Accumulate Accumulate Long)Long)指指令令将将RmRm和和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位位有有符符号号乘乘法法指指令令SMULL(Signed SMULL(Signed Multiply Multiply Long)Long)指指令令将将RmRm和和RsRs中中的的值值作作有有符符号号数数相相乘乘,结结果果的的低低3232位位保保存存到到RdLoRdLo中中,而高而高3232位保存到位保存到RdHiRdHi中。中。应用示例:应用示例:SMULL R2,R3,R7,R6 ;(R3;(R3、R2)=R7R6 R2)=R7R6 ARM指令乘法指令SMLAL指令格式如下指令格式如下:SMLALcondS RdLo,RdHi,Rm,Rs;(RdLo,RdHi)Rm*Rs+(RdLo,RdHi)6464位位 有有 符符 号号 乘乘 加加 指指 令令 SMLAL(Signed SMLAL(Signed Multiply Multiply Accumulate Accumulate Long)Long)指指令令将将RmRm和和RsRs中中的的值值作作有有符符号号数数相相乘乘,6464位位乘乘积积与与RdHiRdHi、RdLoRdLo相相加加,结结果果的的低低3232位位保保存存到到RdLoRdLo中中,而而高高3232位保存到位保存到RdHiRdHi中。中。应用示例:应用示例:SMLAL R2,R3,R7,R6;(R3;(R3、R2)=R7R6+(R3R2)=R7R6+(R3、R2)R2)杂类的算术指令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程序状态寄存器访问指令(MRS/MSR)ARMARM中中有有两两条条指指令令用用于于在在程程序序状状态态寄寄存存器器(CPSR/SPSRCPSR/SPSR)和)和通用寄存器通用寄存器(R0-R15)R0-R15)之间传送数据。之间传送数据。只只有有程程序序状状态态寄寄存存器器访访问问指指令令(MRS/MSR)(MRS/MSR)才才可可以对状态寄存器以对状态寄存器CPSRCPSR和和SPSRSPSR进行进行读读/写写操作。操作。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)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 Program 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个对当前处理器模式进行编码的位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寄存器可以了解寄存器可以了解进入异常前进入异常前的处理器状态的处理器状态CPSRCPSR。以上两条可以通过,以上两条可以通过,MRSMRS指令把指令把cpsr/spsrcpsr/spsr读入通用寄存器(读入通用寄存器(r0-r15r0-r15)。)。对对CPSRCPSR或或SPSRSPSR寄寄存存器器的的写写操操作作,可可以以切切换换处处理理器器模模式式、或或者允许者允许/禁止禁止IRQ/FIQIRQ/FIQ中断等。中断等。上上面面一一条条可可以以通通过过,MSRMSR指指令令把把通通用用寄寄存存器器(r0-r15r0-r15)或或立立即即数数的的值值,写入写入cpsr/spsrcpsr/spsr。注注意意:不不能能通通过过写写状状态态寄寄存存器器来来改改变变处处理理器器的的状状态态(ARM(ARM态态/Thumb/Thumb态),只能通过带状态切换的分支指令态),只能通过带状态切换的分支指令BX BX 来改变。来改变。程序状态寄存器读指令-MRS 在在ARMARM处处理理器器中中,只只有有MRSMRS指指令令可可以以对对状状态态寄寄存存器器CPSRCPSR和和SPSRSPSR进行读操作。进行读操作。MRScondRd,psrMRS指令格式指令对应编码指令执行的条件码目标寄存器,不能为R15区别CPSR(为0)和SPSR(为1)寄存器 应用示例:应用示例:MRS R1,CPSR;将将CPSRCPSR状态寄存器读取到状态寄存器读取到R1R1中中ARM杂项指令状态寄存器写指令 在ARM处理器中,只有MSR指令可以对状态寄存器CPSR和SPSR进行写操作。与MRS配合使用,可以实现对CPSR或SPSR寄存器的读-修改-写操作,可以切换处理器模式、或者允许/禁止IRQ/FIQ中断等。MSRcondpsr_fields,#immed_8rMSR指令格式1MSRcondpsr_fields,RmMSR指令格式2指令执行的条件码CPSR或SPSR指定传送的区域,可以为以下字母(必须小写)的一个或者多个组合:c 控制域(psr7.0)x 扩展域(psr15.8)s 状态域(psr23.16)f 标志域(psr31.24)要 传 送 到 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/spsr的寄存器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_IRQMRSR0,CPSRBICR0,R0,#0 x80MSRCPSR_c,R0MOVPC,LR 应用示例2:;子程序:禁能IRQ中断DISABLE_IRQMRSR0CPSRORRR0,R0,#0 x80MSRCPSR_c,R0MOVPC,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,;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地址地址偏移量偏移量:立即数、寄存器、寄存器及一个移位常数立即数、寄存器、寄存器及一个移位常数 需要的地址需要的地址=基址寄存器基址寄存器+地址偏移量地址偏移量偏移量的形式如下页偏移量的形式如下页:地址地址偏移量偏移量有以下有以下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)LDR 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;将内存单元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位的有符号半字数据传送到目的寄存器中,同时用符号位扩展到32位。LDRH R0,R1;将内存单元R1中的半字放入R0中,R0中高16位设置成符

    注意事项

    本文(ARM体系结构与结构-第三章.ppt)为本站会员(wuy****n92)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开