ARM寻址方式.ppt_第1页
ARM寻址方式.ppt_第2页
ARM寻址方式.ppt_第3页
ARM寻址方式.ppt_第4页
ARM寻址方式.ppt_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

2 7ARM处理器的寻址方式 ARM指令集可以分为跳转指令 数据处理指令 程序状态寄存器传输指令 Load Store指令 协处理器指令和异常中断产生指令 根据使用的指令类型不同 指令的寻址方式分为数据处理指令寻址方式和内存访问指令寻址方式 数据处理指令的基本语法格式 S 其中号内的项是必须的 号内的项是可选的 各项的说明如下 opcode 指令助记符 cond 执行条件 S 是否影响CPSR寄存器的值 Rd 目的操作数 Rn 第1个源操作数 operand2 第2个源操作数 所有的ARM指令都可以条件执行 如果指令不标明条件代码 将默认为无条件 AL 执行 cond项 条件执行 ARM指令可包含一个可选的条件码 根据CPSR中的条件位自动判断是否执行指令 在条件满足时 指令执行 否则指令被忽略 C代码 If a b a Elseb 对应的汇编代码 CMPR0 R1 R0 a 与R1 b 比较ADDHIR0 R0 1 若R0 R1 则R0 R0 1ADDLSR1 R1 1 若R0 R1 则R1 R1 1 示例 ARM数据处理指令均可根据执行结果来选择是否更新条件码标志 若要更新条件码标志 加后缀 S S项 ARM指令集 第2个源操作数 灵活的使用第2个操作数 operand2 能够提高代码效率 它有如下的形式 immed 8r 常数表达式 Rm 寄存器方式 Rm shift 寄存器移位方式 immed 8r 常数表达式 例如 ANDR1 R2 0 x0F Rm 寄存器方式在寄存器方式下 操作数即为寄存器的数值 例如 SUBR1 R1 R2 LSL 逻辑左移 空出的最低有效位用0填充 LSR 逻辑右移 空出的最高有效位用0填充 ASL 算术左移 由于左移空出的有效位用0填充 因此它与LSL同义 ASR 算术右移 算术移位的对象是带符号数 移位过程中必须保持操作数的符号不变 如果源操作数是正数 空出的最高有效位用0填充 如果是负数用1填充 ROR 循环右移 移出的字的最低有效位依次填入空出的最高有效位 RRX 带扩展的循环右移 将寄存器的内容循环右移1位 空位用原来C标志位填充 Rm shift 寄存器移位方式 例如 ADDR1 R1 R1 LSL 3 R1 R1 R1 R3 数据处理指令寻址方式可以分为以下几种 1 立即数寻址方式 2 寄存器寻址方式 3 寄存器移位寻址方式 立即寻址指令中的操作码字段后面的地址码部分即是操作数本身 也就是说 数据就包含在指令当中 取出指令也就取出了可以立即使用的操作数 这样的数称为立即数 立即寻址指令举例如下 SUBSR0 R0 1 R0减1 结果放入R0MOVR0 0 xFF000 将立即数0 xFF000装入R0寄存器注意 立即数以 开头 16进制数在 后加 0 x 或 表示 MOVR0 0 xFF00 0 xFF00 从代码中获得数据 1 立即数寻址方式 立即数寻址方式下 立即数必须是对应8位位图格式 即立即数由一个8位的常数循环移偶数位得到 因此并不是所有的数都可以用作立即数寻址 在立即数寻址方式中 ARM只提供了12bit来放数据 其中8位是用来记录数值的 另外4位放移位的位数 以此来形成一个立即数 合法的立即数必须能够找到得到它的那个8位常数 否则这个立即数就是非法的 立即寻址中的立即数 ARM指令的基本格式 S 其中号内的项是必须的 号内的项是可选的 各项的说明如下 opcode 指令助记符 cond 执行条件 S 是否影响CPSR寄存器的值 Rd 目标寄存器 Rn 第1个操作数的寄存器 operand2 第2个操作数 为什么要规定8位位图 从指令的编码格式来解释 opcode 指令助记符 cond 执行条件 S 是否影响CPSR寄存器的值 Rd 目标寄存器 Rn 第1个操作数的寄存器 operand2 第2个操作数 ARM指令格式 为什么要规定8位位图 表格中的shifter operand所占的位数 12位 要用一个12位的编码来表示任意的32位数是绝对不可能的 12位数有212种可能 而32位数有232种 但是又要用12位的编码来表示32位数怎么办 为什么要规定8位位图 在表示数的数量上做限制 通过编码来实现用12位的编码来表示32位数 在12位的shifter operand中 8位存数据 4位存放移位的次数 8位存数据 该常数必须对应8位位图 4位存移位的次数 移偶数位 4位只有16种可能值 而32位数可以循环移位32次 32种可能 那就只好限制 只能移偶数位 两位两位的移 好像一个16位数在移位 16种移位可能 举例 ANDR1 R2 0 xff0 xff为8位二进制数 处理器就将其直接放进8位 基本 数中 而4位 移位 数则为0 ANDR1 R2 0 x1040 x104已经超过了8位二进制数 如何表示 0 x104的二进制 00000000000000000000000100000100 是00000000000000000000000001000001通过循环右移30位得到的 因此改造后的结果是8位 基本 数中存放01000001 而 移位 数为15 怎么判别是否合法 第一 看这个数转换成二进制后1的个数是否不超过8个如果不超过8个 再看这n个1 n 是否能同时放到8个二进制位中如果可以放进去 再看这八个二进制位是否可以循环右移偶数位得到起初被判断的那个数值 如果可以 则此数值即为符合8位位图原理 否则不合法 合法立即数 0 x3F8是合法的 把它写成二进制形式为 0011111111000b 使用0 xFE 11111110b 循环向左移动2位可以得到0 x3F8 练习 0 xff0000000 x1010 x1020 xC00000030 xff10 x6000000E 操作数的值在寄存器中 指令中的地址码字段指出的是寄存器编号 指令执行时直接取出寄存器值来操作 寄存器寻址指令举例如下 MOVR1 R2 将R2的值存入R1SUBR0 R1 R2 将R1的值减去R2的值 结果保存到R0注意 第1个是目的寄存器 然后是第一操作数寄存器 最后是第二操作数寄存器 寄存器寻址方式 MOVR1 R2 0 xAA 寄存器移位寻址是ARM指令集特有的寻址方式 当第2个操作数是寄存器移位方式时 第2个寄存器操作数在与第1个操作数结合之前 选择进行移位操作 寄存器移位寻址指令举例如下 MOVR0 R2 LSL 3 R2的值左移3位 结果放入R0 即是R0 R2 8ANDSR1 R1 R2 LSLR3 R2的值左移R3位 然后和R1相 与 操作 结果放入R1 寄存器移位寻址方式 MOVR0 R2 LSL 3 0 x08 0 x08 逻辑左移3位 2 7 2内存访问指令寻址方式 内存访问指令的寻址方式可以分为以下几种 1 字及无符号字节的Load Store指令的寻址方式 2 杂类Load Store指令的寻址方式 3 批量Load Store指令的寻址方式 4 协处理器Load Store指令的寻址方式 字及无符号字节的Load Store指令语法格式如下 LDR STR B T 1 字及无符号字节的Load Store指令的寻址方式 注 1 B为加载字节数据 2 T为可选后缀 若指令有T 那么即使处理器在特权模式下 存储系统也将访问看成是在用户模式下进行的 T在用户模式下无效 1 立即数偏移寻址 LDRR2 R3 0 x0C 注 读取R3 0 x0C地址上的存储单元的内容 放入R22 寄存器偏移寻址 LDRR0 R1 R2 注 读取R1 R2地址上的存储单元的内容 放入R03 带移位的寄存器偏移寻址 LDRR1 R0 R2 LSL 2 注 R1 R0 R2 4 4 前索引寻址 是将基址与偏移量相加作为传送数据的地址 传送数据后将数据的地址传送给基址寄存器 LDRRd Rn 0 x04 注 在数据传送之前 将偏移量加到Rn中 其结果作为传送数据的存储地址 使用后缀 则结果写回到Rn中 5 后索引寻址 是将基址作为传送数据的地址 传送数据后自动将基址的内容与偏移量相加传送给基址寄存器 LDRRd Rn 0 x02注 Rn的值用做传送数据的存储地址 在数据传送后 将偏移量与Rn相加 结果写回到Rn中 使用该类寻址方式的指令的语法格式如下 LDR STR H SH SB D 2 杂类Load Store指令的寻址方式 注 1 B 字节 H 半字 D 双字 2 S 加载有符号数 又称为多寄存器寻址方式 块拷贝寻址方式功能 批量Load Store指令将一片连续内存单元的数据加载到通用寄存器组中或将一组通用寄存器的数据存储到内存单元中 该类指令的语法格式如下 LDM STM 3 批量Load Store指令寻址方式 允许一条指令传送16个寄存器的任何子集或所有寄存器 举例如下 LDMIAR1 R2 R7 R12 将R1指向的单元中的数据读出到 R2 R7 R12中 R1自动加4 STMIAR0 R2 R7 R12 将寄存器R2 R7 R12的值保 存到R0指向的存储单元中 R0自动加4 注意 寄存器子集的顺序是按由小到大的顺序排列 连续的寄存器可用 连接 否则用 分隔书写 LDMIAR1 R2 R4 R6 0 x40000010 举例 LDMIAR0 R3 R9 将R0指向的内存地址上的多字 数据读出到R3 R9中 R0自动加4 STMIAR1 R3 R9 将寄存器R3 R9的值保存到 R1指向的存储单元中 R1自动加4 4 堆栈操作寻址方式 堆栈是一个按特定顺序进行存取的存储区 操作顺序为 后进先出 堆栈寻址是隐含的 它使用一个专门的寄存器 堆栈指针 指向一块存储区域 堆栈 指针所指向的存储单元即是堆栈的栈顶 4 堆栈操作寻址方式 根据不同的寻址方式 将堆栈分为以下4种 1 Full栈 堆栈指针指向栈顶元素 2 Empty栈 堆栈指针指向第一个可用元素 3 递减栈 堆栈向内存地址减小的方向生长 即向下生长 4 递增栈 堆栈向内存地址增加的方向生长 即向上生长 堆栈指针指向最后压入的堆栈的有效数据项 称为满堆栈 先跳SP 再放数据 堆栈指针指向下一个待压入数据的空位置 称为空堆栈 先放数据再跳SP 0 x12345678 0 x12345678 0 x12345678 递增栈和递减栈 根据堆栈的不同种类 将其寻址方式分为以下4种 1 满递减FD 2 空递减ED 3 满递增FA 4 空递增EA 举例1 满递减堆栈 STMFDSP R1 R7 LR 将R1 R7 LR入栈 空递减堆栈 LDMEDSP R1

温馨提示

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

评论

0/150

提交评论