Thumb指令集之: Thumb跳轉(zhuǎn)指令
11.3.5帶返回鏈接的無條件跳轉(zhuǎn)指令BLX(2)
(1)編碼格式
帶返回鏈接的無條件跳轉(zhuǎn)指令BLX(2)的編碼格式如圖11.6所示。
圖11.6BLX(2)指令的編碼格式
該BLX(2)指令用于ARM和Thumb子程序間的相互調(diào)用。程序狀態(tài)字的T標(biāo)志位根據(jù)目的寄存器的bit[0]位而改變。
(2)指令的語法格式
BLXRm>
其中Rm>為目標(biāo)地址寄存器,r0~r14寄存器均可以做為目標(biāo)地址寄存器。
注意 | 如果在此指令中使用r15作為目的寄存器,指令的執(zhí)行結(jié)果不可預(yù)知。 |
此指令只在ARMv5版本以上指令集中被支持。
(3)指令操作的偽代碼
LR=(addressoftheinstructionafterthisBLX)|1
TFlag=Rm[0]
PC=Rm[31:1]1
11.3.6Thumb指令集中跳轉(zhuǎn)指令舉例
下面的例子程序綜合使用了各種跳轉(zhuǎn)指令,通過該例可以對Thumb狀態(tài)下程序的非連續(xù)執(zhí)行有更深入的了解。
Blabel ;無條件跳轉(zhuǎn)到Label地址
BCClabel ;如果進(jìn)位標(biāo)志為0,則跳轉(zhuǎn)
BEQlabel ;如果零標(biāo)準(zhǔn)位置1,則跳轉(zhuǎn)
BLfunc ;子程序調(diào)用
Func
…
… ;子程序體
MOVPC,LR ;子程序返回
BXr12 ;跳轉(zhuǎn)到r12寄存器中保存的地址
在執(zhí)行此例中的BXr12時(shí),如果r12的bit[0]=0,則處理器進(jìn)入ARM狀態(tài)執(zhí)行,否則繼續(xù)執(zhí)行Thumb代碼。
評論