第四课 arm指令2.pptVIP

  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文档。上传文档
查看更多
第四课 arm指令2

ARM指令集大致分为6类: 分支指令 Load/Store指令 数据处理指令 程序状态寄存器指令 异常中断指令 协处理器指令 分支指令 有两种方法可以实现程序流程的跳转: ① 使用专门的跳转指令。 四条跳转指令分别为:B、BL、BLX、BX。 ② 直接向程序计数器PC写入跳转地址值。 通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用MOV LR, PC等类似指令,可以保存将来的返回地址值,从而实现在4GB连续的线性地址空间的子程序调用。 (1)B指令 格式:B{条件}? 目标地址 B指令是最简单的跳转指令。一旦遇到一个B指令,ARM处理器将立即跳转到给定的目标地址,从那里继续执行。注意存储在跳转指令中的实际值是相对当前PC值的一个偏移量,而不是一个绝对地址,它的值由汇编器来计算(参考寻址方式中的相对寻址)。 B Label ;程序无条件跳转到标号Label处执行? 条件转移 有时想让微处理器决定是否进行转移。 MOV r0 , #0 ;计数器初始化 LOOP … ADD r0 , r0, #1 ;循环计数器加一 CMP r0 , #10 ;与循环的限制比较 BNE LOOP ;如不相等则返回 … ;否则循环终止 (2)BL指令 格式:BL{条件} 目标地址 BL是带返回的跳转指令,在跳转之前,会在寄存器R14中保存PC的当前内容,因此,可以通过将R14的内容重新加载到PC中,来返回到跳转指令之后的那个指令处执行。 该指令是实现子程序调用的一个基本但常用的手段。 BL指令举例 BL指令的意义:Branch and Link 示例: …….. …….. bl MyPro ;调用子程序MyPro ……….. MyPro ;子程序MyPro本体 ……….. ……….. mov PC, LR ;将R14的值送入R15,返回 (4)BX指令 格式:BX{条件}? 目标地址寄存器 BX是带状态切换的跳转指令,指令跳转到指令中所指定的目标地址,目标地址处的指令既可以是ARM指令,也可以是Thumb指令。 BX R0 (4)BLX指令 格式:BLX{条件} 目标地址 BLX是带返回和状态切换的跳转指令,指令从ARM指令集跳转到指令中所指定的目标地址,并将处理器的工作状态有ARM状态切换到Thumb状态,该指令同时将PC的当前内容保存到寄存器R14中。因此,当子程序使用Thumb指令集,而调用者使用ARM指令集时,可以通过BLX指令实现子程序的调用和处理器工作状态的切换。同时,子程序的返回可以通过将寄存器R14值复制到PC中来完成。 CODE32 BLX Tsub … CODE16 … Tsub… BLX R14 长跳转 直接向PC寄存器写入目标地址值,可以实现4GB地址空间中的任意跳转。 示例: 以下的两条指令实现了4GB地址空间中的子程序调用。 MOV LR, PC ;保存返回地址 MOV R15, #0 ;无条件转向绝对地址0x110000 ;此32位立即数地址应满足单字节循环右移偶数次 数据处理指令 ARM的数据处理指令使得程序员能够完成寄存器中数据的算术和逻辑操作。 其他指令只是传送数据和控制程序的顺序。 数据处理指令的典型特征是需要两个操作数,产生单个结果。 所有的操作数是32位,或来自寄存器、或是指令中定义的立即数。 如果有结果,则结果为32位宽并只能在寄存器中。 每一个操作数寄存器和结果寄存器都在指令中独立指定,也即ARM指令使用3地址模式。 ADD r0, r1, r2 ; r0 := r1 + r2 注意指令中操作数的顺序,r0是结果寄存器,然后是第一操作数(r1),最后是第二操作数(r2)。 当指令执行后,对系统状态而言唯一的变化是目的寄存器r0的值。 CPSR中的标志位(N、Z、C、V)也可有选择地变化。 设置条件码 如果程序员需要,任何数据处理指令都能设置条件码,但必须在指令中显示的提出来(比较指令除外)。 ADDS r2 , r2 , r0 ;r1r0 64位数1,r3r2 64位数2 ADC r3 , r3 , r1 ;结果在r3r2中 SWP指令的用法 PRE mem32[0x9000]=0 r0=0 r1=0 r2=0 执行操作: SWP r0, r1, [r2] POST: mem32[0x9000]=0 r0=0x12345

文档评论(0)

ajgoaw + 关注
文档贡献者

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

1亿VIP精品文档

相关文档