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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 跳轉(zhuǎn)指令之:帶狀態(tài)切換的連接跳轉(zhuǎn)指令BLX(1)

          跳轉(zhuǎn)指令之:帶狀態(tài)切換的連接跳轉(zhuǎn)指令BLX(1)

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

          8.3帶狀態(tài)切換的連接

          1.指令編碼格式

          帶連接和狀態(tài)切換的BLX(BranchwithLinkExchange)使用標(biāo)號,用于使程序跳轉(zhuǎn)到Thumb狀態(tài)或從Thumb狀態(tài)返回。該指令為無條件執(zhí)行指令,并用分支寄存器的最低位來更新CPSR中的T位,將返回地址寫入到連接寄存器LR中。

          本文引用地址:http://www.ex-cimer.com/article/257054.htm

          指令編碼格式如圖8.3所示。

          圖8.3BLX(1)指令編碼格式

          2.語法格式

          BLXtarget_add>

          其中,target_add>為指令的跳轉(zhuǎn)目標(biāo)地址。該地址根據(jù)以下規(guī)則計算。

          ①將指令中指定的24位偏移量進行符號擴展,形成32位立即數(shù)。

          ②將結(jié)果左移兩位。

          ③位H(bit[24])加到結(jié)果地址的第一位(bit[1])。

          ④將結(jié)果累加進程序計數(shù)器PC中。

          計算偏移量的工作一般由匯編器來完成。這種形式的只能實現(xiàn)±32MB空間的跳轉(zhuǎn)。

          左移兩位形成字偏移量,然后將其累加進程序計數(shù)器PC中。這時,程序計數(shù)器的內(nèi)容為BX指令地址加8字節(jié)。位H(bit[24])也加到結(jié)果地址的第一位(bit[1]),使目標(biāo)地址成為半字地址,以執(zhí)行接下來的Thumb指令。計算偏移量的工作一般由匯編器來完成。這種形式的跳轉(zhuǎn)指令只能實現(xiàn)±32MB空間的跳轉(zhuǎn)。

          3.指令操作的偽代碼

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

          第一種格式BLX指令。

          LR=addressoftheinstructionaftertheBLXinstruction

          TFlag=1

          PC=PC+PC=PC+(SignExtend(signed_immed_24)2)+(H1)

          4.指令的使用

          ·從Thumb狀態(tài)返回到狀態(tài),使用BX指令。

          BXr14

          ·可以在子程序的入口和出口增加棧操作指令。

          PUSH{registers>,r14}

          ……

          POP{registers>,PC}

          塵埃粒子計數(shù)器相關(guān)文章:塵埃粒子計數(shù)器原理


          評論


          相關(guān)推薦

          技術(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); })();