ARM经典汇编指令集.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ARM经典汇编指令集

寄存器: 在任何时候,通用寄存器R14-R0,程序计数器R15(PC),一个状态寄存器都是可以访问的。 在ARM工作状态下,任意时刻可以访问16个通用寄存器和一到二个状态寄存器。在非用户模式下,则可访问到特定模式分组寄存器。 Thumb状态下的寄存器集是ARM状态下寄存器集的一个子集,程序可以直接访问8个通用寄存器(R7-R0),程序计数器PC,堆栈指针SP,连接寄存器LR和CPSR。 在Thumb状态下和ARM状态下的R0-R7是相同的。 在Thumb状态下和ARM状态下的CPSR和SPSR是相同的。 在Thumb状态下的SP对应ARM状态下的R13 在Thumb状态下的LR对应ARM状态下的R14 通用寄存器: 不分组寄存器R0-R7 分组寄存器R8-R14 程序计数器R15 不分组通用寄存器:R0-R7.,这意味者所有处理模式下,访问的都是同一个物理寄存器。未分组寄存器没有被系统用于特别用途,任何可采用通用寄存器的应用场合都可以使用未分组寄存器。 分组模式寄存器: 1)FIQ模式分组寄存器R8-R12: 2)FIQ以外的分组寄存器R8-R12 3)寄存器R13通常用做堆栈指针SP 4)寄存器R4用作子程序链接寄存器LR,指向函数的返回地址。 程序计数器:R15被用作程序计数器,也称为PC,其值等于当前正在执行的指令的地址+8。因为在取地址和执行之间多了一个译码阶段。 状态寄存器:ARM所有工作模式下都可以访问程序状态寄存器CPSR。CPSR包含条件码标志、中断禁止位、当前处理器模式以及其它状态和控制信息。 CPSR在每种异常模式下都有一个对应的物理寄存器------程序状态保存寄存器SPSR。当异常出现时,SPSR用于保存CPSR的值,以便异常返回后恢复异常发生时的工作状态。 多寄存器寻址: 采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。这寻址方式可以用一条指令完成传送最多16个通用寄存器的值。 例如:LDMIA R0,{R1,R2,R3,R4};R1([R0] ; R2([R0+4] ; R3([R0+8] ; R4([R0+12] 该指令的后缀IA表示每次执行完加载、存储操作后,R0按字节长度增加,因此,指令可将连续存储单元的值送到R1-R4。 堆栈寻址: 堆栈是一种数据结构,按先进后出的方式工作,使用一个称作堆栈指针的专用寄存器至少当前的操作位置,堆栈指针总是指向栈顶。 递增堆栈:向高地址方向生长。 递减堆栈:向低地址方向生长 满堆栈:堆栈指针指向最后压入堆栈的有效数据项。 空堆栈:堆栈指针指向下一个要放入数据的空位置。 跳转指令用于实现程序流程的跳转,在ARM程序中有两种方法实现程序流程的跳转: 使用专门的跳转指令 直接向寄存器计数器PC写入跳转地址值,通过向程序计数器PC写入跳转地址值,可以实现在4G的地址空间中任意跳转,在跳转之前结合使用: MOV LR , PC 等类似的指令,可以保存将来的返回地址值,从而实现在4G连续的线性地址空间的子程序调用。 ARM指令集中的跳转指令可以完全从当前指令向前或者向后的32MB的地址空间跳转,包括以下4条指令: B 跳转指令 BL 带返回的跳转指令 BLX 带返回和状态切换的跳转指令 BX 带状态切换的跳转指令 B指令的格式为: B{条件} 目的地址 //条件可有可无 B指令是最简单的跳转指令,一旦遇到一个B指令,ARM处理器将立即跳转到给定的目的地址,从那里开始继续执行。 B Label 程序无条件跳转到标号Label处执行。 例子: CMP R1,#0 BEQ Label 当寄存器中的Z条件码置位时,程序跳转到标号Label处执行。 BL指令的格式为: BL{条件} 目的地址 BL是另一个跳转指令,但跳转之前,会在寄存器R14中保留PC当前值,因此,可以通过将R14的内容重新加载到PC中,来返回到跳转指令之后的那个指令处执行。该指令是实现子程序调用的一个基本但常用的手段。 BL Label ;当程序无条件跳转到标号Label处执行时,同时当前的PC值保存到R14中 BLX指令的格式为: BLX 目的地址 BLX指令从ARM指令集跳转到指令中所指定的地址,并将处理器工作状态有ARM状态切换到Thumb状态,该指令同时将PC的当前内容保存到寄存器R14中。 因此,当子程序使用Thumb指令集,而调用者使用ARM指令集时,可以通过BLX指令实现子程序的调用和处理器工作状态的切换。同时,子程序的返回可以通过将寄存器R14值复制到PC中来完成。 BX指令的格式为: BX{条件} 目的地址

文档评论(0)

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

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

1亿VIP精品文档

相关文档