第三章 ARM指令集与编程..ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 ARM指令集与编程 主要内容 3.1 总体介绍:指令分类,特点,格式,条件码 3.2 ARM 指令寻址方式 3.3 数据处理指令:数据传输指令,算术指令,逻辑指令,比较指令,乘法指令(略),前导零计数(略) 3.4 程序状态访问指令 3.5 跳转指令 3.6 单数据访存指令 3.7 多数据访存指令 3.8 其它指令:信号量操作指令,异常中断产生指令,协处理器指令(略) 3.9 伪指令 3.10 Thumb指令集 3.1 总体介绍: 指令分类,特点,格式,条件码 3.1.1 指令分类 ARM指令集总体分为6类指令 数据处理指令:数据传输指令,算术指令,逻辑指令,比较指令,乘法指令,前导零计数。 程序状态访问指令:mrs和msr。 跳转指令:b和bl。 访存指令(Load/Store):单数据访存指令,多数据访存指令,信号量操作指令。 异常中断产生指令:swi和bkpt。 协处理器指令。 3.1.2 指令特点 所有指令都是32bit。 大多数指令都在单周期内完成。 所有指令都可以条件执行。 load/store体系结构。 指令集可以通过协处理器扩展 3.1.3 ARM指令的格式 Opcode{cond}{s} Rd, Rn, Operand2 Cond:指令的条件码。 Opcode:指令操作码。 S:操作是否影响cpsr。 Rn:包含第一个操作数的寄存器编码。 Rd:目标寄存器编码。 Operand2:第2操作数。 3.1.4 ARM指令的条件执行 (1) ARM指令的条件域 EQ/NE: 等于/不等于(equal / not equal) HS/LO: 无符号数高于或等于/无符号数小于(higher or same/lower) HI/LS: 无符号数高于/无符号数低于或等于(higher/lower or same) GE/LT: 有符号数大于或等于/有符号数小于(greater or equal / less than) GT/LE: 有符号数大于/有符号数小于或等于(greater than / less or equal) MI/PL: 负/非负 VS/VC: 溢出/不溢出(overflow set / overflow clear) CS/CC: 进位/无进位(carry set / carry clear) (2) ARM指令的条件码 (2)ARM指令的条件码(续) 3.2 ARM 指令寻址方式 3.2.1 立即数方式 3.2.2 寄存器寻址 3.2.3 寄存器移位寻址 逻辑移位 LSL:逻辑左移(Logical Shift Left)。寄存器中字的低端空出的位补0。 ·LSR:逻辑右移(Logical Shift Right)。寄存器中字的高端空出的位补0。 ·ASR:算术右移(Arithmetic Shift Right)。算术移位的对象是带符号数,在移位过程中必须保持操作数的符号不变。若源操作数为正数,则字的高端空出的位补0。若源操作数为负数,则字的高端空出的位补1。 ·ROR:循环右移(Rotate Right)。从字的最低端移出的位填入字的高端空出的位。 ·RRX:扩展为1的循环右移(Rotate Right Extended by 1 place)。操作数右移一位,空位(位[31])用原C标志填充。 在任何数据处理指令中,第二寄存器操作数可以有应用该操作数的移位操作. 逻辑移位 LSL:逻辑左移字的最小位空位清零 LSR:逻辑右移字的最大位空位清零. 算术移位: ASR,正数的ASR= LSR 循环移位: ROR,RRX 3.2.5 变址寻址 变址寻址就是将基址寄存器的内容与指令中给出的位移量相加,形成操作数有效地址。变址寻址用于访问基址附近的存储单元,包括: 基址加偏移 [Rn,#+/-offset_12] 基址加索引寻址[Rn,+/-Rm] 寄存器间接寻址是偏移量为0的基址加偏移寻址。 基址加偏移寻址中的基址寄存器包含地址,需加(或减)(最大4 KB)的偏移来计算访问的地址。 LDR R0,[R1,#4] ; R0 =[R1+4] 这是前索引寻址方式。 带自动索引的前索引寻址。 LDR R0,[R1,#4]! ; R0= [R1+4] ; R1 =R1+4 “!”符号表明指令在完成数据传送后应该更新基址寄存器 后索引寻址。基址不带偏移作为传送的地址,传送后自动索引。 LDR R0,[R1],#4 ; R0= [R1] ; R1= R1+4 基址加索引寻址有时指令指定一个基址寄存器,再指定另一个寄存器(索引),其值作为偏移加到基址上形成存储器地址。例如指令: LDR R0,[R1,R2] ; R0= [R1+

文档评论(0)

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

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档