




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 ARM指令分类及其寻址方式 广嵌教育 2 第三章ARM指令分类及其寻址方式 3 1ARM指令集概要3 2ARM寻址方式3 3ARM指令集3 4Thumb指令介绍 3 3 1ARM指令集概要 ARM指令长度及数据类型ARM微处理器的指令长度可以是32位 在ARM状态下 也可以为16位 在Thumb状态下 ARM微处理器中支持字节 8位 半字 16位 字 32位 三种数据类型 其中 字需要4字节对齐 地址的低两位为0 半字需要2字节对齐 地址的最低位为0 程序的启动都是从ARM指令集开始 所有的ARM指令集都可以是有条件执行的 4 ARM汇编指令格式 ARM指令的典型编码格式 cond 指令执行的条件编码 如EQ NE等 指令操作符编码 如LDR STR等 S 决定指令的执行是否影响CPRS的值 包含第一个源操作数的寄存器编码 目标寄存器编码 第二个源操作数 ARM指令语法格式中 中的内容是必需的 而 中的内容是可选的 5 ARM指令的条件码域 大多ARM指令都可以条件执行 也就是根据CPSR中条件码的状态决定是否执行该指令 只有在CPSR中的条件码标志满足指定的条件时 带条件码的指令才可以执行 否则指令被忽略 相当于一条空操作NOP指令 每一条ARM指令编码中包含4位的条件码 位于指令编码的最高4位 31 28 条件码共有16种 每种条件码可用两个字符 条件码的助记符 表示 这两个字符可以添加在指令助记符的后面和指令同时使用 在16种条件标志码中 只有15种可以使用 第16种 1111 为系统保留 暂时不能使用 6 ARM指令的条件码域 ARM指令的条件域 7 3 2ARM寻址方式 立即寻址例 ADDR0 R0 0 x1 R0 R0 1ADDR0 R0 0 x3f R0 R0 0 x3f在以上两条指令中 第二个源操作数即为立即数 要求以 为前缀 对于以十六进制表示的立即数 还要求在 后加上 0 x 寄存器寻址寄存器寻址就是利用寄存器中的数值作为操作数 例 ADDR0 R1 R2 R0 R1 R2寄存器间接寻址寄存器间接寻址就是以寄存器中的值作为操作数的地址 而操作数本身存放在存储器中 例 LDRR0 R1 R0 R1 STRR0 R1 R1 R0 8 寄存器寻址中第二操作数移位方式 LSR 逻辑右移 空出的最高有效位用0填充 LSL 逻辑左移 空出的最低有效位用0填充 ASL 算术左移 由于左移空出的有效位用0填充 ASR 算术右移 算术移位的对象是带符号数 移位过程中必须保持操作数的符号不变 如果源操作数是正数 空出的最高有效位用0填充 如果是负数用1填充 ROR 循环右移 移出的字的最低有效位依次填入空出的最高有效位 RRX 带扩展的循环右移 将寄存器的内容循环右移1位 空位用原来C标志位填充 寄存器移位寻址ADDR3 R2 R1 LSL 2 R3 R2 4 R1ADDR3 R2 R1 LSLR4 R3 R2 R1 2 R4 9 3 2ARM寻址方式 基址变址寻址基址变址寻址就是将寄存器 该寄存器一般称作基址寄存器 的内容与指令中给出的地址偏移量相加 从而得到一个操作数的有效地址 变址寻址方式常用于访问某基地址附近的地址单元 例 LDRR0 R1 4 R0 R1 4 前变址模式LDRR0 R1 4 R0 R1 4 自动变址模式 R1 R1 4LDRR0 R1 4 R0 R1 R1 R1 4后变址模式LDRR0 R1 R2 R0 R1 R2 基地加索引寻址多寄存器寻址采用多寄存器寻址方式 一条指令可以完成多个寄存器值的传送 这种寻址方式可以用一条指令完成传送最多16个通用寄存器的值 例 LDMIAR0 R1 R2 R3 R4 R1 R0 R2 R0 4 R3 R0 8 R4 R0 12 10 3 2ARM寻址方式 相对寻址相对寻址可以认为是基地址为程序计数器PC的当前值 偏移量为目的地址和现行指令地址之间差的基址变址寻址 将PC的值与偏移量相加之后得到操作数的有效地址 以下程序段完成子程序的调用和返回 跳转指令BL采用了相对寻址方式 例 BLNEXT 跳转到子程序NEXT处执行 NEXT MOVPC LR 从子程序返回 11 3 2ARM寻址方式 堆栈是一种数据结构 按先进后出 FirstInLastOut FILO 的方式工作 使用一个称作堆栈指针的专用寄存器指示当前的操作位置 堆栈指针总是指向栈顶 指向堆栈的地址寄存器称为堆栈指针 SP 当堆栈指针指向最后压入堆栈的数据或指向第一个要读出的数据时 称为满堆栈 FullStack 而当堆栈指针指向最后压入堆栈的数据的上一个或下一个空位置时 称为空堆栈 EmptyStack 访问存储器时 存储器的地址向高地址方向生长 称为递增堆栈 ascendingstack 存储器的地址向低地址方向生长 称为递减堆栈 descendingstack 12 3 2ARM寻址方式 堆栈寻址ARM微处理器支持这四种类型的堆栈工作方式满递增堆栈 堆栈指针指向最后压入的数据 且由低地址向高地址生成 满递减堆栈 堆栈指针指向最后压入的数据 且由高地址向低地址生成 空递增堆栈 堆栈指针指向下一个将要放入数据的空位置 且由低地址向高地址生成 空递减堆栈 堆栈指针指向下一个将要放入数据的空位置 且由高地址向低地址生成 例 STMFDR13 R0 R4 R12 LR 将寄存器列表中的寄存器 R0 R4到 R12 LR 内容存入堆栈 LDMFDR13 R0 R4 R12 PC 将堆栈内容恢复到寄存器 R0 R4到 R12 PC 中 13 3 3ARM指令集 ARM指令集的种类跳转指令数据处理指令乘法指令与乘加指令程序状态寄存器访问指令加载 存储指令批量数据加载 存储指令数据交换指令移位指令协处理器指令异常产生指令 14 3 3ARM指令集 跳转指令 跳转指令用于实现程序流程的跳转 在ARM程序中有两种方法可以实现程序流程的跳转 使用专门的跳转指令 直接向程序计数器PC写入跳转地址值 四种跳转指令B跳转指令 前后32MB的地址空间 指令编码中的跳转地址值是相对当前PC值的一个偏移量 经汇编器计算得到跳转的绝对地址 BL带返回的跳转指令 BL指令在执行跳转的同时将转移指令的下一条指令的地址复制到当前处理器模式下的链接寄存器LR中 这一般用于子程序的调用和返回 BLX带返回和状态切换的跳转指令BX带状态切换的跳转指令例 1 CMPR1 0BEQLabel2 BXR7 跳转到R7的值指定的地址 并根据R7的最低位切换处理器状态 15 3 3ARM指令集 数据处理指令 数据处理指令分类数据传送指令比较指令算术逻辑运算指令数据传送指令MOV数据传送指令MVN数据取反传送指令例 MOVR1 R0 将寄存器R0的值传送到寄存器R1MOVR1 R0 LSL 3 将寄存器R0的值左移3位后传送 到R1 MVNR0 0 将立即数0取反传送到寄存器R0中 完成后 R0 1 MOVSR2 0 x10 R2 0 x10 并影响标志位 MVNSR2 0 xFF R2 0Xffff00 并影响标志位 16 3 3ARM指令集 数据处理指令 比较指令CMP比较指令CMN反值比较指令TST位测试指令TEQ相等测试指令例 CMPR1 100 将寄存器R1的值与立即数100相减 并根 据结果设置CPSR的标志位 CMNR1 R0 将寄存器R1的值与寄存器R0的值相加 并根 据结果设置CPSR的标志位 TSTR1 0 xffe 将寄存器R1的值与立即数0 xffe按位与 并根据结果设置CPSR的标志位 TEQR1 R2 将寄存器R1的值与寄存器R2的值按位异或 并 根据结果设置CPSR的标志位 比较R1与R2是否 相等 17 3 3ARM指令集 数据处理指令 算术运算指令ADD加法指令ADC带进位加法指令 加上CPSR中的C条件标志位的值SUB减法指令SBC带借位减法指令RSB逆向减法指令RSC带借位的逆向减法指令例 ADDR0 R1 256 R0 R1 256SUBR0 R1 R2 R0 R1 R2RSBR0 R2 R3 LSL 1 R0 R3 1 R2SUBSR0 R0 R2SBCR1 R1 R3 用SBC实现64位减法 R1 R0 R1 R0 R3 R2 18 3 3ARM指令集 数据处理指令 逻辑运算指令AND按位与指令ORR按位或指令EOR按位异或指令BIC位清除指令例 ANDR0 R0 3 该指令保持R0的0 1位 其余位清零ORRR0 R0 3 该指令设置R0的0 1位 其余位保持 不变 EORR0 R0 3 该指令反转R0的0 1位 其余位保持 不变BICR0 R0 0 x1F 该指令清除R0中低5位 其余的位保持 不变 19 3 3ARM指令集 乘法指令与乘加指令 乘法指令与乘加指令共有以下6条 MUL32位乘法指令MLA32位乘加指令SMULL64位有符号数乘法指令SMLAL64位有符号数乘加指令UMULL64位无符号数乘法指令UMLAL64位无符号数乘加指令例 MULR0 R1 R2 R0 R1 R2MULSR0 R1 R2 R0 R1 R2 同时设置CPSR中 的相关条件标志位MLAR0 R1 R2 R3 R0 R1 R2 R3SMULLR0 R1 R2 R3 R0 R2 R3 的低32位R1 R2 R3 的高32位 20 3 3ARM指令集 程序状态寄存器访问指令 程序状态寄存器访问指令包括以下2条 MRS程序状态寄存器到通用寄存器的数据传送指令MSR通用寄存器到程序状态寄存器的数据传送指令例 MRSR0 CPSR 传送CPSR的内容到R0MRSR0 SPSR 传送SPSR的内容到R0MSRCPSR R0 传送R0的内容到CPSRMSRSPSR R0 传送R0的内容到SPSRMSRCPSR c R0 传送R0的内容到SPSR 但仅仅 修改CPSR中的控制位域PSR的控制域 位 31 24 为条件标志位域 用f表示 位 23 16 为状态位域 用s表示 位 15 8 为扩展位域 用x表示 位 7 0 为控制位域 用c表示 21 3 3ARM指令集 加载 存储指令 ARM微处理器支持加载 存储指令用于在寄存器和存储器之间传送数据LDR字数据加载指令LDRB字节数据加载指令LDRH半字数据加载指令STR字数据存储指令STRB字节数据存储指令STRH半字数据存储指令例 LDRR0 R1 R2 将存储器地址为R1 R2的字数据读入 寄存器R0LDRR0 R1 R2 将存储器地址为R1 R2的字数据读 寄存器R0 并将新地址R1 R2写入R1 STRR0 R1 8 将R0中的字数据写入以R1为地址的 存储器中 并将新地址R1 8写入R1 STRR0 R1 8 将R0中的字数据写入以R1 8为 地址的存储器中 22 3 3ARM指令集 批量数据加载 存储指令 ARM微处理器所支持批量数据加载 存储指令可以一次在一片连续的存储器单元和多个寄存器之间传送数据 LDM批量数据加载指令STM批量数据存储指令例 STMFDR13 R0 R4 R12 LR 将寄存器列表中的寄 存器 R0 R4到R12 LR 存入堆栈 LDMFDR13 R0 R4 R12 PC 将堆栈内容恢复到寄 存器 R0 R4到R12 LR赋值给PC 注意 IA每次传送后地址加1 IB每次传送前地址加1 DA每次传送后地址减1 DB每次传送前地址减1 FD满递减堆栈 ED空递减堆栈 FA满递增堆栈 EA空递增堆栈 23 3 3ARM指令集 数据交换指令 ARM微处理器所支持的数据交换指令能在存储器和寄存器之间交换数据 SWP字数据交换指令SWPB字节数据交换指令例 SWPR0 R1 R2 将R2所指向的存储器中的字数据送 到R0 同时将R1中的字数据传送到R2所指向的存储单元 SWPR0 R0 R1 该指令完成将R1所指向的存储器中 的字数据与R0中的字数据交换 SWPBR0 R1 R2 将R2所指向的存储器中的字节数 据传送到R0 R0的高24位清零 同时将R1中 的低8位数据传送到R2所指向的存储单元 SWPBR0 R0 R1 该指令完成将R1所指向的存储器 中的字节数据与R0中的低8位数据交换 24 3 3ARM指令集 协处理器指令 ARM微处理器可支持多达16个协处理器 用于各种协处理操作 在程序执行的过程中 每个协处理器只执行针对自身的协处理指令 CDP协处理器数操作指令 用于ARM处理器初始化ARM协处理器的数据处理操作 LDC协处理器数据加载指令 用于ARM协处理器寄存器和内存单元间的数据传送 STC协处理器数据存储指令 用于ARM协处理器寄存器和内存单元间的数据传送 MCRARM处理器寄存器到协处理器寄存器的数据传送指令 MRC协处理器寄存器到ARM处理器寄存器的数据传送指令 25 3 3ARM指令集 异常产生指令 ARM微处理器所支持的异常指令有如下两条 SWI软件中断指令 用来实现在用户模式下对操作系统中特权模式的程序调用 BKPT断点中断指令 主要用于产生软件断点 供调试程序用 例 SWI0 x02 该指令调用操作系统编号位02 的系统例程 BKPT指令产生软件断点中断 可用于程序的调试 26 3 4Thumb指令介绍 Thumb指令的特点 Thumb指令的长度为16位 是针对代码密度问题而提出的 所有的Thumb指令和编程模型与ARM指令和编程模型相对应 Thumb子程序和ARM子程序就可以互相调用 Thumb指令集中的操作数和指令地址仍为32位大多数的Thumb指令是无条件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工厂安全培训目标课件
- 工厂安全培训的重要性
- 浙江银行招聘-2026年平安银行宁波分行秋季校园招聘备考考试题库附答案解析
- 四川省成都市双流区九江初级中学2025年教师招聘备考考试题库附答案解析
- 哲学博士答辩指南
- 2025年宁夏回族自治区宁安医院公开招聘合同制工作人员备考考试题库附答案解析
- 2025广西南宁市金凯路小学招聘体育学科编外教师备考考试题库附答案解析
- 三维运动合成方法-洞察及研究
- 幼教音乐策划全解
- 运动安全与伤害预防
- 钢结构项目可行性研究报告(立项申请报告)模板
- 四川成都经济技术开发区(龙泉驿区)“蓉漂人才荟”招聘笔试题库2025
- 解除委托退费协议书
- 国民经济行业分类代码(2024年版)
- 禁止黄赌毒协议书模板
- 《恒星的基本知识》课件
- 西双版纳课件
- 高校课堂教学创新大赛一等奖课件:创新教学模式在内科学教学中的实践
- 《选修模块手球》课件
- 手术安全核查课件
- 墙体彩绘施工方案
评论
0/150
提交评论