新聞中心

ARM的BX指令

作者: 時間:2016-11-10 來源:網(wǎng)絡(luò) 收藏
bx的語法格式
BX{} <Rm>
<cond>為指令執(zhí)行的條件碼。當(dāng)<cond>忽略時指令為無條件執(zhí)行。
<Rm>該寄存器中為跳轉(zhuǎn)的目標(biāo)地址。當(dāng)寄存器的bit[0]為0時,目標(biāo)地址處的指令為ARM指令;
當(dāng)寄存器的bit[0]為1時,目標(biāo)地址處的指令為Thumb指令。

看一段簡單程序的片段,不用考慮省略號的內(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指令能自
動地將目標(biāo)地址值置為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。這樣,當(dāng)我們需要要跳轉(zhuǎn)到Thumb指令處執(zhí)行時,必須將指令地址的最后以為置1。

而bx再跳轉(zhuǎn)到ARM指令時就無需考慮這些了,就不用像上面的+1處理了。

本文引用地址:http://butianyuan.cn/article/201611/317562.htm


關(guān)鍵詞: ARMBX指

評論


技術(shù)專區(qū)

關(guān)閉