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