第五讲 ARM指令集与编程.ppt

  1. 1、本文档共75页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ARM 指令集的特点 向后兼容:新版本增加指令,并保持指令向后兼容; Load-store 结构* load/store –从存储器中读某个值,操作完后再将其放回存储器中 只对存放在寄存器的数据进行处理; 对于存储器中的数据,只能使用load/store指令进行存取 指令格式 指令格式 3 地址指令格式 在ARM状态中使用 例 ARM指令编码格式 说明 Cond 指令执行的条件编码 Opcode 指令操作符编码 S 决定指令的操作是否影响CPSR的值 Rd 操作目标寄存器编码 Rn 包含第一操作数的寄存器编码 Shifter_operand 表示第二操作数 ARM指令的寻址方式 寄存器寻址  寄存器中的数据就是操作数 立即寻址   指令中给出了操作数本身 寄存器间接寻址 以寄存器中的数据为地址从存储器取出数据作为操作数 寄存器变址寻址 将寄存器中的数据和指令中的数据相加得到操作数的有效地址 多寄存器寻址  一次完成对多个寄存器的操作 相对寻址    指相对程序计数器PC当前值的寻址方式 堆栈寻址    针对堆栈的寻址方式 ARM 指令分类 数据处理指令 – 使用和改变寄存器的值 数据传送指令 – 把存储器的值拷贝到寄存器中 (load) or 把寄存器中的值拷贝到存储器中(store) 控制流指令 分支 分支和链接, 保存返回的地址,以恢复最先的次序 软件中断指令 程序状态寄存器指令 协处理器指令 数据处理指令 - 1 数据处理指令的类别 算术操作 按位逻辑操作 寄存器移位操作 比较操作 操作数: 32-bits 宽; 有3种指定操作数的方式 来自寄存器 第二操作数可以是常数(立即数) 移位寄存器操作数 数据处理指令 - 2 数据处理指令 - MOV 桶形移位器的使用 数据处理指令 移位操作 在任何数据处理指令中,第二个寄存器操作数可以有应用该操作数的移位操作. 逻辑移位 LSL:逻辑左移 字的最小位空位清零 LSR:逻辑右移字的最大位空位清零. 桶形移位器操作 数据处理指令 - 3 移位操作 (cont’d) 算术移位 ASR: = LSR ASL: 算术左移 循环移位: ROR, RRX 数据处理指令 立即数操作: 移位寄存器操作数 第二个操作数在与第一个操作数运算之前,先进行移位操作的. 条件码标志 任何数据处理指令都可以设置条件码 (N, Z, V, and C) 适用于除比较操作外的所有数据处理指令 特殊的请求必须在汇编语言中实现,这种请求是通过把”S”增加到选择代码中指定的 算术操作设置所有的标志位 (N, Z, C, and V) 逻辑和移位操作设置 N and Z 条件执行及标志位** ARM指令可以通过添加适当的条件码后缀来达到条件执行的目的。 这样可以提高代码密度,减少分支跳转指令数目,提高性能。 CMP r3,#0 CMP r3,#0 BEQ skip ADDNE r0,r1,r2 ADD r0,r1,r2 skip 默认情况下,数据处理指令不影响程序状态寄存器的条件码标志位,但可以选择通过添加“S”来影响标志位。 CMP不需要增加 “S”就可改变相应的标志位。 loop … SUBS r1,r1,#1 BNE loop Condition Codes 下表为所有可能的条件码: 注意:AL为默认状态,不需要单独指出 条件执行示例 一系列的指令都使用条件指令 if (a==0) func(1); CMP r0,#0 MOVEQ r0,#1;把func()函数的参数赋给r0 BLEQ func 置标志位,再使用不同的条件码 if (a==0) x=0 ;r0:a,r1:x if (a0) x=1; CMP r0,#0 MOVEQ r1,#0 MOVGT r1,#1 使用条件比较指令 if (a==4 || a==10) x=0; CMP r0,#4 CMPNE r0,#10 MOVEQ r1,#0 条件执行 所有的ARM指令都可以条件执行 指令的执行与否取决于CPSR寄存器的N, Z, C and V标志位 Condition Field in instruction 0000 = EQ - Z set (equal) 0001 = NE - Z clear (not equal) 0010 = CS - C set (unsigned higher or same) 0011 = CC - C clear (unsigned l

文档评论(0)

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

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

1亿VIP精品文档

相关文档