ARM的BX指令
BX{
<cond>為指令執(zhí)行的條件碼。當<cond>忽略時指令為無條件執(zhí)行。
<Rm>該寄存器中為跳轉(zhuǎn)的目標地址。當
當
看一段簡單程序的片段,不用考慮省略號的內(nèi)容,看框架就可以了!
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
關(guān)于delay1+1:
ARM指令是字對齊(指令的地址后兩位為[1:0]=0b00),Thumb是半字對齊(指令的地址后兩位為[1:0]=0bx0,x為0或1)。指令的地址的最后一位必為0。
因此bx(不管往ARM還是往Thumb跳轉(zhuǎn))的跳轉(zhuǎn)指令必須保證指令地址的最后一位為0,上例中bx指令能自
動地將目標地址值置為r4的值和0xFFFFFFFE的與后的結(jié)果,就會使指令地址的最后一位必為0了。
那么delay+1的這個1不就被0與掉了么,就沒有什么作用了?其實,在執(zhí)行bx指令時,它是首先判
斷指令地址的后一位為0或1(這樣就知道要跳轉(zhuǎn)的地方是ARM還是Thumb指令。0跳轉(zhuǎn)arm,1跳轉(zhuǎn)thumb。),然后再PC=r4 AND 0xFFFFFFFE。這樣,當我們需要要跳轉(zhuǎn)到Thumb指令處執(zhí)行時,必須將指令地址的最后以為置1。
而bx再跳轉(zhuǎn)到ARM指令時就無需考慮這些了,就不用像上面的+1處理了。
本文引用地址:http://m.butianyuan.cn/article/201611/317562.htm
評論