第3章-ARM9指令集和汇编(初稿).pptxVIP

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

第3章 ARM9指令集和汇编;提纲;1、ARM指令集概述;RISC简介;ARM状态和Thumb状态(1);必须使用ARM指令的情况 ARM处理器启动的第一句指令必须是ARM指令 访问程序状态寄存器CPSR或协处理器时必须是ARM指令 ARM在处理异常中断时会自动切换到ARM状态,执行中断处理程序入口处的程序。返回时,会再次自动切换到ARM状态ARM指令;v4版本中的函数调用,如果不需要进行状态切换,只需要用到BL指令就可以实现了 如果需要进行状态切换,情况较复杂,如图3-1所示;ARM状态和Thumb状态(4);ARM v5版本后,引入了一条新的指令BLX,结合了BL和BX指令各自的功能特点,使得上图的所示过程通过一条指令就能实现;ARM9指令类型和指令的条件域(1);跳转指令 ;数据处理指令 ;存储器访问指令;协处理器指令 ;杂项指令 ;饱和算术指令 ;ARM指令一般由操作码、目的寄存器、操作数几部分组成,并可以配合条件码,S后缀等可选项目,以完成更复杂操作,它的格式一般为: 指令中内的项目是必需的,比如opcode, Rd, Rn等,{}内的项目是可选的;opcode;ARM指令集几乎每条指令(除了某些v5T指令)都可以是条件执行的。指令的最高4位[31:28]称为条件码: ;shift_op2形式非常灵活,共有11种形式:;ARM指令集有5种形式的位移操作 LSL逻辑左移 LSR逻辑右移 ASR算术右移 ROR循环右移 RRX带扩展的循环右移;逻辑左移(Logical Shift Left):操作时在移位操作时,用0补足低位;而逻辑右移(Logical Shift Right)移动的方向相反,并用0补足高位。 算术右移(Arithmetic Shift Right):在移位操作时,根据符号位来补足高位,若原数符号位是1,即当原数为负数时,移位空出的高位都用1补足,反之则用0补足。 循环右移(ROtate Right):可以将数字看做首位相接的“环形”,当最低位被移出后,它会绕到数组的最高位去,继续参与移位操作。 带扩展的循环右移(Rotate Right one bit with eXtended):较前面的几种移位方法复杂一些,它需要用到CPSR中的C位。当最低位被向右移出后,最高位有C位的值补足,然后被移出的最低位被放到C位中。 ;立即数#immediate并不是任意数都是合法的,在立即数寻址中,分配给立即数的空间是12位,8位用于保存一个常数,4位用于保存循环右移基数,而循环右移每次需要移动偶数位,即右移的位数是基数*2。 假设常数为A,循环右移位数为N,则最后得到的立即数=A循环右移(N*2位)。 0x3FC立即数合法,A=0N=0d15 0x1FE不合法;3.2 ARM指令的寻址方式;立即寻址 立即寻址也可被称为立即数寻址,读取指令后可以立即得到操作数,而不需要去物理内存得到相应内容。这个给出的操作数叫立即数,它一般以“#”为前缀,“#0x”、“#0d”,“#0b”开头的计数用来表示十六进制,十进制和二进制。 ;寄存器寻址 寄存器寻址也是一种不需要访问存储器内容的寻址方式,指令中直接指明操作数所在的寄存器,执行时处理器直接访问寄存器获取操作数 ;寄存器偏移寻址 寄存器偏移寻址是ARM指令特有的一种寻址方式,第2操作数可以在与第1操作数结合之前,进行各种形式的移位操作 ;寄存器间接寻址 寄存器间接寻址的指令中虽然也是指定寄存器,但并不是直接拿寄存器中的值来进行运算操作,此时寄存器中储存的是地址,处理器需要根据这个地址从存储器中获取操作数。所以寄存器间接寻址是需要进行存储器访问的,所以执行效率比寄存器寻址要慢。 ;基址变址寻址 基址变址寻址与寄存器间接寻址相似,但此时从寄存器取出的内容需要加上指令所给定的偏移量,这样才构成操作数的有效地址。变址寻址方式通常用于访问基地址附近的地址单元,常用于查表,数组操作,功能部件寄存器访问等 ;多寄存器寻址 多寄存器寻址方式可以在同一条指令中完成多个寄存器数据的传送,最多可以传送16个通用寄存器 ;堆栈寻址 堆栈是一个后进先出的数据结构,堆栈寻址方式会有一个指针,始终指向存储单元的栈顶,这个指针需要用一个专门的寄存器来存放,这个寄存器一般是R13。 ;有四种栈堆形式: 堆栈指针总是指向最后压入堆栈的数据,称为满堆栈(Full Stack) 堆栈指针指向下一个空位置时,称为空堆栈(Empty Stack) 从低地址向高地址生长的堆栈叫递增堆栈(Ascending Stack) 从高地址向低地址生长的堆栈叫递减堆栈(Descending Stack) ;ARM指令的寻址方式;ARM指令的寻址方式;跳转指令;ARM实现程序跳转有两种方法 将当前的程序寄存器PC值改写

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档