您的位置 首页 元件

ARM的BX指令

bx的语法格式BX{cond>}<Rm><cond>为指令执行的条件码。当<cond>忽略时指令为无条件执行。<Rm>该寄存器中为跳转的目标地址。当R…

bx的语法格局
BX{} <Rm>
<cond>为指令履行的条件码。当<cond>疏忽时指令为无条件履行。
<Rm>该寄存器中为跳转的方针地址。当寄存器的bit[0]为0时,方针地址处的指令为ARM指令;
寄存器的bit[0]为1时,方针地址处的指令为Thumb指令。

看一段简略程序的片段,不必考虑省略号的内容,看结构就可以了!

EXPORT LEDTEST
AREA testasm,CODE,READONLY
CODE32
LEDTEST
。。。。。。。。。。
。。。。。。。。。
。。。。。。。。
。。。。。。。。。
。。。。。。。。。。。
ledon
……………
……………
。。。。。。。。。。。。
。。。。。。。。。。。
adr r4,delay1+1
bx r4

ledoff
…………..
……………
………….
………….
………….
…………..

AREA testasm,CODE,READONLY
CODE16
delay1
…………
………..
………….
ldr r1,=ledoff
bx r1
……..
………….
………….
END

关于delay1+1:
ARM指令是字对齐(指令的地址后两位为[1:0]=0b00),Thumb是半字对齐(指令的地址后两位为[1:0]=0bx0,x为0或1)。指令的地址的最终一位必为0。
因而bx(不论往ARM仍是往Thumb跳转)的跳转指令有必要确保指令地址的最终一位为0,上例中bx指令能自
动地将方针地址值置为r4的值和0xFFFFFFFE的与后的成果,就会使指令地址的最终一位必为0了。
那么delay+1的这个1不就被0与掉了么,就没有什么作用了?其实,在履行bx指令时,它是首要判
断指令地址的后一位为0或1(这样就知道要跳转的当地是ARM仍是Thumb指令。0跳转arm,1跳转thumb。),然后再PC=r4 AND 0xFFFFFFFE。这样,当咱们需求要跳转到Thumb指令处履行时,有必要将指令地址的最终认为置1。

而bx再跳转到ARM指令时就无需考虑这些了,就不必像上面的+1处理了。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/yuanjian/276414.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部