<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

          B : 分支

          本文引用地址:http://www.ex-cimer.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)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();