|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
B 和 BL 指令都是 相对跳转(短跳转) 指令,通过偏移量跳转, 最大跳转距离是 ±32M
' A/ x; H* B D/ y9 {# k; z5 R使用 mov pc, <>可以实现 对跳转(长跳转)(不会保存当前 PC 值)' E& t& e7 S) A4 O
关于B指令和BL指令最大跳转距离是 ±32M:
9 N+ n$ w% A& ^& E/ M5 D1 ^& \ ARM汇编每条指令占用 4byte,生成机器码 B 、BL存放在bits[31:24], bits[23:0]是立即数空间,可以表示 2^24个地址。由于每条汇编指令占用4byte字节(最低两位都为 0),因此可以使用 24位二进制数来表示 26 位的寻址空间。
" A! m. M& R8 b; u+ [4 J* uB指令和BL指令的区别:
& f# l7 A5 A( q$ f% G7 y4 ~7 _B指令在使用时不会对当前 PC 值进行保存,为保证跳转指令执行后能正常返回,要手动对其进行保存
) {- J5 S' ]6 F- Q4 F2 RBL (带连接的跳转指令)能够在跳转时对当前 PC 值自动进行保存。6 `2 n8 ^7 i4 z4 E, ?/ u0 o/ m
Thumb的B系列指令跳转范围只有256字节,然而大多数情况下跳转范围都会大,所以一般inlinehhok采用LDR PC, [PC, ?]构造跳转指令。4 X$ o$ p- O" }, t- g5 ?# l+ X
B,BL指令保存的是偏移地址,这个地址的计算方法是:
5 N. k! a q3 x8 X: P假设跳转指令处的地址是A,跳转目标处的地址是B.
4 Q) g9 O& Z- J" I# a: ^8 ]1.B-(A+8).A+8是因为ARM的流水线使得指令执行到A处时,PC实际的值是A+8.* t; u& V- ~ P9 `
2.第一步得到的值是4的倍数,因为ARM的指令是4对齐的,即最低两位为00.于是将这个值右移两位.( { V, K! q9 Z4 |! n* k
3.得到最终偏移7 x% D- }5 u! H5 t4 b6 M
所以跳转的范围为正负32M(-2^25 ~ 2^25有一位符号位)' w( A) f; g: }# J# j# J. V3 u( a, V
# v+ Y. X8 P! U3 g. I4 {* n( \
% i' Y1 r8 ^0 C5 n3 Y% c4 o0 ]
|
|