新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 跳轉指令之:跳轉指令B及帶連接的跳轉指令BL

跳轉指令之:跳轉指令B及帶連接的跳轉指令BL

作者: 時間:2013-09-13 來源:網(wǎng)絡 收藏

本文引用地址:http://m.butianyuan.cn/article/257056.htm

3.指令操作的偽代碼

指令操作的偽代碼如下面程序段所示。

IfconditionPassed{cond}then

IfL==1then

LR=addressoftheinstructionafterthebranchinstruftion

PC=PC+(SignExtend(signed_immed_24)2)

4.指令的使用

L指令用于實現(xiàn)子程序調用。子程序的返回可以通過將LR寄存器的值復制到PC寄存器來實現(xiàn)。下面三種指令可以實現(xiàn)子程序返回。

·Xr14(如果體系結構支持X指令)。

·MOVPC,r14。

·當子程序在入口處使用了壓棧指令:

STMFDr13!,{registers>,r14},

可以使用指令。

LDMFDr13!,{registers>,PC}

將子程序返回地址放入PC中。

匯編器通過以下步驟計算指令編碼中的signed_immed_24。

(1)將PC寄存器的值作為本的基地址值。

(2)從跳轉的目標地址中減去上面所說的跳轉的基地址,生成字節(jié)偏移量。由于指令是字對齊的,該字節(jié)偏移量為4的倍數(shù)。

(3)當上面生成的字節(jié)偏移量超過-33554432~+33554430時,不同的匯編器使用不同的代碼產(chǎn)生策略。

(4)否則,將指令編碼字中的signed_immed_24設置成上述字節(jié)偏移量的bits[25∶2]。

注意

在一些RISC體系結構的處理器中,存在延時跳轉(delayedbranch)模式,即在程序執(zhí)行跳轉到目標地址之前,程序會執(zhí)行之后的指令。但在體系中,沒有這種延時跳轉機制。

5.指令舉例

(1)程序跳轉到LAE標號處。

AE;

ADDr1,r2,#4

ADDr3,r2,#8

SUBr3,r3,r1

LABLE

SUBr1,r2,#8

(2)跳轉到絕對地址0x1234處。

B0x1234

(3)跳轉到子程序func處執(zhí)行,同時將當前PC值保存到LR中。

BLfunc

(4)條件跳轉:當CPSR寄存器中的C條件標志位為1時,程序跳轉到標號LABLE處執(zhí)行。

BCCLABLE

(5)通過跳轉指令建立一個無限循環(huán)。

LOOP

ADDr1,r2,#4

ADDr3,r2,#8

SUBr3,r3,r1

BLOOP

(6)通過使用跳轉使程序體循環(huán)10次。

MOVr0,#10

LOOP

SUBSr0,#1

BNELOOP

(7)條件子程序調用示例。

……

CMPr0,#5;如果r05

BLLTSUB1;則調用

BLGESUB2;否則調用SUB2

注意

只有SUB1不改變條件碼,本例才能正確執(zhí)行,因為如果BLLT執(zhí)行了轉移,將返回到BLGE指令。如果條件碼被SUB1子程序改變,則SUB2可能又會被執(zhí)行,從而達不到指令的預期效果。


上一頁 1 2 下一頁

評論


相關推薦

技術專區(qū)

關閉