ARM体系结构与结构-第三章.ppt
《ARM体系结构与结构-第三章.ppt》由会员分享,可在线阅读,更多相关《ARM体系结构与结构-第三章.ppt(160页珍藏版)》请在三一办公上搜索。
1、第3章 ARM指令系统,第3章 目录,指令集介绍ARM指令集Thumb指令集,ARM指令集跳转(分支)指令,在ARM中有两种方式可以实现程序的跳转:1、使用跳转(分支Branch)指令B或BL跳转2、直接向PC寄存器赋值实现跳转,实现在232(4GB)空间的跳转,如:mov pc,r2;r2跳转的地址。B、BL跳转指令:跳转指令B,仅仅跳转;带返回地址的跳转指令BL,跳转同时还将BL指令的下一条指令的地址(返回地址)放入LR;,取指,译码,执行,取指,译码,执行,取指,译码,执行,?,PC8,MOV LR,PC,MOV PC,#0XFF000000,带返回的跳转指令BL,ADD R0,R1,R
2、2,跳转并执行完0XFF000000处的子程序,用 MOV PC,LR 实现返回。注意:将暂时放弃ADD指令的执行。,取指,译码,执行,取指,译码,执行,取指,译码,执行,?,PC8,使用PC实现长跳转,BL Lable,执行BL Lable 指令的同时将LR=PC-4,执行完Lable处的子程序后用 MOV PC,LR 实现返回,ADD R3,R0,R2,B、BL指令格式如下:BL 为指令跳转的目标地址。如:B Label B、BL指令跳转范围限制在当前指令的32M字节地址内(ARM指令为字对齐,最低2位地址固定为0)。跳转指令中的实际值(signed_immed_24)是相对PC值的一个偏
3、移量;它的值由汇编器来计算,它是 24 位有符号数,左移两位后(去掉一位符号位后,有效偏移为 25 位(+/-32 M)),由符号扩展到 32 位。,B及BL指令的编码格式,0,23,24,27 26 25,31 28,ARM指令分支指令,BL指令格式如下:BLcond Label;PClabel,LR PC-4带返回地址的BL指令,适用于子程序调用,使用该指令后,下一条指令的地址拷贝到R14(即LR)寄存器中,然后跳转到指定地址运行程序。,Addr2,1.当程序执行到BL跳转指令时,硬件将下一条指令的地址Addr2装入LR寄存器,并把跳转地址装入程序计数器(PC),2.程序跳转到目标地址La
4、bel继续执行,当子程序执行结束后,将LR寄存器内容存入PC,返回调用函数继续执行,3.2 指令集介绍,ARM指令集ARM数据处理指令,数据处理指令大致可分为4类:数据传送指令:MOVMVN;算术运算指令:ADDADCSUBSBCRSBRSC;逻辑运算指令:ANDORREORBIC;比较指令:CMPCMNTSTTEQ。数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。数据处理指令中除比较指令外均可选择使用S后缀,并影响cpsr状态标志。,3.2 指令集介绍,ARM指令集ARM数据处理指令,数据处理指令大致可分为4类:数据传送指令:MOVMVN;算术运算指令:ADDADCSU
5、BSBCRSBRSC;逻辑运算指令:ANDORREORBIC;比较指令:CMPCMNTSTTEQ。数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。数据处理指令中除比较指令外均可选择使用S后缀,并影响状态标志。,ARM数据处理指令数据传送,MOV指令格式如下:MOVcondS Rd,operand2;Rdoperand2 MOV指令将立即数(合法)或寄存器传送到目标寄存器(Rd),可用于移位运算等操作。MOV指令举例如下:MOVR1,#0 x10;R1=0 x10 MOVR0,R1;R0=R1 MOV R2,R2,LSL#2MOVS PC,LR;PC为目标寄存器时,PC=L
6、R,同时spsr-cpsr,本条指令只能在异常模式下使用,因为用户和系统模式没有spsr。,ARM数据处理指令数据传送,MVN指令格式如下:MVN condS Rd,operand2;Rd(operand2)MVN指令将立即数或寄存器按位取反后传送到目标寄存器(Rd),operand2为一个合法立即数,因为其具有取反功能,所以可以装载范围更广的立即数。MVN指令举例如下:MVNR1,#0 xFF;R1=0 xFFFFFF00 MVNR1,R2;将R2取反,结果存到R1MVN R2,#0;将-1放入R2,3.2 指令集介绍,ARM指令集ARM数据处理指令,数据处理指令大致可分为4类:数据传送指令
7、:MOVMVN;算术运算指令:ADDADCSUBSBCRSBRSC;逻辑运算指令:ANDORREORBIC;比较指令:CMPCMNTSTTEQ。数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。数据处理指令中除比较指令外均可选择使用S后缀,并影响状态标志。,ADD(addition加)指令格式如下:ADDcondS Rd,Rn,operand2;RdRn+operand2 加法运算指令ADD将operand2的值与Rn的值相加,结果保存到Rd寄存器,operand2 为立即数时,必须为合法立即数。应用示例:ADDS R1,R1,#1;R1=R1+1,并影响标志位 ADD R
8、1,R1,R2;R1=R1+R2,ARM数据处理指令算术运算,ADC指令格式如下:ADCcondS Rd,Rn,operand2;RdRn+operand2+Carry 带进位加法指令ADC将operand2的值与Rn的值相加,再加上CPSR中的C标志位,结果保存到Rd寄存器。应用示例(使用ADC实现64位加法,结果存于R1、R0中):ADDS R0,R0,R2;R0等于低32位相加,并影响标志位 ADC R1,R1,R3;R1等于高32位相加,并加上低32位进位C,SUB(subtract减)指令格式如下:SUBcondS Rd,Rn,operand2;RdRn-operand2 减法运算指
9、令SUB指令用寄存器Rn减去operand2,结果保存到Rd中。应用示例:SUBR0,R0,#1;R0=R0-1,不影响标志位 SUBSR2,R1,R2;R2=R1-R2,并影响标志位,SBC指令格式如下:SBCcondS Rd,Rn,operand2;RdRn-operand2-(非)Carry带进位减法指令SBC用寄存器Rn减去operand2,再减去CPSR中的C标志位的非(减法中产生借位时C位=0),结果保存到Rd中。应用示例(使用SBC实现64位减法,结果存于R1、R0中):SUBS R0,R0,R2;低32位相减,并影响标志位SBC R1,R1,R3;高32位相减,并减去低位借位C
10、的;反码,ARM数据处理指令算术运算,RSB(Reverse Subtract)指令格式如下:RSBcondS Rd,Rn,operand2;Rdoperand2-Rn 逆向减法运算指令RSB指令将operand2的值减去Rn,结果保存到Rd中。应用示例:RSB R3,R1,#0 xFF00;R3=0 xFF00-R1 RSBS R1,R2,R2,LSL#2;R1=(R22)-R2=R23,RSC指令格式如下:RSCcondS Rd,Rn,operand2;Rdoperand2-Rn-(NOT)Carry 带进位逆向减法指令RSC指令用寄存器operand2减去Rn,再减去CPSR中的C位的非
11、(减法中产生借位时C位=0),结果保存到Rd中。应用示例(使用RSC指令实现求64位数值的负数):RSBS R2,R0,#0 RSC R3,R1,#0,3.2 指令集介绍,ARM指令集ARM数据处理指令,数据处理指令大致可分为4类:数据传送指令:MOVMVN;算术运算指令:ADDADCSUBSBCRSBRSC;逻辑运算指令:ANDORREORBIC;比较指令:CMPCMNTSTTEQ。数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。数据处理指令中除比较指令外均可选择使用S后缀,并影响状态标志。,AND指令格式如下:ANDcondS Rd,Rn,operand2;RdRn
12、R2=R1&R3,ORR指令格式如下:ORRcondS Rd,Rn,operand2;RdRn|operand2(|为或运算符)逻辑或操作指令ORR指令将operand2的值与寄存器Rn的值按位作逻辑“或”操作,结果保存到Rd中。应用示例:ORR R0,R0,#0 x0F;将R0的低4位置1 MOVR1,R2,LSR#24 ORRR3,R1,R3,LSL#8;使用ORR指令将R2的高8位数据移入到R3低8位中,ARM数据处理指令逻辑运算指令,EOR指令格式如下:EORcondS Rd,Rn,operand2;RdRn operand2(为异或运算符)逻辑异或操作指令EOR指令将operand2
13、的值与寄存器Rn的值按位作逻辑“异或”操作(不相同的位为1,相同的位为0),结果保存到Rd中。应用示例:EORR1,R1,#0 x0F;将R1的低4位取反 EOR R2,R1,R0;R2=R1R0 EORSR0,R5,#0 x01;将R5和0 x01进行逻辑异或,;结果保存到R0,并影响标志位,ARM数据处理指令逻辑运算指令,BIC(Bit Clear)指令格式如下:BICcondS Rd,Rn,operand2;RdRn 与R3中为1的位号处清零,ARM数据处理指令比较指令,CMP(Compare)指令格式如下:CMPcond Rn,operand2;Rn-operand2 标志N、Z、C、
14、V 比较指令CMP指令将寄存器Rn的值减去operand2的值,根据操作的结果更新CPSR中的相应条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。应用示例:CMPR1,#10;R1与10比较,设置相关标志位 CMPR1,R2;R1与R2比较,设置相关标志位注意:CMP指令与SUBS指令的区别在于CMP指令不保存运算结果。,ARM数据处理指令比较取反指令,CMN(Compare Negative)指令格式如下:CMNcond Rn,operand2;Rn+operand2 标志N、Z、C、V 负数比较指令CMN指令使用寄存器Rn的值加上operand2的值,根据操作的结果更新CPSR
15、中的相应条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。应用示例:CMN R0,#1;R0+1(或R0-(-1),影响条件标志位注意:CMN指令与ADDS指令的区别在于CMN指令不保存运算结果。CMN指令可用于负数比较:比如CMN R0,#1指令则表示R0与-1比较。,ARM数据处理指令位测试指令,TST(test)指令格式如下:TSTcond Rn,operand2;Rn 判断R1的低4位是否为0 注意:TST指令与ANDS指令的区别在于TST指令不保存运算结果。TST指令通常与EQ、NE条件码配合使用,当所有测试位均为0时,EQ有效(Z=1),而只要有一个测试位不为0,则NE有
16、效(Z=0)。,ARM数据处理指令比较指令,TEQ(Test Equal)指令格式如下:TEQcond Rn,operand2;Rn operand2,影响标志N、Z、C、V 相等测试指令TEQ指令将寄存器Rn的值与operand2的值按位作逻辑“异或”操作,根据操作的结果更新CPSR中的相应条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。应用示例:TEQ R0,R1;比较R0与R1是否相等注意:TEQ指令与EORS指令的区别在于TEQ指令不保存运算结果。使用TEQ进行相等测试时,常与EQ、NE条件码配合使用。当两个数据相等时,EQ有效(Z=1);否则NE有效(Z=0)。,ARM指
17、令小节目录,1.指令格式2.条件码3.存储器访问指令4.数据处理指令5.乘法指令6.ARM分支指令7.协处理器指令8.杂项指令9.伪指令,ARM指令集乘法指令,ARM微处理器支持的乘法指令与乘加指令共有6条,可分为运算结果为32位和运算结果为64位的两类。3232位乘法/乘加指令;3232位结果为64位的乘/乘加指令。与前面的数据处理指令不同,指令中的所有操作数、目的寄存器必须为通用寄存器,操作数不能使用立即数或被移位的寄存器。,ARM指令乘法指令,MUL指令格式如下:MULcondS Rd,Rm,Rs;RdRm*Rs(RdRm)32位乘法指令MUL(Multiply)指令将Rm和Rs中的值相
18、乘,结果的低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,R
19、1,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 64位无符号乘法指令UMULL(Unsigned Multiply long)指令将Rm和Rs中的值作无符号数相乘,结果的低32位保存到RdLo中,而高32位保存到RdHi中。应用示例:UMULL R0,R1,R5,R8;(R1、R0)=R5R8;R0=(R5 R8)的低32位;R1=(R5 R8)的高32位
20、,ARM指令乘法指令,UMLAL指令格式如下:UMLALcondS RdLo,RdHi,Rm,Rs;(RdLo,RdHi)Rm*Rs+(RdLo,RdHi)64位无符号乘加指令UMLAL(Unsigned Multiply Accumulate Long)指令将Rm和Rs中的值作无符号数相乘,64位乘积与RdHi、RdLo相加,结果的低32位保存到RdLo中,而高32位保存到RdHi中。应用示例:UMLAL R0,R1,R5,R8;(R1、R0)=R5R8+(R1、R0);R0=(R5 R8)的低32位 R0;R1=(R5 R8)的高32位 R1,ARM指令乘法指令,SMULL指令格式如下:S
21、MULLcondS RdLo,RdHi,Rm,Rs;(RdLo,RdHi)Rm*Rs64位有符号乘法指令SMULL(Signed Multiply Long)指令将Rm和Rs中的值作有符号数相乘,结果的低32位保存到RdLo中,而高32位保存到RdHi中。应用示例:SMULLR2,R3,R7,R6;(R3、R2)=R7R6,ARM指令乘法指令,SMLAL指令格式如下:SMLALcondS RdLo,RdHi,Rm,Rs;(RdLo,RdHi)Rm*Rs+(RdLo,RdHi)64位有符号乘加指令SMLAL(Signed Multiply Accumulate Long)指令将Rm和Rs中的值作
22、有符号数相乘,64位乘积与RdHi、RdLo相加,结果的低32位保存到RdLo中,而高32位保存到RdHi中。应用示例:SMLALR2,R3,R7,R6;(R3、R2)=R7R6+(R3、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,程序状态寄存器
23、访问指令(MRS/MSR),ARM中有两条指令用于在程序状态寄存器(CPSR/SPSR)和通用寄存器(R0-R15)之间传送数据。只有程序状态寄存器访问指令(MRS/MSR)才可以对状态寄存器CPSR和SPSR进行读/写操作。,程序状态寄存器CPSR,CPSR(Current Program Status Register)当前程序状态寄存器 SPSR(Saved Program Status Register)程序状态保存寄存器 每种异常都有自己的SPSR(由于用户模式和系统模式不是异常模式,所以它们没有SPSR),当异常发生时SPSR保存CPSR的当前值,异常退出时可通过SPSR恢复CPS
24、R。,1.6 程序状态寄存器,简介,ARM内核包含1个CPSR和5个供异常处理程序使用的SPSR。CPSR反映了当前处理器的状态,其包含:4个条件代码标志(符号(N)、零(Z)、进位(C)和溢出(V));2个中断禁止位(F/I),分别控制一种类型的中断;5个对当前处理器模式进行编码的位M4:0;1个用于指示当前执行指令(ARM还是Thumb)的T位。,1.6 程序状态寄存器,简介,条件代码标志,保留,控制位,溢出标志,进位或借位扩展,零,符号标志位,IRQ禁止,FIQ禁止,状态位,模式位,N,Z,C,V,I,T,F,CPSR寄存器的格式,程序状态寄存器访问指令(MRS/MSR),读CPSR可以
25、了解当前处理器(无论出于何种模式下)的工作状态,。读SPSR寄存器可以了解进入异常前的处理器状态CPSR。以上两条可以通过,MRS指令把cpsr/spsr读入通用寄存器(r0-r15)。对CPSR或SPSR寄存器的写操作,可以切换处理器模式、或者允许/禁止IRQ/FIQ中断等。上面一条可以通过,MSR指令把通用寄存器(r0-r15)或立即数的值,写入cpsr/spsr。注意:不能通过写状态寄存器来改变处理器的状态(ARM态/Thumb态),只能通过带状态切换的分支指令BX 来改变。,程序状态寄存器读指令-MRS,在ARM处理器中,只有MRS指令可以对状态寄存器CPSR和SPSR进行读操作。,M
![ARM体系结构与结构-第三章.ppt_第1页](https://www.31ppt.com/fileroot1/2023-5/17/3126a31d-b2e9-49b9-aaf8-6a5e9db2a747/3126a31d-b2e9-49b9-aaf8-6a5e9db2a7471.gif)
![ARM体系结构与结构-第三章.ppt_第2页](https://www.31ppt.com/fileroot1/2023-5/17/3126a31d-b2e9-49b9-aaf8-6a5e9db2a747/3126a31d-b2e9-49b9-aaf8-6a5e9db2a7472.gif)
![ARM体系结构与结构-第三章.ppt_第3页](https://www.31ppt.com/fileroot1/2023-5/17/3126a31d-b2e9-49b9-aaf8-6a5e9db2a747/3126a31d-b2e9-49b9-aaf8-6a5e9db2a7473.gif)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 体系结构 结构 第三
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5415647.html