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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Thumb指令集之: Thumb指令應(yīng)用

          Thumb指令集之: Thumb指令應(yīng)用

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

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

          11.9Thumb指令應(yīng)用

          11.9.1Thumb的實(shí)現(xiàn)

          對(duì)3級(jí)流水線的處理器來說,做相對(duì)較小的改動(dòng)就可以實(shí)現(xiàn)(5級(jí)流水線的實(shí)現(xiàn)要復(fù)雜些)。為實(shí)現(xiàn),在指令流水線中增加了Thumb指令解碼邏輯,該解碼邏輯將預(yù)取的Thumb指令轉(zhuǎn)換成等價(jià)的指令。圖11.66顯示了Thumb指令的擴(kuò)展邏輯組織。

          從圖11.66可以看出,Thumb指令增加了(Decompressor)與串連,但這并不會(huì)增加指令的譯碼時(shí)間。在指令流水線譯碼周期的第一階段只做了很少的工作,因此可以把擴(kuò)展邏輯安排在這里而不會(huì)影響周期時(shí)間或增加流水線延時(shí)。

          Thumb指令將16位的Thumb指令靜態(tài)地轉(zhuǎn)換為等價(jià)的32位指令。這主要包括主操作碼和次操作碼的查表轉(zhuǎn)換,3位寄存器指示符(specifier)零擴(kuò)展成4位寄存器指示符,以及所需要的其他域的映射。

          例如,Thumb指令“ADDRd,#imm8”與對(duì)應(yīng)的ARM指令“ADDRd,Rd,#8”的映射如圖11.67所示。

          圖11.66Thumb指令的擴(kuò)展邏輯組織

          圖11.67Thumb指令到ARM指令的映射

          Thumb指令解碼邏輯實(shí)現(xiàn)Thumb指令到ARM指令映射時(shí)遵循以下規(guī)則:

          ①ARM指令的條件域(cond,bits[31:28])默認(rèn)使用always。

          注意

          轉(zhuǎn)移指令除外,轉(zhuǎn)移指令是中惟一一個(gè)條件執(zhí)行的指令。

          ②在Thumb指令操作碼中隱含地指定Thumb數(shù)據(jù)處理指令是否應(yīng)該修改CPSR中的條件標(biāo)志位,在ARM指令中要明確指定。

          ③通過重復(fù)寄存器指示符將Thumb指令的2地址指令格式轉(zhuǎn)換為ARM的3地址指令格式。

          Thumb指令的簡單性對(duì)Thumb指令集的效率是非常重要的。如果Thumb指令解碼擴(kuò)展邏輯構(gòu)成復(fù)雜、速度低并且功耗大,那么Thumb指令就沒有什么價(jià)值了。

          c++相關(guān)文章:c++教程



          上一頁 1 2 下一頁

          評(píng)論


          相關(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); })();