嵌入式系统原理及接口技术 第3章ARM9汇编指令系统.ppt

嵌入式系统原理及接口技术 第3章ARM9汇编指令系统.ppt

  1. 1、本文档共72页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章 ARM9汇编指令系统 32位ARM指令集由13种基本指令类型组成,分成4大类。 ·3种类型的存储器访问指令,用于控制存储器和寄存器之间的数据传送。第一种类型用于优化的灵活寻址;第二种类型用于快速上下文切换;第三种类型用于交换数据。 ·3种类型的数据处理指令,使用片内的累加器(ALU)、桶形移位器和乘法器,对31个寄存器完成高速数据处理操作。 ·4种类型的分枝指令,用于控制程序执行流程、指令优先级、ARM代码和Thumb代码的切换。 ·3种类型的协处理器指令,专用于控制外部协处理器。这些指令以开放和统一的方式扩展了指令集的片外功能。 §3.1 存储器访问指令1 (1) LDR和STR ----字和无符号字节:32位字或8位无符号字节加载寄存器(LDR)和存储寄存器(STR)指令。字节写时是用“0”扩展到32位。 LDR和STR指令都有以下4种句法形式: op {cond} {B} {T} Rd,[Rn] 零偏移 op {cond} {B} Rd,[Rn,Flexoffset] {!} 前索引偏移 op {cond} {B} Rd,label 程序相对偏移 op {cond} {B} {T} Rd,[Rn],Flexoffset 后索引偏移 (续) 上述句法形式中所用到的符号意义如下: op 操作码,后面所用时意义相同。在此代表LDR和STR。 cond 可选条件码,条件码必须是表3-1中所列的一种。后面所用时意义相同 B 可选后缀。若有B,则传送Rd的最低有效字节,若op是LDR,则Rd的其他字节清零。 T 可选后缀。若有T,则即使处理器是在特权模式下,存储系统也将访问看成处理器是在用户模式下。T在用户模式下无效,不能与前索引偏移一起使用。 (续) Rn 存储器的基址寄存器。后面所用时意义相同。若指令是带写回的前索引(后缀符号为“!”)或后索引,或使用了后缀T,则不允许Rn和Rd相同。 Rd 用于加载/存储操作的ARM寄存器。后面所用时意义相同。 (续) Flexoffset 加到Rn上的灵活偏移量。该偏移量可以是下面两种形式之一: ① #expr 是取值范围为-4095~+4095的整数,经常是常量或常量表达式。 ② {-} Rm {,shift} Rm是内含偏移量的寄存器,它不能是R15。shift是Rm的可选移位方法,可以是下列形式中的一种。 ASR n 算术右移n位(1≤n≤32); LSL n 逻辑左移n位(0≤n≤31); LSR n 逻辑右移n位(1≤n≤32); ROR n 循环右移n位(1≤n≤31); RRX 循环右移1位,带扩展。 (续) label 程序相对偏移表达式。偏移量必须是在当前指令的上下4KB范围内。 ! 可选后缀。若有“!”,则将包含偏移量的地址写回到Rn,若Rn是R15,则不能使用该后缀。后面所用时意义相同。 {} 表示括号内的内容是可选的。后面所用时意义相同。 在上述指令中,若Rd为R15时,加载操作将会引起处理器转移到所写内容为地址的单元处,即使要进行加载操作,也不能使用后缀“B”或“T”。通常应避免对R15进行存储操作,若进行,则存储的值是当前指令的地址加一特定的常量。 例如 例如: LDR R8,[R10] ;R8←[R10] LDRNE R2,[R5,#960]! ;(有条件地)R2←[R5+960],R5←R5+960 LDR R0,localdata ;加载一个字到R0寄存器,该字存 于localdata所指地址处 STR R5,[R7],#-8! ;R5→[R7],R7←R7-8 STRB R0,[R3,-R8 ASR #2] ;R0→[R3-R8/4],存储R0的最低有效字节,R3和R8不变 存储器访问指令2 (2) LDR和STR ----半字和带符号字节:带符号的8位字节以及带符号和无符号的16位半字加载寄存器(LDR),对于存储寄存器(STR)指令是针对于16位半字的。对于带符号加载时是带符号扩展到32位,无符号加载时是用“0” 扩展到32位。 该组LDR和STR指令也都有以下4种句法形式: Op {cond} type Rd,[Rn] 零偏移 op {cond} type Rd,[Rn,offset]{!}前索引偏移 Op {cond} type Rd,label 程序相对偏移 Op {cond} type Rd,[Rn],offset 后索引偏移

文档评论(0)

一壶清茶 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档