arm 跳转指令跳转范围

本文详细解释了ARM架构中B和BL指令的工作原理及其限制,包括它们的最大跳转距离为±32M的原因,以及如何通过不同的技术实现更远距离的跳转。同时对比了B指令与BL指令在保存PC值方面的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

B 和 BL 指令都是 相对跳转(短跳转) 指令,通过偏移量跳转, 最大跳转距离是 ±32M
使用 mov pc, <>可以实现 对跳转(长跳转)(不会保存当前 PC 值)

关于B指令和BL指令最大跳转距离是 ±32M:
  ARM汇编每条指令占用 4byte,生成机器码 B 、BL存放在bits[31:24], bits[23:0]是立即数空间,可以表示 2^24个地址。由于每条汇编指令占用4byte字节(最低两位都为 0),因此可以使用 24位二进制数来表示 26 位的寻址空间。

B指令和BL指令的区别:
B指令在使用时不会对当前 PC 值进行保存,为保证跳转指令执行后能正常返回,要手动对其进行保存
BL (带连接的跳转指令)能够在跳转时对当前 PC 值自动进行保存。

Thumb的B系列指令跳转范围只有256字节,然而大多数情况下跳转范围都会大,所以一般inlinehhok采用LDR PC, [PC, ?]构造跳转指令。

B,BL指令保存的是偏移地址,这个地址的计算方法是:
假设跳转指令处的地址是A,跳转目标处的地址是B.
1.B-(A+8).A+8是因为ARM的流水线使得指令执行到A处时,PC实际的值是A+8.
2.第一步得到的值是4的倍数,因为ARM的指令是4对齐的,即最低两位为00.于是将这个值右移两位.
3.得到最终偏移
所以跳转的范围为正负32M(-2^25 ~ 2^25有一位符号位)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值