新聞中心

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

        跳轉(zhuǎn)指令之:跳轉(zhuǎn)指令B及帶連接的跳轉(zhuǎn)指令BL

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

        本文引用地址:http://www.104case.com/article/257056.htm

        3.指令操作的偽代碼

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

        IfconditionPassed{cond}then

        IfL==1then

        LR=addressoftheinstructionafterthebranchinstruftion

        PC=PC+(SignExtend(signed_immed_24)2)

        4.指令的使用

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

        ·Xr14(如果體系結(jié)構(gòu)支持X指令)。

        ·MOVPC,r14。

        ·當(dāng)子程序在入口處使用了壓棧指令:

        STMFDr13!,{registers>,r14},

        可以使用指令。

        LDMFDr13!,{registers>,PC}

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

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

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

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

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

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

        注意

        在一些RISC體系結(jié)構(gòu)的處理器中,存在延時跳轉(zhuǎn)(delayedbranch)模式,即在程序執(zhí)行跳轉(zhuǎn)到目標(biāo)地址之前,程序會執(zhí)行之后的指令。但在體系中,沒有這種延時跳轉(zhuǎn)機(jī)制。

        5.指令舉例

        (1)程序跳轉(zhuǎn)到LAE標(biāo)號處。

        AE;

        ADDr1,r2,#4

        ADDr3,r2,#8

        SUBr3,r3,r1

        LABLE

        SUBr1,r2,#8

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

        B0x1234

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

        BLfunc

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

        BCCLABLE

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

        LOOP

        ADDr1,r2,#4

        ADDr3,r2,#8

        SUBr3,r3,r1

        BLOOP

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

        MOVr0,#10

        LOOP

        SUBSr0,#1

        BNELOOP

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

        ……

        CMPr0,#5;如果r05

        BLLTSUB1;則調(diào)用

        BLGESUB2;否則調(diào)用SUB2

        注意

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


        上一頁 1 2 下一頁

        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 常山县| 贵州省| 屏东市| 高淳县| 元阳县| 五常市| 蒙阴县| 兴业县| 防城港市| 桓仁| 尼勒克县| 米脂县| 黑水县| 丹阳市| 中阳县| 永仁县| 常山县| 庆城县| 濮阳县| 新河县| 南宁市| 石河子市| 渑池县| 崇左市| 温泉县| 大连市| 洪湖市| 林周县| 台南市| 铁力市| 嘉兴市| 清远市| 红安县| 龙州县| 赤壁市| 嘉荫县| 滦平县| 讷河市| 旬阳县| 临桂县| 普兰店市|