




已阅读5页,还剩52页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章ARM指令系统 ARM指令系统概述ARM指令的寻址方式ARM指令系统介绍Thumb指令集 ARM指令系统概述数据类型存储器组织ARM指令分类ARM指令的条件执行ARM指令的特点 ARM指令系统概述 ARM指令系统属于RISC指令系统 ARM指令包括标准ARM指令集和Thumb指令集 标准的ARM指令每条都是32位 Thumb指令集是ARM指令集的子集 每条指令只有16位 ARM高效 快速 Thumb灵活 小巧 一 数据类型 ARM处理器一般支持下列6种数据类型 8位有符号字节类型数据 8位无符号字节类型数据 16位有符号半字类型数据 16位无符号半字类型数据 32位有符号字类型数据 32位无符号字类型数据 有些ARM处理器不支持半字和有符号字节数据类型 在ARM内部 所有ARM指令都是32位操作数 短的数据类型只有在数据传送类指令中才被支持 当一个字节数据取出后被扩展到32位 在内部数据处理时 作为32位的值进行处理 一 数据类型 ARM指令都是32位 并且以字为边界 Thumb指令都是16位 以2个字节为边界 ARM协处理器可以支持另外的数据类型 包括一套浮点数数据类型 一 数据类型 ARM字的地址的最低2位必须为00 半字的地址的最低为必须为0 字的内容在存储器中的存放通常有两种方式 小端方式 每个字的低位字节存在低地址大端方式 每个字的低位字节存在高地址 二 存储器组织 如下图大多数ARM处理器芯片都支持上面两种方式 一般缺省为小端方式 二 存储器组织 例如 0 x12345678小端方式存放如下 大端方式存放如下 地址内容地址内容A78A12A 156A 134A 234A 256A 312A 378 二 存储器组织 三 ARM指令分类 ARM指令可分为以下6类 一 存储器访问指令 Load Store 二 ARM数据处理类指令 三 程序状态寄存器访问指令 四 ARM分支转移类指令 五 ARM协处理器类指令 六 软件中断和断点指令 ARM指令集编码表 数据处理指令 四 ARM指令的条件执行 ARM的指令格式如下 Opcode Cond S Rd Rn Operand2 Cond 指令的条件码P41Opcode 指令操作码 指令助记符S 操作是否影响CPSRRn 包含第一个操作数的寄存器编码Rd 目标寄存器编码Operand2 第二操作数 所有的ARM指令都包含一个条件码 即每条ARM指令都是有条件执行的 而Thumb指令只有B 跳转 指令具有条件执行功能 可选择是否根据执行结果来更新条件码 若要更新条件码 则指令中须包含后缀 S 一些指令 如CMP CMN TST和TEQ 不需要后缀 S 它们唯一的功能就是更新条件码标志 四 ARM指令的条件执行 可以根据另外一条指令设置的标志 有条件地执行某条指令 有下列两种情况 在更新标志的指令后立即执行 在插入的几条不更新标志的指令后执行条件码的值将决定指令如何执行和相应标志的状态 如下表所示 四 ARM指令的条件执行 四 ARM指令的条件执行 HS LO HI LS4个条件代码指的是无符号数GE LT GT LE4个条件代码指的是有符号数 四 ARM指令的条件执行 例 执行10次循环 MOVR0 10 设置循环次数LOOP SUBSR0 1 循环次数减1BNELOOP 不为0 继续循环 否则结束循环 P41 例 条件转移 CMPR0 5 如果R0小于5BLTSUB1 则转SUB1BGESUB2 否则转SUB2 P41 CMPr0 5BEQBYPASS if r0 5 ADDr1 r1 r0 r1 r1 r0 r2SUBr1 r1 r2 BYPASS CMPr0 5 if r0 5 ADDNEr1 r1 r0 r1 r1 r0 r2SUBNEr1 r1 r2 EQ 相等 Z 1 NE 不相等 Z 0 五 ARM指令特点 1 标准的ARM指令都是32位 Thumb指令是16位 它代码密度高 执行速度快 16位存储器成本低 处理器一开始总是在ARM状态 可用Bx指令转换到Thumb状态 2 大多数ARM指令都在单周期内完成 3 所有的ARM指令都可以条件执行 4 具有灵活的第2操作数 它既可以是立即数 也可以是逻辑运算数 使得ARM指令可以在读取数值的同时进行算术和移位操作 可以在几种模式下操作 包括通过使用中断指令SWI从用户模式进入的管理模式 MOVR1 R0 MOVR1 0 MOVR1 R0 LSL 3 五 ARM指令特点 5 ARM指令属于RISC指令 具有RISC指令的特点 指令少 且等长 便于充分利用流水线技术 使用多寄存器 且多为简单的Load Store指令 即为Load Store体系结构 从内存取值 执行完后再放回内存 五 ARM指令特点 指令中的立即数和直接地址 由于指令统一为32位 所以一般立即数为5 12位 通过采用一些特殊方法 使它能够处理32位立即数 同理 直接 相对地址一般为24位 由于指令地址最低二位为00 故寻址范围为226 相对地址范围为 225 7 指令集可以通过协处理器进行扩展 五 ARM指令特点 六 ARM指令的寻址方式 ARM指令在大多数情况下可以有3个操作数 必须注意写操作数的顺序 首先是结果寄存器 然后是第一操作数寄存器 最后是第二操作数 其中第一操作数或目的操作数一般为基本操作数方式 ARM指令的基本寻址方式有 寄存器寻址 寄存器中的内容为操作数 指令中给出相应的寄存器 例MOVR0 R1 R1 R0 ARM指令的基本寻址方式有 立即数寻址 操作数本身已包含在指令中 取出指令也就取出了立即可用的操作数 例 MOVR0 20 20 R0 寄存器间接寻址 指令中给出的通用寄存器里存放着操作数所存放的存储单元的地址 例 LDRR0 R3 R3 R0 寄存器变址 将基址寄存器的内容与指令中给出的偏移量相加 形成操作数的有效地址 例 LDRR0 R1 4 R1 4 R0 相对寻址 由程序计数器PC提供基地址 加上指令中给出的偏移量 得到操作数的有效地址 例 Brel pc rel pc ARM指令的基本寻址方式有 此外 每条ARM指令中还可以有第2个和第3个操作数 它们采用复合寻址方式 1 第二操作数寻址ARM运算指令和某些数据传送指令除了目的操作数和第一操作数 它们为寄存器寻址 外 还有第2操作数 该第2操作数有以下寻址方式 1 立即寻址 immediate 8 r 2 由8位立即数和4位移位位r决定 r指定右移r 2位 r 0 15 例 ADDR3 R1 2 R1 2 R3 ARM的复合寻址方式有 1 第二操作数寻址 1 立即寻址对立即数的要求 因为ARM指令均为32位 所以在指令编码中 32位有效立即数是通过循环右移偶数位而间接得到 当第2操作数为立即数时 都采用一个8位的常数循环右移偶数位而间接得到 移位数由一个4位二进制数的2倍表示 这样 一个32位立即数在指令编码中只需要用12位编码表示 ARM的复合寻址方式有 1 第二操作数寻址 1 立即寻址对立即数的要求 并不是每一个32位的常量都是合法的立即数 只有通过上面的构造方法得到的才是合法的立即数 例如 常数0 xF200 0 x110000 0 x12800是合法的立即数 它们分别是由8位的0 xF2循环24 2 12 位 0 x11循环右移16 2 8 位 0 x4A循环右移22 2 11 位得到 ARM的复合寻址方式有 1 第二操作数寻址 1 立即寻址对立即数的要求 而0 x1010 0 x00102或0 xFF100等常数不是合法的立即数 因为它们不能通过合法的构造方法得到 2 寄存器直接 Rm 寄存器寻址就是利用寄存器中的数值作为操作数 这种寻址方式是各类微处理器经常采用的一种方式 也是一种执行效率较高的寻址方式 以下指令 例 ADDR3 R1 R2 R1 R2 R3 ARM的复合寻址方式有 3 寄存器移位 Rm 移位码 immed 5 在ARM指令的数据处理指令中参与操作的第二操作数为寄存器型时 在执行寄存器寻址操作时 可以选择是否对第二操作数进行移位 即Rm 其中Rm称为第二操作数寄存器 用来指定移位类型 LSL LSR ASL ASR ROR或RRX 和移位位数 immed 5 例 MOVR0 R1 LSL 1 R1 2 R0ADDR3 R2 R1 LSR 2 R2 R1 4 R3 1 第二操作数寻址方式 ARM的复合寻址方式有 寄存器移位 第二操作数移位方式LSL 逻辑左移 空出的最低有效位用0填充 LSR 逻辑右移 空出的最高有效位用0填充 ASL 算术左移 由于左移空出的有效位用0填充 因此它与LSL同义 ASR 算术右移 算术移位的对象是带符号数 移位过程中必须保持操作数的符号不变 如果源操作数是正数 空出的最高有效位用0填充 如果是负数用1填充 ROR 循环右移 移出的字的最低有效位依次填入空出的最高有效位 RRX 带扩展的循环右移 将寄存器的内容循环右移1位 空位用原来C标志位填充 4 寄存器间接移位 Rm 移位码Rs 移位码包括 LSL LSR ASR ROR RRX中的任何一种 移位数由Rs的内容决定 例1 MOVR0 R1 LSL R2 R1 2R2 R0例2 ADDR3 R2 R1 LSRR0 R2 R1 2R0 R3 1 第二操作数寻址方式 ARM的复合寻址方式有 ARM处理器中 取数指令的源操作数和存数指令的目的操作数采用带偏移量的变址方式 可以表示为基址加变址寻址 有效地址为基址寄存器的内容加上偏移量的值 对于字和无符号字节寻址方式通常包括以下三种 1 寄存器间接寻址 Rn 例LDRR0 R1 R1 R0STRR0 R1 R0 R1 第一条指令将以R1的值为地址的存储器中的数据传送到R0中 第二条指令将R0的值传送到以R1的值为地址的存储器中 2 字和无符号字节寻址方式 ARM的复合寻址方式有 2 前变址偏移寻址 Rn 偏移量 1 在数据传送之前 将偏移量加到Rn中 其结果作为传送数据的存储器地址 若使用后缀 则结果写回到Rn中 且Rn不允许是R15 该寻址方式又分为下列三种 立即数偏移 Rn 例 LDRR0 R1 4 R1 4 R0 R1 4 R1这种自动改变基址寄存器以指向下一个传送地址 对数据块传送很有用 2 字和无符号字节寻址方式 ARM的复合寻址方式有 寄存器偏移 Rn Rm 也称基址加索引寻址 是变址寻址的另一种形式 指令中指定一个基址寄存器 再指定另一个寄存器 索引 其值作为偏移量加到基址上形成操作数的地址 例 LDRR0 R1 R2 R1 R2 R0 2 字和无符号字节寻址方式 2 前变址偏移寻址 移位寄存器偏移 Rn Rm LSL Rn Rm LSR Rn Rm ASR Rn Rm ROR Rn RmRRX 例 LDRR0 R1 R2 LSL 2 R1 R2 4 R0 2 字和无符号字节寻址方式 2 前变址偏移寻址 3 后变址偏移寻址 Rn 偏移量 Rn的值用作传送数据的存储器地址 在数据传送后 偏移量加到Rn中 结果写回到Rn Rn不允许是R15 该寻址方式又分为下列三种 立即数偏移 Rn 例 LDRR0 R1 4 R1 R0 R1 4 R1 寄存器偏移 Rn Rm例 LDRR0 R3 R8 R3 R0 R3 R8 R3 2 字和无符号字节寻址方式 移位寄存器偏移 Rn 土Rm LSL Rn 土Rm LSR Rn 土Rm ASR Rn 土Rm ROR Rn 土Rm RRX例 LDRR0 R3 R8 LSL 2 R3 R0 R3 R8 4 R3 2 字和无符号字节寻址方式 3 后变址偏移寻址 Rn 偏移量 3 半字和有符号字节寻址方式 ARM中的半字和有符号字节取数与存数指令的寻址方式与字和无符号字节的寻址方式略有不同 它通常可以分以下三种 1 寄存器间接寻址 Rn 例 LDRSHR0 R1 R1 R0STRHR0 R1 R0 R1 SH对有符号半字H对无符号半字SB对有符号字节 2 前变址偏移寻址 Rn 偏移量 i 在数据传送之前 将偏移量加到Rn中 其结果作为传送数据的存储器地址 若使用后缀 则结果写回到Rn Rn不允许是R15 该寻址方式又分为下列二种 立即数偏移 Rn 例 LDRHR0 R5 22 R5 22 R0 R5 22 R5 寄存器偏移 Rn Rm 例 STRBR0 R3 R8 R0 R3 R8 R3 R8 R3 3 半字和有符号字节寻址方式 3 后变址偏移寻址 Rn 偏移量 Rn的值用作传送数据的存储器地址 在数据传送后 将偏移量加到Rn中 结果写回到Rn中 Rn不允许是R15 该寻址方式又分成下列二种 立即数偏移 Rn 例 LDRBR0 R5 22 R5 R0 R5 22 R5 寄存器偏移 Rn Rm例 STRBR0 R3 R8 R0 R3 R3 R8 R3 3 半字和有符号字节寻址方式 4 块寻址 把一块数据从存储器的某一位置拷贝到另一位置 利用前面介绍的变址寻址加后缀 进行数据块传送是很方便的 在ARM中设置的多寄存器寻址和堆栈寻址也是进行数据块传送的有效方法 1 多寄存器寻址 一次可以传送几个寄存器的值 允许一条指令传送16个寄存器的任何子集 或所有的16个寄存器 1 多寄存器寻址例如 LDMIAR1 R0 R2 R5 R0 R1 R2 R1 4 R5 R1 8 由于传送的数据项总是32位的字 基址R1应当字对准 这条指令将R1指向的连续存储单元的内容送到寄存器R0 R2和R5 常用于多个寄存器的内容出栈或入栈 4 块寻址 IA IB DA DB后缀在一般数据传送用 I 增 D 减 A 之后 B 之前 P44 1 多寄存器寻址书P45说明4条带不同变量的多字节传送指令传送前后的内存变化 以及使用自动寻址时如何修改基址寄存器 指令执行前的基址寄存器是R1 指令执行后的基址寄存器是R1 书P39例子 4 块寻址 2 堆栈寻址堆栈是一种按特定顺序 先进后出或后进先出 进行存取的存储区 堆栈寻址是隐含的 它使用一个专门的寄存器 堆栈指针 指向一块存储器区域 堆栈 堆栈指针所指向的存储单元就是堆栈的栈顶 4 块寻址 2 堆栈寻址堆栈的生成方式有 向上生长 即堆栈向高地址方向生长向下生长 即堆栈向低地址方向生长根据堆栈指针指向的位置有 满堆栈 指针指向最后压入堆栈的有效数据项 空堆栈 指针指向下一个要放入的数据项的位置 4 块寻址 2 堆栈寻址ARM硬件中的堆栈分为以下四种类型 满向上生长型 堆栈向高地址方向生长 当前堆栈指针指向一个有效值 空向上生长型 堆栈向高地址方向生长 当前堆栈指针指向一个空值 4 块寻址 2 堆栈寻址 满向下生长型 堆栈向低地址方向生长 当前堆栈指针指向一个有效值 空向下生长型 堆栈向低地址方向生长 当前堆栈指针指向一个空值 ARM对堆栈的使用一般用多寄存器传送指令 这是保存处理器状态和多字节传送的一种有效方式 4 块
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025办公室租赁合同调整计划
- 医疗服务债权转让含个人健康信息保密合同
- 出租车新能源改造项目合同
- 济南物流企业运输司机安全责任与薪酬激励劳动合同书
- 集体企业注销代理服务合同
- 2025【合同范本】采购合同范本
- 绿色矿山开采与环保责任合同细则
- 2025平原土地承包合同范本
- 2025年个人宠物用品店铺出售合同
- 太原安全阀培训课件
- 2025年海底捞企业面试题及答案
- 小学体育家长会课件
- 教育的人口功能
- 抗凝剂皮下注射技术临床实践指南2024版
- 中小学教辅材料征订管理制度
- 2025年芳香保健师(初级)职业技能鉴定理论考试真题解析试卷
- 2025年陕西省中考数学试题(原卷版)
- 腰椎管狭窄症病例讨论
- 二衬混凝土浇筑施工技术
- 2025至2030全球及中国护理教育行业项目调研及市场前景预测评估报告
- 培训课件的字体版权
评论
0/150
提交评论