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

学习一下ARM的BX指令

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
bx的语法格式) M$ n1 ?! k# D0 V2 m8 X2 T! V
BX{<cond>} <Rm>
+ y* J: N8 W. s$ A. Y% O<cond>为指令执行的条件码。当<cond>忽略时指令为无条件执行。
& w, c; p  [! E<Rm>该寄存器中为跳转的目标地址。当<Rm>寄存器的bit[0]为0时,目标地址处的指令为ARM指令;! v$ d4 b$ t: Z2 v
当<Rm>寄存器的bit[0]为1时,目标地址处的指令为Thumb指令。
0 e+ P- b  e; y8 x: c0 Q" S: w8 x9 R1 u% @2 K# X+ E
看一段简单程序的片段,不用考虑省略号的内容,看框架就可以了!2 C" d; r, ]" j* X9 f

9 S; ^( F# T- K0 W    EXPORT LEDTEST
% d; H1 ]  E( R, a' z! b9 C9 c    AREA testasm,CODE,READONLY' ~8 u$ x9 `9 m# r6 d) c
    CODE32
& e6 w4 y1 S' \) zLEDTEST1 O5 h8 k: z3 R7 k8 }
    。。。。。。。。。。
( c9 D1 @$ k$ \1 o- ~    。。。。。。。。。
5 o. l2 ?& _1 C! [) ^  k    。。。。。。。。' k% q* t' S# d8 N
    。。。。。。。。。# l, A1 x: ]0 n( |" @/ j4 W% v
    。。。。。。。。。。。0 W- ?( Y( c' n. U8 I, A% C
ledon
: w% S( m# s6 _' u& U6 s    ...............
  E3 Z$ V: P& ]6 I    ...............
2 i( D  O' }$ a! P, K    。。。。。。。。。。。。0 g- Y' l* ~2 \' s8 M# o3 Q1 H& u4 \4 `
    。。。。。。。。。。。
  o8 E% D$ {% z2 t    adr r4,delay1+1
/ j: ^, F- i5 _: B, J    bx r4
. ~5 {. }' a5 t' X$ u4 a& {, z- r5 M& A" A
ledoff4 r. w+ Y" t+ M
    ..............0 c0 R( t* v# R9 ]: }
    ...............* _6 d! s5 u* z% C7 v" k, n
    .............
5 o9 T' X3 G% n9 R+ l9 _    .............' G* W% S( X0 [! [$ W5 a
    .............
1 k  K" y, @! P0 E    ..............: i2 W& @; Q0 J7 S" I8 r7 g

! U7 @$ j% z2 ~    AREA testasm,CODE,READONLY& E' r/ ^, {; L# U9 b6 ?
    CODE16
7 z/ i! ?" q0 y% a' Zdelay1
4 h# |9 w) T- v4 Q! J% l    ............
6 P  J. p+ d8 H, w% @0 I* ~    ...........) `+ k, g2 M- y8 C! \/ W8 H6 E
    .............
' t0 L# |4 E4 x; R9 O    ldr r1,=ledoff
/ f5 v- H3 O8 B. O5 u" A    bx   r1- H3 V0 t" u2 y$ O: I
    ........- ~) y$ s. C6 R' J* T
    .............
1 b+ Z  Y5 O6 ^& N. \, `' x    .............
0 |7 n: |" N* ]! \% T' |: a- _END& u& {9 x" U" j

( n0 f& d5 F5 L& m' c  ~关于delay1+1:2 ?5 O  ~2 x! @, v, a, B& t/ r
ARM指令是字对齐(指令的地址后两位为[1:0]=0b00),Thumb是半字对齐(指令的地址后两位为[1:0]=0bx0,x为0或1)。指令的地址的最后一位必为0。
% L9 O3 o- O& L& L+ b因此bx(不管往ARM还是往Thumb跳转)的跳转指令必须保证指令地址的最后一位为0,上例中bx指令能自/ j) _; j9 x- |4 w/ @
动地将目标地址值置为r4的值和0xFFFFFFFE的与后的结果,就会使指令地址的最后一位必为0了。- p. X& [6 C7 E  T" a% S
那么delay+1的这个1不就被0与掉了么,就没有什么作用了?其实,在执行bx指令时,它是首先判7 M- A+ R8 k% p6 v
断指令地址的后一位为0或1(这样就知道要跳转的地方是ARM还是Thumb指令。0跳转arm,1跳转thumb。),然后再PC=r4 AND 0xFFFFFFFE。这样,当我们需要要跳转到Thumb指令处执行时,必须将指令地址的最后以为置1。8 o" h  Z9 J+ J4 Q
而bx再跳转到ARM指令时就无需考虑这些了,就不用像上面的+1处理了。
关于字对齐和半字对齐
游客,如果您要查看本帖隐藏内容请回复
$ v1 ~9 C+ f% X2 Z1 [$ a% T# @

/ {/ W* G# [. M' A+ p8 i! J

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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