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

学习一下ARM的BX指令

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
bx的语法格式* w; t/ R# B5 G7 T: Z. S4 X; L
BX{<cond>} <Rm>
# G) ]- }6 r' f. n/ \- H<cond>为指令执行的条件码。当<cond>忽略时指令为无条件执行。& X1 H! u) X9 W; d
<Rm>该寄存器中为跳转的目标地址。当<Rm>寄存器的bit[0]为0时,目标地址处的指令为ARM指令;
, |8 g$ r( i! p+ A0 o当<Rm>寄存器的bit[0]为1时,目标地址处的指令为Thumb指令。
% T$ b/ e3 T3 i% n5 _  n  _; D, I4 T
7 @, V, ^: |- J$ A" }+ {: Q. t: r看一段简单程序的片段,不用考虑省略号的内容,看框架就可以了!* B% ~9 U' l% U) E3 D% L! D

( f, s- D  ~7 i$ L    EXPORT LEDTEST- C4 v! ]& ^! O* A
    AREA testasm,CODE,READONLY
: m, d) C* F0 C  `$ q    CODE32
8 v* ?% o& V; J% x7 gLEDTEST
( j1 h, K! s  s* N7 V    。。。。。。。。。。5 x# [2 U/ ?0 A) j  a
    。。。。。。。。。
  ?! Q2 w7 x1 M9 X" Y    。。。。。。。。
. [; M; o% T' s  R    。。。。。。。。。
, p: f* F. W' R    。。。。。。。。。。。+ m/ x! m1 B3 ]- g
ledon
) ~9 u3 x( Y' p7 P    ...............
: r6 B0 i8 a. V& d% \# t7 T5 L    ...............
# M* h  `2 `3 b3 x5 ^* U% z& ^    。。。。。。。。。。。。/ e! q+ a5 @# m" W6 [0 @
    。。。。。。。。。。。0 P# a: @# c/ S$ M# t
    adr r4,delay1+1
( E) R' o5 a1 s8 L; g9 o; f, f    bx r40 M$ H5 P0 o) z6 f

, ]: |: r& E6 f$ j3 K  Fledoff% \6 K( n+ O" e; ^. W+ T5 ~
    ..............
8 ~7 M& z: B% ]% |    ...............1 S% |4 s+ v: N: o. b
    .............
, ]& u3 O1 O0 i( N+ y    .............5 j( T, M5 ?0 p2 P. h  E" A
    ............., c) k' x& m' C/ t+ @. [( V
    .............." V9 u' ~# c' G* Z/ b" c+ m

$ }, U5 J) @9 d% g    AREA testasm,CODE,READONLY8 R, I2 O- m2 C
    CODE167 M: D* O- n# e6 t7 G0 E0 E( T& ?
delay1
4 W( F8 u1 J2 v$ ~0 i  t6 ~) p    ............
* J% e! c2 ^  S% i) T    ...........
4 |% E6 n0 Q& {& P5 l+ Z. [    .............
5 f" s5 H( a3 l/ ^3 I) c! r% x    ldr r1,=ledoff
8 t1 R. t! K5 N    bx   r1: E' x- e4 r& O
    ........
$ ~9 y; k$ Z& |    .............- T& B! w* D# u1 Y" I
    .............
/ m: j$ q6 s2 _, n7 j  rEND; [2 X$ D( ]  u, S

5 _/ ?+ i2 F" S; A  k关于delay1+1:; u5 m: v* x9 i) @& o7 o3 A6 c$ ]: M
ARM指令是字对齐(指令的地址后两位为[1:0]=0b00),Thumb是半字对齐(指令的地址后两位为[1:0]=0bx0,x为0或1)。指令的地址的最后一位必为0。
7 Y( G! V& C( d3 q8 r因此bx(不管往ARM还是往Thumb跳转)的跳转指令必须保证指令地址的最后一位为0,上例中bx指令能自
* E7 b& J- L4 f, v0 q动地将目标地址值置为r4的值和0xFFFFFFFE的与后的结果,就会使指令地址的最后一位必为0了。
& f* {) S: r" t# l' u2 Z那么delay+1的这个1不就被0与掉了么,就没有什么作用了?其实,在执行bx指令时,它是首先判7 I- k; ?! j  h$ T8 p, b
断指令地址的后一位为0或1(这样就知道要跳转的地方是ARM还是Thumb指令。0跳转arm,1跳转thumb。),然后再PC=r4 AND 0xFFFFFFFE。这样,当我们需要要跳转到Thumb指令处执行时,必须将指令地址的最后以为置1。: l" i# e; U2 D$ v( C7 p
而bx再跳转到ARM指令时就无需考虑这些了,就不用像上面的+1处理了。
关于字对齐和半字对齐
游客,如果您要查看本帖隐藏内容请回复
! a* {! r  l- m+ c! j4 }; V

! v/ s, l1 D* Z) {- X/ B

该用户从未签到

2#
发表于 2019-9-25 18:46 | 只看该作者
学习一下ARM的BX指令。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-25 02:01 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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