bx的语法格局
BX{
<cond>为指令履行的条件码。当<cond>疏忽时指令为无条件履行。
<Rm>该寄存器中为跳转的方针地址。当
当
看一段简略程序的片段,不必考虑省略号的内容,看结构就可以了!
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处理了。