嵌入式系统基础实践教程-第3章v13.pptxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式系统基础实践教程-第3章v13

第3章 ARM嵌入式微处理器指令集;本章内容;;3.1 ARM指令集概述;3.1.1 ARM 指令的特点;3.1.2 ARM 指令集分类与格式; ARM 指令字长为固定的32 位,一条典型的ARM 指令的格式为: opcode { cond } {s} Rd , Rn {, operand2 } 其中, 内的项是必需的,{}内的项是可选的。例如, opcode 是指令操作码,这是必须书写的;而{ cond }为指令执行条件,是可选项,若不书写则无条件执行。;3.1.3 条件执行;;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 ;条件执行示例;【例3-1】比较R0和10的大小,并进行相应的赋值处理。 CMP R0,#10 ;R0与10比较 MOVHI R1,#1 ;若R0 10,则R1=1 MOVLS R1,#0 ;若R0 ≤ 10,则R1=0;3.2 ARM 处理器的寻址方式;;3.2.1 立即寻址;合法的立即数由一个8 位的常数进行32 位循环右移偶数位得到,其中循环右移的位数由一个4 位二进制的两倍表示。如果立即数记作 immediate ,8 位常数记作immed_8, 4 位循环右移值记作rotate_imm,则有 immediate =immed_8 进行32 位循环右移(2 *rotate_imm);3.2.2 寄存器寻址;3.2.3 寄存器间接寻址;3.2.4 寄存器移位寻址;;3.2.5 基址加变址寻址;1.前变址法 基址寄存器中的值和地址偏移量先作加减运算,生成的操作数作为内存访问的地址。 LDR R0,[ R1,# 4] ;R0 ←[R1+4] LDR R0,[ R1,#4] ! ;R0←[R1+4],R1=R1+4 注:“!”表示在完成数据传送后将更新基址寄存器。;2.后变址法 将基址寄存器中的值直接作为内存访问的地址进行操作,内存访问完毕后基址寄存器中的值和地址偏移量作加减运算,并更新基地址寄存器。 LDR R0,[ R1],# 4 ;R0 ←[R1],R1=R1 + 4;例子;3.2.6 块拷贝寻址;;例子;多寄存器传送寻址模式;例1:将存储器中的连续数据装载到寄存器;???2:完成一个存储器数据块拷贝;3.2.7 堆栈寻址;ARM 处理器支持以下四种类型的堆栈工作方式: 满递增堆栈FA(Full Ascending):堆栈指针指向最后压入的数据,且由低地址向高地址生成; 满递减堆栈FD(Full Descending):堆栈指针指向最后压入的数据,且由高地址向低地址生成; 空递增堆栈EA(Empty Ascending):堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成; 空递减堆栈ED(Empty Descending):堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成。;;;例:把寄存器内容放入堆栈,更新sp;3.2.8 相对寻址;;ARM 指令集总体可以分为六大类: ?? 数据处理指令; ?? Load/Store 指令; ?? 分支指令; ?? 程序状态寄存器访问指令; ?? 协处理器操作指令; ?? 异常产生指令。;3.3.1 数据处理指令;(1) 数据传送指令MOV MOV指令的格式为: MOV{cond}{S} Rd,operand2 例:MOV R0,R1 ;R0←R1 MOV R1,#0x20 ;R1←0x20 MOV R1,R2,LSL #2 ;R1←R2 * 4;(2) 数据非传送指令MVN MVN指令的格式为: MVN{cond}{S} Rd,operand2 MVN 指令可以将第二操作数operand2 表示的数据进行按位逻辑“非”操作后传送到目标寄存器Rd中。 MVN R1,#0;2.算术运算指令;例: ADD R0,R1,R2 ADDS R1,R0,R0,LSL #1 SUB R1,R0,#0x20 SUBS R1,R0,R2,LSL #2 R

文档评论(0)

345864754 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档