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

学习一下ARM的BX指令

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
bx的语法格式
! d; T$ s8 X1 z, L) ZBX{<cond>} <Rm>
5 u$ \8 K( B( a$ G# y7 A6 ], r<cond>为指令执行的条件码。当<cond>忽略时指令为无条件执行。4 z' m) B+ m% B& l. R" V7 ?
<Rm>该寄存器中为跳转的目标地址。当<Rm>寄存器的bit[0]为0时,目标地址处的指令为ARM指令;
8 v7 x+ @) k% w5 c) X# u当<Rm>寄存器的bit[0]为1时,目标地址处的指令为Thumb指令。
" e) l+ V1 y/ Y- s% O+ E* o6 F2 p5 a" B6 Z
看一段简单程序的片段,不用考虑省略号的内容,看框架就可以了!
; P# O+ ^2 D# e- z- @
$ S- d' D; Y5 P) m7 b    EXPORT LEDTEST
, S& ]" H3 \" H# K    AREA testasm,CODE,READONLY
" L( c3 e) ?" x1 J    CODE32
* t# ~. Q3 f$ ~, Y. uLEDTEST$ N/ n$ J7 T9 [/ `. i) H, H- U2 l
    。。。。。。。。。。3 @3 z5 ~" B# j# [
    。。。。。。。。。
+ G, H6 s* {4 D6 f! Z    。。。。。。。。& q3 n. Z- S5 ~; A, _
    。。。。。。。。。  u3 g- ]# B5 p4 t
    。。。。。。。。。。。8 {/ O- A( A0 _$ l8 W* ?
ledon
& z& S5 D* e7 N# ?1 {    ...............  f- a) U3 j* g% Y; {7 q5 w
    ...............
6 ~# }" T% I; j( [* J; H    。。。。。。。。。。。。+ X5 V3 ~& v" X7 H8 E5 v
    。。。。。。。。。。。0 e1 H9 h( ?5 z% k$ B
    adr r4,delay1+12 v/ q/ H1 n% x% ?$ A! j6 `
    bx r45 l0 w' w4 Y) G  k

9 G0 e& F" J" J% q; g2 O/ Iledoff
1 P5 A2 S2 V# ^$ m& @% F- P! s    ..............6 L8 C5 B( M3 P+ u# T) N
    ...............6 P& _% z% Z/ U" U+ w; a
    .............
5 ]3 h. @- }# X5 y1 C    .............
& D3 F1 \5 j( H, @  p2 w    .............
/ |8 @$ J1 U+ ]! |# l8 K+ ]0 B" D    ..............
8 k6 F: }/ O/ z
3 Z$ x3 c# F" ^& h8 B* @    AREA testasm,CODE,READONLY
. |! [0 R4 ]  N$ T    CODE16! C( j* n% Z- ]) c
delay1
# G! Z' e7 N; _! L6 |    ............
7 b. C$ {- r, u) @    ...........
/ e: h. e2 q8 l  R: N    .............+ y; W$ A) z6 M# @8 v
    ldr r1,=ledoff
8 U- t9 A4 t+ Q: H+ h    bx   r1
  C  k1 L6 ?1 M3 B0 ?$ O    ........
$ S4 g, W/ x2 N' w7 [# b( L, m" _' e    .............
: L' P- X4 D4 K/ k5 B! Q    .............
8 ]  `& J' k* R0 |0 q2 ZEND3 w3 d5 _. H7 T' f2 x4 j
3 E( V; l0 }- }$ {# y5 @
关于delay1+1:
9 i; B" n3 T6 N! W% y+ o% I8 i; |8 RARM指令是字对齐(指令的地址后两位为[1:0]=0b00),Thumb是半字对齐(指令的地址后两位为[1:0]=0bx0,x为0或1)。指令的地址的最后一位必为0。
: _' x/ c3 X% U8 U2 L因此bx(不管往ARM还是往Thumb跳转)的跳转指令必须保证指令地址的最后一位为0,上例中bx指令能自8 C$ N; _% E5 ~! j9 R. K
动地将目标地址值置为r4的值和0xFFFFFFFE的与后的结果,就会使指令地址的最后一位必为0了。& p; f9 K3 I; ^3 P! g: ], v
那么delay+1的这个1不就被0与掉了么,就没有什么作用了?其实,在执行bx指令时,它是首先判
/ r+ D6 q; ^5 L  c9 g( f! V断指令地址的后一位为0或1(这样就知道要跳转的地方是ARM还是Thumb指令。0跳转arm,1跳转thumb。),然后再PC=r4 AND 0xFFFFFFFE。这样,当我们需要要跳转到Thumb指令处执行时,必须将指令地址的最后以为置1。3 w8 y& ]: _9 u4 s4 x( X
而bx再跳转到ARM指令时就无需考虑这些了,就不用像上面的+1处理了。
关于字对齐和半字对齐
游客,如果您要查看本帖隐藏内容请回复

" W. u; F$ m- X( p4 p  m5 n6 K/ T, w+ x/ G/ U

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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