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

          新聞中心

          ARM的BX指令

          作者: 時間:2016-11-10 來源:網(wǎng)絡(luò) 收藏
          bx的語法格式
          BX{} <Rm>
          <cond>為指令執(zhí)行的條件碼。當<cond>忽略時指令為無條件執(zhí)行。
          <Rm>該寄存器中為跳轉(zhuǎn)的目標地址。當寄存器的bit[0]為0時,目標地址處的指令為ARM指令;
          寄存器的bit[0]為1時,目標地址處的指令為Thumb指令。

          看一段簡單程序的片段,不用考慮省略號的內(nèi)容,看框架就可以了!

          EXPORT LEDTEST
          AREA testasm,CODE,READONLY
          CODE32
          LEDTEST
          。。。。。。。。。。
          。。。。。。。。。
          。。。。。。。。
          。。。。。。。。。
          。。。。。。。。。。。
          ledon
          ...............
          ...............
          。。。。。。。。。。。。
          。。。。。。。。。。。
          adr r4,delay1+1
          bx r4

          ledoff
          ..............
          ...............
          .............
          .............
          .............
          ..............

          AREA testasm,CODE,READONLY
          CODE16
          delay1
          ............
          ...........
          .............
          ldr r1,=ledoff
          bx r1
          ........
          .............
          .............
          END

          關(guān)于delay1+1:
          ARM指令是字對齊(指令的地址后兩位為[1:0]=0b00),Thumb是半字對齊(指令的地址后兩位為[1:0]=0bx0,x為0或1)。指令的地址的最后一位必為0。
          因此bx(不管往ARM還是往Thumb跳轉(zhuǎn))的跳轉(zhuǎn)指令必須保證指令地址的最后一位為0,上例中bx指令能自
          動地將目標地址值置為r4的值和0xFFFFFFFE的與后的結(jié)果,就會使指令地址的最后一位必為0了。
          那么delay+1的這個1不就被0與掉了么,就沒有什么作用了?其實,在執(zhí)行bx指令時,它是首先判
          斷指令地址的后一位為0或1(這樣就知道要跳轉(zhuǎn)的地方是ARM還是Thumb指令。0跳轉(zhuǎn)arm,1跳轉(zhuǎn)thumb。),然后再PC=r4 AND 0xFFFFFFFE。這樣,當我們需要要跳轉(zhuǎn)到Thumb指令處執(zhí)行時,必須將指令地址的最后以為置1。

          而bx再跳轉(zhuǎn)到ARM指令時就無需考慮這些了,就不用像上面的+1處理了。

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


          關(guān)鍵詞: ARMBX指

          評論


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