第4章 ARM指令集系统1.ppt_第1页
第4章 ARM指令集系统1.ppt_第2页
第4章 ARM指令集系统1.ppt_第3页
第4章 ARM指令集系统1.ppt_第4页
第4章 ARM指令集系统1.ppt_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

1、第四章:ARM指令集系统。ARM微处理器的指令集可分为六类:数据处理指令、跳转指令、PSR处理指令、加载/存储指令、协处理器指令和杂项指令。本章将介绍ARM指令的语法格式和ARM指令的详细功能。执行摘要,4.1数据处理指令(22个主助记符)4.2跳转指令(4个主助记符)4.3加载/存储指令4.4批量加载/存储指令(16个主助记符)4.5交换指令4.6程序状态寄存器PSR存取指令(2种)4.7协处理器操作指令(5种)4.8异常生成指令(2种)4.1数据处理指令,数据传输指令,算术运算指令,逻辑运算指令,比较指令,乘法指令,4.1.1基本数据处理指令,ARM基本数据ARM的基本数据处理指令汇编指令

2、语法格式为S、1。数据传输指令,(1) MOV指令的MOV指令汇编语法格式为MOVcondS Rd,操作数2将操作数2表示的数据传输到目标寄存器Rd,目标寄存器Rd可以是寄存器、移位寄存器或立即数;如果指令包含后缀“s”,则根据操作结果或移位条件更新相应的CPSR条件标志位。例如:MOV R0,# 5;R0=5 MOV R0,R1;R0=LSL R1 R1 MOV R0 # 5;R0=R1向左移动5位,(2)MVN数据反转传输指令的汇编语法格式是MVnCondRd,操作数2将第二个操作数操作数2表示的数据逐位反转,然后将其传输到目标寄存器Rd中的其他MOv,例如:MVN R0,# 0;R0=-

3、1(有符号数)MVN R0,# 0 x54运算的结果是0 xAB,对吗?它应该是32位MVNS R1,R2,LSL #0x 02;R1=(R2*4),结果影响CPSR,2算术运算指令。(1)ADD加法指令ADD加法指令的汇编语法格式是Add condsrd,RN,operand2rd=RNOP2Add指令将操作2表示的数据与寄存器Rn中的值相加,并将结果传送到目标寄存器。操作数2可以是寄存器、移位寄存器或立即数;如果指令包含后缀“s”,根据操作结果更新CPSR对应的条件标志位。示例:ADD R0,R1,# 5;R0=R1 5加R0,R1,R2;R0=R1 R2 ADD R0,R1,R2,LSL

4、 # 5;R0=R1R2逻辑左移5位。(2)带c标志的模数转换器加法指令模数转换器条件数rn,操作数2rd=rnop2c功能:带c标志的模数转换器加法指令将操作数2表示的数据加到寄存器Rn中的值,将CPSR的c条件标志值相加,并将结果发送到目标寄存器Rd;如果指令包含后缀“s”,根据操作结果更新CPSR对应的条件标志位。该指令可以实现两个高于32位的数据相加。例如,64位操作数存储在寄存器R2和R3中;另一个64位操作数存储在寄存器R4和R5中。将两个64位数字相加,结果存储在R0和R1中。R4 R2加R0;低32位相加,结果影响标志位模数转换器R1、r 3和R5;将上面的32位相加,(3)S

5、UB减法指令SUB条件,rn,操作2rd=rn-op2函数:SUB指令从寄存器Rn中减去操作2所表示的值,并将结果传送到目标寄存器;如果指令包含后缀“s”,根据操作结果更新CPSR对应的条件标志位。注意:当指令包含后缀“s”时,如果减法运算中有借方,C=0,否则C=1。例如:sub0,R1,# 5;R0=R1-5 SUB R0,R1,R2;R0=R1-R2 SUB R0,R1,R2,LSL # 5;R0=R1-R2向左移动5位,(4)SBC减法指令SBC条件,rn,操作2rd=rn-op2-!C SBC指令从寄存器中减去由操作数2表示的值,减去寄存器CPSR中C条件标志位的倒数,并将结果传送到

6、目标寄存器Rd;如果指令包含后缀“s”,根据操作结果更新CPSR对应的条件标志位。该指令可以实现两个32位以上数据的相减。例如,64位操作数存储在寄存器R2和R3中;另一个64位操作数存储在寄存器R4和R5中。减去这两个64位数字,结果存储在R0和R1中。如何编程?(5) RSB逆减法指令RSBcondS Rd,Rn,操作数2函数:RSB指令从第二操作数操作数Rn表示的值中减去寄存器Rn的值,并将结果传送到目标寄存器Rd;如果指令包含后缀“s”,根据操作结果更新CPSR对应的条件标志位。示例RSB R0、R1、R2 RSB R0、R1、# 231sbr0、R2、R3、LSL#1 SUB R1、

7、#0 x5、R0、(6) RSC反向减法指令RSCcondS Rd、Rn、operand2功能:RSC指令从operand2指示的值中减去寄存器Rn的值,然后减去寄存器。如果指令包含后缀“s”,则根据运算结果更新CPSR中相应的条件标志位。该示例使用RSC AND RSBS来查找64位值的负数、3条逻辑运算指令,(1)AND和逻辑运算指令AnD AND Rd、RN、operating AND 2函数:AND指令对operand2表示的值和寄存器Rn的值逐位执行逻辑AND运算,并将结果保存在目标寄存器Rd中;如果指令包含后缀“s”,根据操作结果更新CPSR对应的条件标志位。通常用于清除Rn的特定

8、位。例如:“与”R0、R0、#5保留R0的第2位和第0位,其余位清零。(2)ORR或逻辑运算指令ORR conds Rd,rn,operand2rd=rn或op2函数:ORR指令将operand2表示的值与寄存器Rn的值逐位逻辑或,并将结果保存在目标寄存器Rd中;如果指令包含后缀“s”,根据操作结果更新CPSR对应的条件标志位。通常用于设置某些位。例如:ORR R0,R0,#5使R0的第0位和第2位为1,其余位保持不变。(3)EOR异或逻辑运算指令ORR CONDS Rd,RN,OPERAND2Rd=RNE EOR OP2函数:ORR指令将operand2表示的值与寄存器Rn的值逐位逻辑异或,

9、并将结果保存在目标寄存器RD中;如果指令包含后缀“s”,根据操作结果更新CPSR对应的条件标志位。EOR指令可用于反转寄存器中某些位的值。通常用于否定某些位(1位)。例如:EOR R0、R0和#5 R0的位0和2被否定,其他位保持不变。(4)BIC位清零逻辑运算指令二秒Rd,Rn,运算二秒Rd=Rn AND(!OP2)功能:BIC指令对寄存器Rn的值和操作符2指示的值的倒数逐位执行逻辑与运算,并将结果保存到目标寄存器Rd中的BIC R0、R0、# ff00000、4比较指令。比较指令没有目标寄存器,仅用于更新条件标志位,不保存操作结果,也不在指令后缀中添加“s”。编程时,根据运算结果更新CPS

10、R对应的条件标志,并根据CPSR对应的条件标志判断是否执行以下指令。(1)化学机械抛光减法比较指令CMPcond Rn,操作2 Rn-op2功能:化学机械抛光指令从寄存器Rn的值中减去操作2所表示的值,并根据操作结果和寄存器移位更新CPSR对应的条件标志位。例如:化学机械抛光R0,# 5;计算R0-5,并根据结果设置条件标志ADDGT R0、R0和# 5;如果R05,执行ADDGT指令。(2)CMN负数比较指令CMNcond,操作2功能:CMN指令将寄存器Rn的值加到操作2所指示的值上,并根据操作结果和寄存器移位更新CPSR相应的条件标志位。CMN R1,#0 x10,(3)TST位测试指令T

11、STcond Rn、operand2 Rn和OP2功能:CMN指令逐位逻辑“与”寄存器Rn的值和operand2指示的值,并根据运算结果和寄存器移位更新CPSR相应的条件标志位。4)TEQ等式测试指令TEQcond Rn,操作Rn 2 EOR op2功能:TEQ指令将寄存器Rn的值与操作Rn 2指示的值逐位逻辑异或,并根据运算结果和寄存器移位更新CPSR对应的条件标志位。4.1.2乘法指令,ARM乘法指令完成两个寄存器中数据的乘法,根据保存结果的数据长度可分为两类:一类是32位乘法指令,即乘法运算的结果是32位;另一个是64位乘法指令,即乘法运算的结果是64位。(1)MUL MULCODs R

12、d,Rm,Rs MUL指令实现两个32位数字(无符号或有符号)的乘积(Rm * Rs),并将结果存储在32位寄存器Rd中;如果指令包含后缀“s”,根据操作结果更新CPSR对应的条件标志位。例如:MULS R0、R1、R2;R0=R1*R2,结果影响cpsr。(2) MLA MLA condsRd,RM,RS,Rn rd=Rm * Rs rnmla指令实现两个32位数字(无符号或有符号)的乘积,然后将乘积(Rm * Rs)加到第三个操作数Rn,并将结果存储在32位寄存器中。如果指令包含后缀“s”,则根据运算结果更新CPSR相应的条件标志位。例如:MLA R0、R1、R2、R3;R0=R1*R2

13、R3,64位乘法,(1) umullumullconds rdlo,RdHi,RM,rsrdhi rdlo=rn * rsumulll指令实现两个32位无符号数的乘积,乘积结果的高32位存储在32位寄存器的rdhi中,乘积结果的低32位存储在另一个32位寄存器的rdlo中;如果指令包含后缀“s”,根据操作结果更新CPSR对应的条件标志位。例如:UMULL R0、R1、R2、R3;R1(高位),R0(低位)=R2 * R3,(2) Umlal Umlalonds RdLo,RdHi,RM,RSRDHI,RdLo=Rm*Rs RdHi,RdLo UMLAL指令将两个32位无符号数的64位乘积结果与

14、(RdHi: RdLo)表示的64位无符号数相加。如果指令包含后缀“s”,则根据运算结果更新CPSR相应的条件标志位。例如:UMLAL R0,R1,R2,R3 r0=的低32位* R3 r0r1=的高32位* R3 R1,其中R0-R3都是无符号数字,(3)smull smullconds RDlo;RdHi、RM、RS smull指令实现两个32位有符号数的乘积,乘积结果的高32位存储在一个中,如果指令包含后缀“s”,则根据运算结果更新相应的CPSR条件标志位。例如MVN R0,#0 x0 MOV R1,#0 x1 UMULL R2,R3,R1,R0 SMULL R4,R5,R1,R0,(4

15、) smlal smlalcons rdlo,rdhi,RM,Rs SMLAL指令将两个32位有符号数的64位乘积结果加到由(RdHi: RdLo)表示的64位无符号数上。加法结果的高32位存储在寄存器RdHi中,乘积结果的低32位存储在寄存器RdLo中。如果指令包含后缀“s”,根据操作结果更新CPSR对应的条件标志位。4.2 ARM分支指令,用于跳转程序流程。在ARM程序中有两种跳转程序流的方法:使用特殊的分支指令。将跳转地址值直接写入程序计数器。通过将跳转地址值写入程序计数器,您可以实现4GB地址空间中的任何跳转。通过在跳转前使用MOV LR、PC机等类似指令,可以保存程序的返回地址值,从

16、而在4GB的连续地址空间中实现子程序调用。分支指令b和分支指令b可以跳转到指定的地址来执行程序。该指令的汇编语法格式如下:b .目标地址处的指令属于ARM指令集,该指令的汇编语法中目标地址的计算方法如下:将指令中的24位带符号补码立即数扩展到32位;将这个32位数字左移两位,将获得的值写入程序计数器,即跳转到目标地址。跳跃的范围可以是-32MB、32MB和32MB。分支指令可以跳转到指定的地址执行程序,分支指令也可以将程序计数器的值保存到左后寄存器中。该指令的汇编语法格式如下:BL目标地址的指令属于ARM指令集,BL指令用于实现子程序调用。示例BL功能;MOV函数R15,R14,带有状态切换的跳转指令BX,BX指令跳转到指令中指定的目标地址,目标地址的指令可以是ARM指令或Thumb指令。该指令的汇编语法格式如下:B BX指令跳转到Rm指定的地址执行程序。如果Rm的位0为1,CPSR的标志位t在跳转

温馨提示

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

评论

0/150

提交评论