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

学习一下ARM的BX指令

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
bx的语法格式
+ P$ y4 Z" M' ~* R5 v8 Z$ }BX{<cond>} <Rm>
! [) d! a6 T! M5 P6 A<cond>为指令执行的条件码。当<cond>忽略时指令为无条件执行。
1 n( g5 k  C* m<Rm>该寄存器中为跳转的目标地址。当<Rm>寄存器的bit[0]为0时,目标地址处的指令为ARM指令;" h" W8 x: M6 u
当<Rm>寄存器的bit[0]为1时,目标地址处的指令为Thumb指令。: _0 z! J& m- \5 v- A4 I6 Y1 S
& w3 p" l0 d8 @$ B7 T! r( h7 |
看一段简单程序的片段,不用考虑省略号的内容,看框架就可以了!! I1 V: o) Q8 E0 o3 a
# O& j; h. X& D& ], h
    EXPORT LEDTEST
0 {% b. W3 ]9 _8 E! R' N    AREA testasm,CODE,READONLY% o0 u7 U# H, F% ?/ e* P
    CODE325 Z: T. R% V% d) W5 S6 K! @
LEDTEST
. I7 Q+ z& R* p& x/ ~: g    。。。。。。。。。。& b8 ]4 y% b3 n, x  }
    。。。。。。。。。
$ F+ T( X: u! n& Q: u' f1 l    。。。。。。。。2 t) y9 V& ^, l* F# [
    。。。。。。。。。
; ^' @' ]! v# D2 \    。。。。。。。。。。。
& P% j6 o* p. H4 p  p' zledon
, z  p" i1 a7 ?/ o$ k% m    ...............
( Q" H) X+ }9 P: ~  e    ...............
: I  \0 o4 l4 D1 L% |/ C    。。。。。。。。。。。。$ C, Q$ O; d) H4 y
    。。。。。。。。。。。  e: B* d5 Q$ O" H8 r
    adr r4,delay1+10 B' o% k; S" B- R0 r' B9 |* A
    bx r48 Q  s& |) k* q7 Y% t# _) E' r) h
7 L9 r0 x8 X- u2 q7 D
ledoff
+ p, P6 V& x& V4 X/ K) k    ..............$ j, U0 e' u- W2 r  I' x6 t9 r
    ...............4 @- p' s7 V' s8 l7 G
    .............
! @$ g9 y, Z% N4 k: g# i    .............
+ p% E) H" F& x7 V6 [/ C    .............( t. {' {& y; c3 K  R9 t
    ..............: G) l; O8 Z" i2 ]' `
" b4 H% S1 _+ r* U; f# |+ p1 }
    AREA testasm,CODE,READONLY/ D& E, N. q; X: ?* f
    CODE16
2 F$ \& @" C1 y( h. t, I1 i0 rdelay12 M$ }5 |8 ^/ h8 H' W6 h
    ............9 Z4 c: R4 Z( B9 j5 w
    ...........3 \9 G3 _' U: l( n7 n. |
    .............
$ z) {/ o4 \: K; h    ldr r1,=ledoff
* |! z. Q8 u2 w! ~6 j    bx   r1# L' v5 A. X5 j8 @- E6 V: p2 J) g
    ........
5 q6 o* y4 x0 g* \3 N& G    .............
  \( B$ Y$ j& u6 h$ B1 z7 H  j    .............7 ^8 d+ Q- t. L4 U/ ~7 N
END
1 v" O2 G, P# `8 }5 R3 Q$ q- i8 z, y/ z+ }) w1 k2 M3 D& ^' K' W
关于delay1+1:! F; _% M7 y+ V
ARM指令是字对齐(指令的地址后两位为[1:0]=0b00),Thumb是半字对齐(指令的地址后两位为[1:0]=0bx0,x为0或1)。指令的地址的最后一位必为0。. Z! j  I% Z0 |" r& D0 g. E; ^' b% m
因此bx(不管往ARM还是往Thumb跳转)的跳转指令必须保证指令地址的最后一位为0,上例中bx指令能自
3 l% I0 C( `) k8 s动地将目标地址值置为r4的值和0xFFFFFFFE的与后的结果,就会使指令地址的最后一位必为0了。* S9 w# `- L' a( }
那么delay+1的这个1不就被0与掉了么,就没有什么作用了?其实,在执行bx指令时,它是首先判
1 f* t$ X5 Q0 F3 C; U% J  a断指令地址的后一位为0或1(这样就知道要跳转的地方是ARM还是Thumb指令。0跳转arm,1跳转thumb。),然后再PC=r4 AND 0xFFFFFFFE。这样,当我们需要要跳转到Thumb指令处执行时,必须将指令地址的最后以为置1。
) ?8 V/ b/ w" x  }# L而bx再跳转到ARM指令时就无需考虑这些了,就不用像上面的+1处理了。
关于字对齐和半字对齐
游客,如果您要查看本帖隐藏内容请回复

2 w: I' u6 M1 m& @7 _5 q3 o" g; m# Z3 q* u' N

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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