




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章 ARM指令集系统ARM微处理器的指令集可以分为数据处理指令、分支指令、加载/存储指令、批量加载/存储指令、交换指令、程序状态寄存器(PSR)处理指令、协处理器指令和异常产生指令八大类。本章将分类介绍ARM指令语法格式、指令编码格式和ARM指令的详细功能。内容提要4.1数据处理指令4.2ARM分支指令4.3加载/存储指令4.4批量加载/存储指令4.5交换指令4.6程序状态寄存器PSR访问指令4.7协处理器操作指令4.8异常产生指令4.1.1基本数据处理指令ARM基本的数据处理指可以分为4类:数据传送指令、算术运算指令、逻辑运算指令和比较指令。ARM基本的数据处理指令汇编指令语法格式:<opcode>{<cond>}{S}<Rd>,<Rn>,<operand2>4.1数据处理指令1.数据传送指令MOV指令MOV指令的汇编语法格式为MOV{cond}{S}Rd,operand2 将第二操作数operand2表示的数据传送到目标寄存器Rd中;如果指令包含后缀“S”,则根据操作结果或移位情况更新CPSR中的相应条件标志位(N、Z和C)。1.数据传送指令指令中包含S时:如果指令中的目标寄存器<Rd>为R15,则当前处理器模式对应的SPSR的值被复制到CPSR中;如果指令中的目标寄存器<Rd>不为R15,指令根据传送的数值设置CPSR中的N位和Z位,并根据移位器的进位值设置CPSR的C位。1.数据传送指令MOV指令例4-1:MOVR1,#0x80MOVPC,LRMOVSR1,R2,LSL#0x02MVN指令MVN指令的汇编语法格式为MVN{cond}{S}Rd,operand2将第二操作数operand2表示的数据按位取反后传送到目标寄存器Rd中;如果指令包含后缀“S”,则根据操作结果或移位情况更新CPSR中的相应条件标志位。MVN指令例4-2MVNR1,#0xFF00MVNSR1,R1,LSL#0x022.算术运算指令(1)ADD加法指令ADD加法指令的汇编语法格式为ADD{cond}{S}Rd,Rn,operand2 ADD指令将operand2表示的数据与寄存器Rn中的值相加,并把结果传送到目标寄存器<Rd>中;如果指令包含后缀“S”,则根据操作结果更新CPSR中的相应条件标志位。2.算术运算指令(1)ADD加法指令例:4-3ADDR0,R1,R2ADDSR0,R1,#251ADDR0,R2,R2,LSL#1
(2)ADC带C标志位的加法指令ADC{cond}{S}Rd,Rn,operand2功能:ADC带C标志位的加法指令将operand2表示的数据与寄存器Rn中的值相加,再加上CPSR中的C条件标志位的值,并把结果传送到目标寄存器Rd中;如果指令包含后缀“S”,则根据操作结果更新CPSR中的相应条件标志位。该指令可以实现两个高于32位的数据相加运算。(2)ADC带C标志位的加法指令例:实现64位数据加法运算ADDSR0,R0,R2ADCR1,R1,R3(3)SUB减法指令SUB{cond}{S}Rd,Rn,operand2功能:SUB指令从寄存器Rn中减去operand2表示的数值,并把结果传送到目标寄存器<Rd>中;如果指令包含后缀“S”,则根据操作结果更新CPSR中的相应条件标志位。注意事项:当指令包含后缀“S”时,如果减法运算有借位,则C=0,否则C=1。(4)SBC带C标志位的减法指令SBC{cond}{S}Rd,Rn,operand2SBC指令从寄存器<Rn>中减去operand2表示的数值,再减去寄存器CPSR中C条件标志位的反码,并把结果传送到目标寄存器Rd中;如果指令包含后缀“S”,则根据操作结果更新CPSR中的相应条件标志位。该指令可以实现两个高于32位的数据相减运算。(4)SBC带C标志位的减法指令例4-6实现64位操作数减法运算,其中R1:R0中放置被减数,R3:R2中放置减数,结果送回到R1:R0中。(验证)(5)RSB逆向减法指令RSB{cond}{S}Rd,Rn,operand2功能:RSB指令从第2操作数operand2表示的数值中减去寄存器Rn
值,并把结果传送到目标寄存器Rd中;如果指令包含后缀“S”,则根据操作结果更新CPSR中的相应条件标志位。(6)RSC带C标志位的逆向减法指令RSC{cond}{S}Rd,Rn,operand2功能:RSC指令从operand2表示的数值中减去寄存器Rn
值,再减去寄存器CPSR中C条件标志位的反码,并把结果传送到目标寄存器Rd中;如果指令包含后缀“S”,则根据操作结果更新CPSR中的相应条件标志位。例:求一个64位数的相反数(验证)3.逻辑运算指令(1)AND与逻辑运算指令AND{cond}{S}Rd,Rn,operand2功能:AND指令将operand2表示的数值与寄存器Rn
的值按位做逻辑与操作,并把结果保存到目标寄存器Rd中;如果指令包含后缀“S”,则根据操作结果更新CPSR中的相应条件标志位。ANDR0,R0,#0xFF(2)ORR或逻辑运算指令ORR{cond}{S}Rd,Rn,operand2功能:ORR指令将operand2表示的数值与寄存器Rn的值按位做逻辑或操作,并把结果保存到目标寄存器Rd中;如果指令包含后缀“S”,则根据操作结果更新CPSR中的相应条件标志位。ORRR0,R0,#0xFF
(3)EOR异或逻辑运算指令EOR{cond}{S}Rd,Rn,operand2功能:EOR指令将operand2表示的数值与寄存器Rn的值按位做逻辑异或操作,并把结果保存到目标寄存器Rd中;如果指令包含后缀“S”,则根据操作结果更新CPSR中的相应条件标志位。EOR指令可用于将寄存器中某些位的值取反。EORR0,R0,#0xFF
(4)BIC位清除逻辑运算指令BIC{cond}{S}Rd,Rn,operand2功能:BIC指令将寄存器Rn的值与operand2表示的数值的反码按位做逻辑与操作,并把结果保存到目标寄存器Rd中
BICR0,R0,#0xFF0000004.比较指令比较指令没有目标寄存器,只用作更新条件标志位,不保存运算结果,指令后缀无需加“S”。在程序设计中,根据操作的结果更新CPSR中相应的条件标志位,后面的指令就可以根据CPSR中相应的条件标志位来判断是否执行。(1)CMP相减比较指令CMP{cond}Rn,operand2功能:CMP指令将寄存器Rn的值减去operand2表示的数值,根据操作结果和寄存器移位情况更新CPSR中的相应条件标志位。(2)CMN负数比较指令CMN{cond}Rn,operand2功能:CMN指令将寄存器Rn的值加上operand2表示的数值,根据操作结果和寄存器移位情况更新CPSR中的相应条件标志位。CMN相当于不保存操作结果的ADDS指令。(3)TST位测试指令TST{cond}Rn,operand2功能:CMN指令将寄存器Rn的值与operand2表示的数值按位作逻辑“与”操作,根据操作结果和寄存器移位情况更新CPSR中的相应条件标志位。4)TEQ相等测试指令TEQ{cond}Rn,operand2功能:TEQ指令将寄存器Rn的值与operand2表示的数值按位作逻辑“异或”操作,根据操作结果和寄存器移位情况更新CPSR中的相应条件标志位。可以利用CPSR中的Z位、N位判断两个操作数或它们的符号是否相等。4.1.2乘法指令ARM乘法指令完成2个寄存器中数据的乘法,按照保存结果的数据长度可以分为两类:一类为32位的乘法指令,即乘法操作的结果为32位;另一类为64位的乘法指令,即乘法操作的结果为64位。
1.32位乘法指令(1)MULMUL{cond}{S}Rd,Rm,RsMUL指令实现两个32位的数(可以为无符号数,也可为有符号数)的乘积(Rm*Rs
)并将结果存放到一个32位的寄存器Rd中;如果指令包含后缀“S”,则根据操作结果更新CPSR中的相应条件标志位(N,Z);Rd和Rm不能为同一个寄存器。例:MULSR3,R2,R1
(2)MLAMLA{cond}{S}Rd,Rm,Rs,Rn
MLA指令实现两个32位的数(可以为无符号数,也可为有符号数)的乘积,再将乘积(Rm*Rs
)加上第3个操作数Rn,并将结果存放到一个32位的寄存器Rd中;如果指令包含后缀“S”,则根据操作结果更新CPSR中的相应条件标志位。
例:MLASR0,R1,R2,R32.64位乘法指令(1)UMULLUMULL{cond}{S}RdLo,RdHi,Rm,Rs
UMULL指令实现两个32位无符号数的乘积,乘积结果的高32位存放到一个32位的寄存器RdHi中,乘积结果的低32位存放到另一个32位的寄存器RdLo中;如果指令包含后缀“S”,则根据操作结果更新CPSR中的相应条件标志位。例:UMULLR0,R1,R2,R3(2)UMLALUMLAL{cond}{S}RdLo,RdHi,Rm,Rs
UMLAL指令将两个32位无符号数的64位乘积结果与由(RdHi:RdLo)表示的64位无符号数相加,结果的高32位存放到寄存器RdHi中,结果的低32位存放到寄存器RdLo中;如果指令包含后缀“S”,则根据操作结果更新CPSR中的相应条件标志位。例:UMLALR0,R1,R2,R3(3)SMULLSMULL{cond}{S}RdLo,RdHi,Rm,Rs
SMULL指令实现两个32位有符号数的乘积,乘积结果的高32位存放到一个32位的寄存器的RdHi,乘积结果的低32位存放到另一个32位的寄存器的RdLo;如果指令包含后缀“S”,则根据操作结果更新CPSR中的相应条件标志位。例4-21写出执行完下面的程序段后,[R3:R2]、[R5:R4]所存放的64位乘法结果分别为多少?(验证)
MVNR0,#0x0 MOVR1,#0x1 UMULLR2,R3,R1,R0 SMULLR4,R5,R1,R0;(4)SMLALSMLAL{cond}{S}RdLo,RdHi,Rm,Rs
SMLAL指令将两个32位有符号数的64位乘积结果与由(RdHi:RdLo)表示的64位无符号数相加,加法结果的高32位存放到寄存器RdHi中,乘积结果的低32位存放到寄存器RdLo中;如果指令包含后缀“S”,则根据操作结果更新CPSR中的相应条件标志位。杂类数据处理指令前导零计数指令:CLZCLZ<cond><Rd>,<Rm>从ARMV5版本指令系统开始支持该指令,计算32位寄存器操作数从第31位开始连续“0”位的个数,主要用于计算操作数规范化。例:
MOVR4,#0xAA CLZ R2,R44.2ARM分支指令分支指令用于实现程序流程的跳转,在ARM程序中有两种方法可以实现程序流程的跳转:使用专门的分支指令。直接向程序计数器PC写入跳转地址值。ARM分支指令可以实现从当前指令向前或向后的32M的地址空间跳转。通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用MOV
LR,PC等类似指令,能够保存程序的返回地址值,从而实现在4GB连续地址空间的子程序调用。分支指令B分支指令B可以实现跳转到指定的地址执行程序。指令的汇编语法格式如下:B{<cond>}<target_address>
在指令的汇编语法中target_address这个目标地址的计算方法是:将指令中的24位带符号的补码立即数扩展为32位;将此32位数左移两位将得到的值写入到程序计数器PC中,即跳转到目标地址。能够实现跳转的范围为-32MB~+32MB。例: B Label;目标地址由程序标号给出 CMPR1,#0 BEQstop带链接的分支指令BL 带链接的分支指令BL可以实现跳转到指定的地址执行程序,同时BL指令还将程序计数器PC的值(下一条指令地址)保存到LR寄存器中。指令的汇编语法格式如下:BL{<cond>}<target_address>如何从子程序中返回?L决定是否保存返回地址。当有L时,指令将下一条指令地址保存到LR寄存器中;当无L时同B指令仅执行跳转,当前PC寄存器的值将不会保存到LR寄存器中。从指令的编码可以看出,B与BL指令的唯一区别是bit[24],当bit[24]=0是B指令,当bit[24]=1是BL指令。BL跳转指令编码中signed_immed_24的含义同B指令。带状态切换的跳转指令BXBX指令跳转到指令中所指定的目标地址,目标地址处的指令既可以是ARM指令,也可以是Thumb指令。指令的汇编语法格式如下:
BX{<cond>}<Rm>BX指令
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年X射线影像增强器项目发展计划
- 传统材料在现代文创产品设计中的价值挖掘
- 以客户体验为导向的银行业务发展
- 云环境下企业信息安全体系建设
- 一年级看图写话情境创设与范文
- 立德树人在社会工作中的实践心得体会
- 商业策划书撰写与市场分析
- 企业知产在并购中的价值评估
- 脑血管介入手术护理配合
- 多元化六年级数学教学计划设计
- 船的发展史知识分享课件
- 智慧景区智能化系统总体施工组织设计方案
- 合并财务报表培训资料课件
- 2022年新疆师范大学辅导员招聘考试笔试试题及答案解析
- DB32-T 4357-2022 建筑工程施工机械安装质量检验规程
- 流行性腮腺炎及其护理
- 防台防汛管理制度
- 广电运通研究报告:数字人民币促产业升级-AI+城市助业务转型
- 北师大版生物七年级下册 第10章 第2节 《人体细胞获得氧气的过程》学案 (表格式无答案)
- 港澳台联考考试大纲
- 移动式脚手架安全操作规程
评论
0/150
提交评论