新聞中心

        第1天-ARM匯編指令B/BL

        作者: 時(shí)間:2016-11-26 來源:網(wǎng)絡(luò) 收藏
        第1天-ARM匯編指令

        B : 分支

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

        (Branch)

        B{條件} <地址>

        B是最簡單的分支。一旦遇到一個(gè)B指令,ARM 處理器將立即跳轉(zhuǎn)到給定的地址,從那里繼續(xù)執(zhí)行。注意存儲(chǔ)在分支指令中的實(shí)際的值是相對(duì)當(dāng)前的 R15 的值的一個(gè)偏移量;而不是一個(gè)絕對(duì)地址。它的值由匯編器來計(jì)算,它是 24 位有符號(hào)數(shù),左移兩位后有符號(hào)擴(kuò)展為 32 位,表示的有效偏移為 26 位(+/- 32 M)。

        在其他處理器上,你可能經(jīng)常見到這樣的指令:

        OPT 1 LDA &70 CMP #0 BEQ Zero STA &72 .Zero RTS

        (取自 Acorn Electron User Guide issue 1 page 213)

        在 ARM 處理器上,它們將變成下面這些東西:

        OPT 1 ADR R1, #&70 LDR R0, [R1] CMP #0 BEQ Zero STR R0, [R1, #2] .Zero MOV PC, R14

        這不是一個(gè)很好的例子,但你可以構(gòu)想如何更好的去條件執(zhí)行而不是分支。另一方面,如果你有大段的代碼或者你的代碼使用狀態(tài)標(biāo)志,那么你可以使用條件執(zhí)行來實(shí)現(xiàn)各類分支: 這樣一個(gè)單一的簡單條件執(zhí)行指令可以替代在其他處理器中存在的所有這些分支和跳轉(zhuǎn)指令。

        OPT 1 ADR R1, #&70 LDR R0, [R1] CMP R0, #0 STRNE R0, [R1, #2] MOV PC, R14



        BL : 帶連接的分支

        (Branch withLink)

        BL{條件} <地址>

        BL是另一個(gè)分支指令。就在分支之前,在寄存器 14 中裝載上 R15 的內(nèi)容。你可以重新裝載 R14 到 R15 中來返回到在這個(gè)分支之后的那個(gè)指令,它是子例程的一個(gè)基本但強(qiáng)力的實(shí)現(xiàn)。它的作用在屏幕裝載器 2 (例子 4)中得以很好的展現(xiàn)...

        .load_new_format BL switch_screen_mode BL get_screen_info BL load_palette .new_loop MOV R1, R5 BL read_byte CMP R0, #255 BLEQ read_loop STRB R0, [R2, #1]!


        關(guān)鍵詞: ARM匯編指令BB

        評(píng)論


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

        關(guān)閉
        主站蜘蛛池模板: 丹东市| 临汾市| 西贡区| 叙永县| 沙坪坝区| 开封市| 壶关县| 河池市| 保德县| 常熟市| 绥德县| 额尔古纳市| 盖州市| 淮安市| 泌阳县| 襄樊市| 宁国市| 青阳县| 珲春市| 台前县| 临颍县| 灵丘县| 阿尔山市| 万全县| 康定县| 南昌市| 景宁| 西平县| 林甸县| 射洪县| 北安市| 湖南省| 沙田区| 盘山县| 日喀则市| 巩留县| 二连浩特市| 师宗县| 太原市| 永和县| 鄂尔多斯市|