汇编语言:ARM汇编中的跳转/分支指令【ARM汇编系列--指令篇01】


1、写在前面的话

这篇博客用来记录一下ARM中常见的汇编指令集,因为ARM属于RISC,其实不算多,很早之前就想整理下了,这次做个系统的工作,以后工作或者有需要的时候都可以登录博客来温习,属于ARM汇编系列的指令篇。


2、ARM的跳转/分支指令


01 B指令

格式:B{条件} + 目标地址

用法:B指令是最简单的跳转指令,一旦遇到一个B指令,ARM处理器将立即跳转到给定的目标地址,从那里继续执行。

示例1:
;程序无条件跳转到标号Label处执行。
B Label

示例2:
;当CPSR寄存器中Z条件码置位时,程序跳转到标号Label处执行。
CMP R1 ,#0
BEQ Label

示例3:
;程序跳转到绝对地址0x1234处执行。
B 0x1234

备注:这个指令基本上只有跳转功能,没有涉及到任何的链接和状态切换功能。


02 BL指令

格式:BL{条件} + 目标地址

用法:BL是一个跳转指令,但跳转之前,会在寄存器R14中保存PC当前的内容。因此,可以通过将R14的内容重新加载到PC中,来返回到跳转指令之后的那个指令处执行。这个指令是实现子函数调用的一个基本且常有的手段。

示例:BL Label ;让程序无条件跳转到标号是Label处执行,同时将当前的PC值保存到R14(LR)中。

备注1:BL实现子函数调用时完成如下的三个操作

01 将子程序的返回地址(当前PC)保存在R14(LR)中。
02 将PC指向子程序的入口(也即BL后面的目标指令)。
03 子程序执行完毕之后需要返回时,只需将PC指向R14中的LR就行。

备注2:使用BL调用子程序后,通常在子程序的尾部添加mov pc, lr来返回。


03 BX指令

格式:BX{条件} + 目标地址

用法:带状态切换的跳转。最低位为1时,切换到Thumb指令执行,为0时,解释为ARM指令执行。

示例:
;程序跳转到R0指定的地址,并根据R0的最低位来切换处理器状态。
adrl r0, ThumbFun + 1
BL r0

备注:BX指令跳转到指令中所指定的目标地址中,这个目标地址处的指令既可以是ARM指令,也可以是Thumb指令。


04 BLX指令

格式:BLX + 目标地址

用法:带有链接和状态切换的跳转,结合了BL和BX的功能。

备注:BLX指令从ARM指令集跳转到指令中所指定的目标地址,并将处理器的工作状态从ARM状态切换到Thumb状态,该指令同时将PC的当前内容保存到寄存器R14(LR)中。
因此,当子程序使用Thumb指令集,而调用者使用ARM指令集时,可以通过BLX指令实现子程序的调用和处理器工作状态的切换。并且,之后子程序的返回也可以通过将寄存器中R14值复制到PC中来完成返回。


05 备注:B、BL、BX和BLX

01:BL和BLX指令可将下一个指令的地址复制到链接寄存器R14(LR)中
02:BX和BLX指令将处理器的状态从ARM更改为Thumb,或从Thumb更改为ARM。
03:BLX label无论何种情况,始终会更改处理器的状态(无条件)。
04:BX Rm和 BLX Rm可从Rm的位[0]推算出目标状态。如果Rm的位[0]为0,则处理器的状态会更改为(或保持在)ARM状态。如果Rm的位[0]为1,则处理器的状态会更改为(或保持在)Thumb状态。
05:ARM中有两种方式实现程序的跳转,一种是使用跳转指令另一种是直接向PC寄存器赋值实现跳转
06:一般跳转指令跳转的范围限定在当前指令的±32Mb
07:如果使用向PC写入跳转地址的方式,可以实现4GB的地址空间任意跳转,在跳转前结合用MOV LR, PC等类似的指令,可以保存将来的返回地址值,以此来实现4GB连续的线性地址空间子程序调用


  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学不懂啊阿田

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值