欢迎来到天天文库
浏览记录
ID:6012660
大小:159.00 KB
页数:21页
时间:2017-12-30
《4arm指令系统(合成)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第四章ARM指令系统概述本章系统的介绍最常使用的ARM7TDMI-S内核支持的ARMV4指令集中的基本指令。ARM指令由基本指令和派生出的一些新的指令构成,但使用方法与基本指令类似。Thumb指令集作为ARM指令集的一个子集,其使用方法与ARM指令集类似,且一般不需要程序员手动编写,本章不作描述。ARM指令集分为六类:分支指令、数据处理指令、程序状态寄存器、LOAD/STORE指令、协处理器指令、异常中断指令。1.ARM分支指令指令助记符功能描述B分支指令BX带状态切换的分支指令BL带连接的分支指令2.ARM的数据处理指令这类指令能够完成数据的算术运算和逻辑操作,
2、它的典型特征是两个操作数经过运算,产生一个结果。类别指令助记符功能描述算术运算类ADD加法指令ADC带进位的加法指令SUB减法指令SBC带借位的减法指令RSB逆项减法指令RSC带借位的逆项减法指令逻辑运算类AND逻辑与指令ORR逻辑或指令EOR逻辑异或指令BIC位清除指令比较类CMP比较指令CMN取反比较指令测试类TST位测试指令TEQ相等测试指令传送类MOV数据传送指令MVN数据取反传送指令乘法类MUL32位乘法指令MLA32位乘加指令UMULL64位无符号乘法指令UMLAL64位无符号乘加指令SMULL64位有符号乘法指令SMLAL64位有符号乘加指令3.AR
3、M异常处理指令指令助记符功能描述SWI软件中断指令4.ARM协处理器基本指令表指令助记符功能描述CDP协处理器数据操作指令LDC协处理器数据加载指令MCRARM处理器寄存器到协处理器寄存器的数据传送指令MRC协处理器寄存器到ARM处理器寄存器的数据传送指令STC协处理器数据存储指令5.ARM的存储器加载/存储指令处理器中含有大量寄存器是RISC指令集的重要特点。ARM指令集中存储器向寄存器,寄存器向存储器之间相互传送的指令十分丰富,包括向单个寄存器加载数据、向多个寄存器加载数据、单个寄存器的数据保存、多个寄存器的数据保存和寄存器之间的数据交换。类别指令助记符功能描
4、述单寄存器加载LDR存储器向寄存器加载字数据LDRB存储器向寄存器加载无符号字节数据LDRT存储器向寄存器加载无符号字数据(用户模式)LDRBT存储器向寄存器加载无符号字节数据(用户模式)LDRSB存储器向寄存器加载有符号字数据LDRH存储器向寄存器加载无符号半字数据LDRSH存储器向寄存器加载有符号半字数据多寄存器加载LDM存储器向多个寄存器加载字数据单寄存器存储STR寄存器向存储器存储字数据STRB寄存器向存储器存储无符号字节数据STRT寄存器向存储器存储字数据?STRBT寄存器向存储器存储无符号字节数据?STRH寄存器向存储器存储半字数据多寄存器存储STM多
5、个寄存器向存储器存储字数据寄存器交换SWP寄存器与存储器交换字数据SWPB寄存器与存储器交换字节数据6.ARM状态寄存器访问指令指令助记符功能描述MRS程序状态寄存器向通用寄存器传送数据MSR通用寄存器向程序状态寄存器传送数据4.1分支指令在ARM程序设计中,有两种方法可以实现程序的跳转:使用专门分支指令或直接向程序计数器PC写入跳转地址值。使用分支指令可以实现在当前指令向前或向后32M字节的地址空间的任意跳转;直接向程序计数器PC(R15)写入跳转的地址值,可以实现在4GB的地址空间中的任意跳转。ARM采用流水线结构,当发生非顺序执行时,指令流水线清空。在含有T
6、humb指令集的芯片中,可以使用ARM指令与Thumb指令的混合编程。在不含有Thumb指令集的芯片中,使用ARM指令与Thumb指令的混合编程时,程序将产生未定义指令异常中断。1.B(Branch)分支语句格式:B{条件}目标地址语句功能:B是最简单的分支指令,B指令用于执行跳转操作。当执行B指令时,ARM处理器跳转到给定的地址,继续执行。分支指令中,实际给出的是相对于当前PC值(R15的值)的偏移量,而不是绝对地址。指令中偏移量是由编译器根据指令的当前位置和标号计算的,表示的有效偏移量为26位(即前后32MB的地址空间)。偏移量由汇编器来计算,是24位有符号数
7、,左移两位后有符号扩展为32位。使用示例:BLabel;程序无条件跳转到标号Label处执行,PC:=LabelBEQLabel3;程序当CPSR中Z=1时,跳转到Labe3处执行,PC:=Label32.BL(BranchwithLink)带连接的分支语句格式:BL{条件}目标地址语句功能:BL也是分支指令,BL用于执行跳转操作,与B指令不同的是,在执行BL分支指令时,先将PC的内容装载到当前模式的R14寄存器中。由于指令预取的原因,ARM处理器将调整装载到R14的PC值,使之成为BL后面一条指令的地址。ARM中使用BL作为子程序调用指令,如果子程序没有改变R1
8、4中的值,
此文档下载收益归作者所有