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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > Thumb指令集之: Thumb編程模型

          Thumb指令集之: Thumb編程模型

          作者: 時間:2013-09-30 來源:網絡 收藏

          11.2Thumb

          所有的Thumb指令都是16位的。它們都是指令重新編碼得到的,所以繼承了指令集的許多特點。

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

          ①有數(shù)據(jù)處理、數(shù)據(jù)傳送和流控制的指令結構。

          ②支持8位字節(jié)、16位半字和32位字數(shù)據(jù)類型,半字以兩字節(jié)邊界對齊,字以4字節(jié)邊界對齊。

          ③32位的無分段存儲器(unsegmentedmemory)。

          除了繼承了指令集的一些特點外,與ARM指令集存在以下一些差異。

          ①大多數(shù)Thumb指令為無條件執(zhí)行指令(所有ARM指令都是條件執(zhí)行的)。

          ②許多Thumb數(shù)據(jù)處理指令采用了2地址格式(目的寄存器與源寄存器相同)。而ARM指令中除64位乘法指令外,其余指令均采用3地址模式。

          ③Thumb指令格式減少了很多ARM指令格式的限制,使Thumb指令編寫的代碼密度大大提高。

          無論處理器處于什么狀態(tài),所有的異常都使處理器返回到ARM狀態(tài),并完成異常處理。但異常發(fā)生時,CPSR狀態(tài)寄存器在進入異常時被保存到相應的SPSR中,當異常處理結束后,處理器將恢復到異常發(fā)生前的狀態(tài),并按照發(fā)生異常時處理器的狀態(tài)繼續(xù)執(zhí)行ARM或Thumb指令。

          應該注意的是,ARM異常返回指令需要根據(jù)ARM流水線的行為對返回地址進行調整。由于Thumb指令是2字節(jié)長,而ARM指令是4字節(jié)長,所以由Thumb執(zhí)行狀態(tài)進入異常時其自然偏移量應與ARM不同(ARM狀態(tài)下,拷貝到鏈接寄存器的值PC-4)。為了減少編程的復雜性,ARM體系結構中設置了硬件邏輯,以實現(xiàn)Thumb狀態(tài)的自動地址偏移調整,使ARM和Thumb狀態(tài)編程一致。

          表11.2列出了Thumb狀態(tài)下發(fā)生異常時LR的值。

          表11.2 Thumb

          異常

          異常鏈接寄存器值

          返回指令

          Reset

          不可預知的值

          未定義指令

          未定義指令地址+2

          MOVPC,r14

          SWI

          Swi指令地址+2

          MOVPC,r14

          預取異常

          預取異常指令+4

          MOVPC,r14,#4

          數(shù)據(jù)異常

          產生預取異常指令地址+8

          MOVPC,r14,#8

          IRQ

          下一條將被執(zhí)行的指令地址+4

          MOVPC,r14,#4

          FIQ

          下一條將被執(zhí)行的指令地址+4

          MOVPC,r14,#4



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();