新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 第1天-ARM匯編指令B/BL

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

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

B : 分支

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

(Branch)

B{條件} <地址>

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

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

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

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

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



BL : 帶連接的分支

(Branch withLink)

BL{條件} <地址>

BL是另一個分支指令。就在分支之前,在寄存器 14 中裝載上 R15 的內容。你可以重新裝載 R14 到 R15 中來返回到在這個分支之后的那個指令,它是子例程的一個基本但強力的實現(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]!


關鍵詞: ARM匯編指令BB

評論


技術專區(qū)

關閉