<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

作者: 時(shí)間:2013-09-13 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.com/article/257056.htm

3.指令操作的偽代碼

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

IfconditionPassed{cond}then

IfL==1then

LR=addressoftheinstructionafterthebranchinstruftion

PC=PC+(SignExtend(signed_immed_24)2)

4.指令的使用

L指令用于實(shí)現子程序調用。子程序的返回可以通過(guò)將LR寄存器的值復制到PC寄存器來(lái)實(shí)現。下面三種指令可以實(shí)現子程序返回。

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

·MOVPC,r14。

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

STMFDr13!,{registers>,r14},

可以使用指令。

LDMFDr13!,{registers>,PC}

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

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

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

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

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

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

注意

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

5.指令舉例

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

AE;

ADDr1,r2,#4

ADDr3,r2,#8

SUBr3,r3,r1

LABLE

SUBr1,r2,#8

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

B0x1234

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

BLfunc

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

BCCLABLE

(5)通過(guò)跳轉指令建立一個(gè)無(wú)限循環(huán)。

LOOP

ADDr1,r2,#4

ADDr3,r2,#8

SUBr3,r3,r1

BLOOP

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

MOVr0,#10

LOOP

SUBSr0,#1

BNELOOP

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

……

CMPr0,#5;如果r05

BLLTSUB1;則調用

BLGESUB2;否則調用SUB2

注意

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


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>