找回密码
 注册
关于网站域名变更的通知
查看: 491|回复: 4
打印 上一主题 下一主题

ARM跳转指令的范围

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-9-18 09:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
B 和 BL 指令都是 相对跳转(短跳转) 指令,通过偏移量跳转, 最大跳转距离是 ±32M
; \! X# \# l% ?使用 mov pc, <>可以实现 对跳转(长跳转)(不会保存当前 PC 值)( u/ e8 S3 a8 |: D; t
关于B指令和BL指令最大跳转距离是 ±32M:4 j7 ]1 T6 \8 ^" e
  ARM汇编每条指令占用 4byte,生成机器码 B 、BL存放在bits[31:24], bits[23:0]是立即数空间,可以表示 2^24个地址。由于每条汇编指令占用4byte字节(最低两位都为 0),因此可以使用 24位二进制数来表示 26 位的寻址空间。3 R4 d: u: |: V3 ?9 g! L
B指令和BL指令的区别:3 c/ {3 w/ f* Q2 N! o& E+ F9 s- t
B指令在使用时不会对当前 PC 值进行保存,为保证跳转指令执行后能正常返回,要手动对其进行保存0 W- A1 M4 {% g; I- T/ v6 m
BL (带连接的跳转指令)能够在跳转时对当前 PC 值自动进行保存。
9 i8 C. Z. f- a! e' _' wThumb的B系列指令跳转范围只有256字节,然而大多数情况下跳转范围都会大,所以一般inlinehhok采用LDR PC, [PC, ?]构造跳转指令。
' ]' e0 b7 v8 s3 MB,BL指令保存的是偏移地址,这个地址的计算方法是:
' L4 [& {' p6 S7 d- g* j( F4 S假设跳转指令处的地址是A,跳转目标处的地址是B.$ K" k& i  X0 G! V. z. `# K
1.B-(A+8).A+8是因为ARM的流水线使得指令执行到A处时,PC实际的值是A+8.
! e* H$ ^& R0 u' y2.第一步得到的值是4的倍数,因为ARM的指令是4对齐的,即最低两位为00.于是将这个值右移两位.8 w  @' }% W! T/ m
3.得到最终偏移2 s1 {3 L6 \! N- ~" |* f
所以跳转的范围为正负32M(-2^25 ~ 2^25有一位符号位)
1 r  [* ^- z* f8 L4 M8 {/ j: M: Q% j9 F$ @8 V
7 v% t& W1 n6 W6 F7 k

该用户从未签到

2#
发表于 2021-9-18 11:00 | 只看该作者
B 和 BL 指令都是 相对跳转(短跳转) 指令,通过偏移量跳转, 最大跳转距离是 ±32M

该用户从未签到

3#
发表于 2021-9-18 13:37 | 只看该作者
使用 mov pc, <>可以实现 对跳转

该用户从未签到

4#
发表于 2021-9-18 17:34 | 只看该作者
B-(A+8).A+8是因为ARM的流水线使得指令执行到A处时,PC实际的值是A+8
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 02:44 , Processed in 0.140625 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表