第四章ARM指令集.ppt

  1. 1、本文档共130页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章ARM指令集.ppt

第四章 ARM指令集 ARM指令集概述 ARM寻址方式 ARM指令详细介绍 一些基本的ARM指令功能段 (一)ARM指令集概述 1.1 ARM指令分类 ARM指令集总体分为6类指令 数据处理指令:完成寄存器中数据的算术和逻辑运算操作。 程序状态寄存器处理指令:mrs和msr。 跳转指令:b和bl。 Load/Store指令:唯一用于寄存器和存储器之间进行数据传送的指令。 异常中断产生指令:swi和bkpt。 协处理器指令。 1.2 ARM指令的特点: 所有指令都是32bit。 大多数指令都在单周期内完成。 所有指令都可以条件执行。 load/store体系结构。 指令集可以通过协处理器扩展 1.3 ARM指令的格式 一条典型的ARM指令编码格式为: 1.4 条件执行 每条ARM指令包含4位条件码域 cond ,它占用指令编码的最高四位[31:28]。 条件编码共 24 =16 种,其中,15种用于指令的条件码。每种条件码用2个英文缩写字符表示。(见P.101 表3-1) ARM处理器根据指令的执行条件是否满足,决定当前指令是否执行。 只有在cpsr中的条件标志位满足指定的条件时,指令才会被执行。不符合条件的代码依然占用一个时钟周期(相当于一个NOP指令)。 书写时,条件码的位置在指令助记符的后面(因此也称为条件后缀。),例如: MOVEQ R0, R1; 指令条件后缀如下表所示:(见P.101 表3-1) 默认情况下,数据处理指令不影响条件码标志位,但可以选择通过添加“S”来影响标志位。 CMP不需要增加 “S”就可改变相应的标志位。 loop … SUBS r1,r1,#1 BNE loop (二)ARM寻址方式 寻址方式: 根据指令编码中给出的地址码字段来寻找真实操作数的方式。 2.1 立即寻址 数据处理指令格式中,第二个操作数有12位 因此有效立即数immediate可以表示成: immediate=immed_8 循环右移(2×rot) 4 bit 移位值 (0-15)乘于2,得到一个范围在0-30,步长为 2的移位值。 记住一条准则: “最后8位一定要移动偶数位”。 只有能够通过此构造方法得到的才是合法的立即数。 合法立即数: 0xFF;0x104;0xFF0;0xFF00 非法立即数: 0x101;0x102;0xFF1 一个合法的立即数可能有多种编码方法,将使某些指令的执行产生不同的结果。 0x3F0 2.2 寄存器寻址 寄存器移位寻址 ——当第二操作数为寄存器型时,在执行寄存器寻址操作时,可以选择是否对第二操作数进行移位,即第二操作数形如: MOV Rd, Rn, Rm,{shift} 其中: Rm 称为第二操作数寄存器 shift 用来指定移位类型和移位位数。移位 位数可以用5位立即数#shift 或寄存 器(Rs)方式。 在指令执行时将寄存器移位后的内容作为第二操作数参与运算。例如指令: ADD R3,R2,R1,LSR #2 ;R3←R2+(R1右移2位) ADD R3,R2,R1,LSR R0 ;R3←R2+(R1右移R0位) 第二操作数移位方式 LSL:逻辑左移,空出的最低有效位用0填充。 LSR:逻辑右移,空出的最高有效位用0填充。 2.3 寄存器间接寻址 2.4 基址加偏址寻址(变址寻址) 有三种加偏址的方式: 前变址模式(不修改基址寄存器): ——先基址+偏址,生成操作数地址,做指令指定的操作。 偏移地址 ——可以是一个立即数,也可以是另一个寄存器,并且在加到基址寄存器前还可以经过移位操作,如下所示: LDR r0,[r1,r2] ;r0—mem32[r1+r2] LDR r0,[r1,r2,LSL #2] ;r0—mem32[r1+r2*4] 常用的是立即数偏移的形式。 2.5 堆栈寻址 堆栈寻址 ——堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针SP)指向一块存储区域(堆栈)。 堆栈可分为两种增长方式: ◆ 向上生长:向高地址方向生长,称为递增堆栈。 ◆ 向下生长:向低地址方向生长,称为递减堆栈。 根据堆栈指针指向的数据位置的不同,可分为: 满堆栈 ——堆栈指针指向最后压入堆栈的有效数据项,称为满堆栈; 空堆栈 ——堆栈指针指向下一个待压入数据的空位置,称为空堆栈。 这样就有4种类型的堆栈表示递增和递减的满和空堆栈的各种组合。 四种类型的堆栈工作方式 满递增堆栈FA: —

文档评论(0)

magui + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8140007116000003

1亿VIP精品文档

相关文档