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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ARM指令集與Thumb指令集的區(qū)別

          ARM指令集與Thumb指令集的區(qū)別

          作者: 時間:2016-11-20 來源:網(wǎng)絡(luò) 收藏
          一、現(xiàn)在先區(qū)分下ARM指令集Thumb指令集

          Thumb 指令可以看作是 ARM 指令壓縮形式的子集,是針對代碼密度的問題而提出的,它具有 16 位的代碼密度但是它不如ARM指令的效率高 .Thumb 不是一個完整的體系結(jié)構(gòu),不能指望處理只執(zhí)行Thumb 指令而不支持 ARM 指令集.因此,Thumb 指令只需要支持通用功能,必要時可以借助于完善的 ARM 指令集,比如,所有異常自動進入 ARM 狀態(tài).在編寫 Thumb 指令時,先要使用偽指令 CODE16 聲明,而且在 ARM 指令中要使用 BX指令跳轉(zhuǎn)到 Thumb 指令,以切換處理器狀態(tài).編寫 ARM 指令時,則可使用偽指令 CODE32聲明.

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

          流水線處理:
          不同于微編碼的處理器,ARM (保持它的 RISC 性)是完全硬布線的。

          為了加速 ARM 2 和 3 的執(zhí)行使用 3 階段流水線。第一階段持有從內(nèi)存中取回的指令。第二階段開始解碼,而第三階段實際執(zhí)行它。故此,程序計數(shù)器總是超出當(dāng)前執(zhí)行的指令兩個指令。(在為分支指令計算偏移量時必須計算在內(nèi))。

          因為有這個流水線,在分支時丟失 2 個指令周期(因為要重新添滿流水線)。所以最好利用條件執(zhí)行指令來避免浪費周期。例如:

          ...
          CMP R0,#0
          BEQ over
          MOV R1,#1
          MOV R2,#2
          over
          ...


          可以寫為更有效的:
          ...
          CMP R0,#0
          MOVNE R1,#1
          MOVNE R2,#2


          二、Thumb 指令集與 ARM 指令集的區(qū)別
          Thumb 指令集沒有協(xié)處理器指令,信號量指令以及訪問 CPSR 或 SPSR 的指令,沒有乘加指令及 64 位乘法指令等,且指令的第二操作數(shù)受到限制;除了跳轉(zhuǎn)指令 B 有條件執(zhí)行功能外,其它指令均為無條件執(zhí)行;大多數(shù) Thumb 數(shù)據(jù)處理指令采用 2 地址格式.Thumb指令集與 ARM 指令的區(qū)別一般有如下幾點:
          跳轉(zhuǎn)指令
          程序相對轉(zhuǎn)移,特別是條件跳轉(zhuǎn)與 ARM 代碼下的跳轉(zhuǎn)相比,在范圍上有更多的限制,轉(zhuǎn)向子程序是無條件的轉(zhuǎn)移.
          數(shù)據(jù)處理指令
          數(shù)據(jù)處理指令是對通用寄存器進行操作,在大多數(shù)情況下,操作的結(jié)果須放入其中一個操作數(shù)寄存器中,而不是第 3 個寄存器中.數(shù)據(jù)處理操作比 ARM 狀態(tài)的更少,訪問寄存器 R8~R15 受到一定限制.除 MOV 和 ADD 指令訪問器 R8~R15 外,其它數(shù)據(jù)處理指令總是更新 CPSR 中的 ALU 狀態(tài)標(biāo)志.訪問寄存器 R8~R15 的 Thumb 數(shù)據(jù)處理指令不能更新 CPSR 中的 ALU 狀態(tài)標(biāo)志.
          單寄存器加載和存儲指令
          在 Thumb 狀態(tài)下,單寄存器加載和存儲指令只能訪問寄存器 R0~R7
          批量寄存器加載和存儲指令
          LDM 和 STM 指令可以將任何范圍為 R0~R7 的寄存器子集加載或存儲. PUSH 和 POP 指令使用堆棧指令 R13 作為基址實現(xiàn)滿遞減堆棧.除 R0~R7 外,PUSH 指令還可以存儲鏈接寄存器 R14,并且 POP 指令可以加載程序指令PC

          ARM指令分為以下幾種:

          一、ARM 存儲器訪問指令
          助記符 說明 操作 條件碼位置
          LDR Rd,addressing 加載字?jǐn)?shù)據(jù) Rd←[addressing],addressing 索引 LDR{cond}
          LDRB Rd,addressing 加載無符字節(jié)數(shù)據(jù) Rd←[addressing],addressing 索引 LDR{cond}B
          LDRT Rd,addressing 以用戶模式加載字?jǐn)?shù)據(jù) Rd←[addressing],addressing 索引 LDR{cond}T
          LDRBT Rd,addressing 以用戶模式加載無符號字?jǐn)?shù)據(jù) Rd←[addressing],addressing 索引 LDR{cond}BT
          LDRH Rd,addressing 加載無符半字?jǐn)?shù)據(jù) Rd←[addressing],addressing 索引 LDR{cond}H
          LDRSB Rd,addressing 加載有符字節(jié)數(shù)據(jù) Rd←[addressing],addressing 索引 LDR{cond}SB
          LDRSH Rd,addressing 加載有符半字?jǐn)?shù)據(jù) Rd←[addressing],addressing 索引 LDR{cond}SH
          STR Rd,addressing 存儲字?jǐn)?shù)據(jù) [addressing]←Rd,addressing 索引 STR{cond}
          STRB Rd,addressing 存儲字節(jié)數(shù)據(jù) [addressing]←Rd,addressing 索引 STR{cond}B
          STRT Rd,addressing 以用戶模式存儲字?jǐn)?shù)據(jù) [addressing]←Rd,addressing 索引 STR{cond}T
          SRTBT Rd,addressing 以用戶模式存儲字節(jié)數(shù)據(jù) [addressing]←Rd,addressing 索引 STR{cond}BT
          STRH Rd,addressing 存儲半字?jǐn)?shù)據(jù) [addressing]←Rd,addressing 索引 STR{cond}H
          LDM{mode} Rn{!},reglist 批量(寄存器)加載 reglist←[Rn…],Rn 回存等 LDM{cond}{more}
          STM{mode} Rn{!},rtglist 批量(寄存器)存儲 [Rn…]← reglist,Rn 回存等 STM{cond}{more}
          SWP Rd,Rm,Rn 寄存器和存儲器字?jǐn)?shù)據(jù)交換 Rd←[Rd],[Rn]←[Rm](Rn≠Rd 或 Rm) SWP{cond}
          SWPB Rd,Rm,Rn 寄存器和存儲器字節(jié)數(shù)據(jù)交換 Rd←[Rd],[Rn]←[Rm](Rn≠Rd 或 Rm) SWP{cond}B

          二、ARM 數(shù)據(jù)處理指令
          助記符號 說明 操作 條件碼位置
          MOV Rd ,operand2 數(shù)據(jù)轉(zhuǎn)送 Rd←operand2 MOV {cond}{S}
          MVN Rd ,operand2 數(shù)據(jù)非轉(zhuǎn)送 Rd←(operand2) MVN {cond}{S}
          ADD Rd,Rn operand2 加法運算指令 Rd←Rn+operand2 ADD {cond}{S}
          SUB Rd,Rn operand2 減法運算指令 Rd←Rn-operand2 SUB {cond}{S}
          RSB Rd,Rn operand2 逆向減法指令 Rd←operand2-Rn RSB {cond}{S}
          ADC Rd,Rn operand2 帶進位加法 Rd←Rn+operand2+carry ADC {cond}{S}
          SBC Rd,Rn operand2 帶進位減法指令 Rd←Rn-operand2-(NOT)Carry SBC {cond}{S}
          RSC Rd,Rn operand2 帶進位逆向減法指令 Rd←operand2-Rn-(NOT)Carry RSC {cond}{S}
          AND Rd,Rn operand2 邏輯與操作指令 Rd←Rn&operand2 AND {cond}{S}
          ORR Rd,Rn operand2 邏輯或操作指令 Rd←Rn|operand2 ORR {cond}{S}
          EOR Rd,Rn operand2 邏輯異或操作指令 Rd←Rn^operand2 EOR {cond}{S}
          BIC Rd,Rn operand2 位清除指令 Rd←Rn&(~operand2) BIC {cond}{S}
          CMP Rn,operand2 比較指令 標(biāo)志 N、Z、C、V←Rn-operand2 CMP {cond}
          CMN Rn,operand2 負(fù)數(shù)比較指令 標(biāo)志 N、Z、C、V←Rn+operand2 CMN {cond}
          TST Rn,operand2 位測試指令 標(biāo)志 N、Z、C、V←Rn&operand2 TST {cond}
          TEQ Rn,operand2 相等測試指令 標(biāo)志 N、Z、C、V←Rn^operand2 TEQ {cond}

          三、乘法指令
          具有 32×32 乘法指令,32×32 乘加指令,32×32 結(jié)果為 64 位的乘/乘法指令.
          助記符 說明 操作 條件碼位置
          MUL Rd,Rm,Rs 32 位乘法指令 Rd←Rm*Rs (Rd≠Rm) MUL{cond}{S}
          MLA Rd,Rm,Rs,Rn 32 位乘加指令 Rd←Rm*Rs+Rn (Rd≠Rm) MLA{cond}{S}
          UMULL RdLo,RdHi,Rm,Rs 64 位無符號乘法指令 (RdLo,RdHi)←Rm*Rs UMULL{cond}{S}
          UMLAL RdLo,RdHi,Rm,Rs 64 位無符號乘加指令 (RdLo,RdHi)←Rm*Rs+(RdLo,RdHi) UMLAL{cond}{S}
          SMULL RdLo,RdHi,Rm,Rs 64 位有符號乘法指令 (RdLo,RdHi)←Rm*Rs SMULL{cond}{S}
          SMLAL RdLo,RdHi,Rm,Rs 64 位有符號乘加指令 (RdLo,RdHi)←Rm*Rs+(RdLo,RdHi) SMLAL{cond}{S}

          四、跳轉(zhuǎn)指令
          在 ARM 中有兩種方式可以實現(xiàn)程序的跳轉(zhuǎn),一種是使用跳轉(zhuǎn)指令直接跳轉(zhuǎn),另一種則是直接向 PC 寄存器賦值實現(xiàn)跳轉(zhuǎn).

          助記符 說明 操作 條件碼位置
          B label 跳轉(zhuǎn)指令 Pc←label B{cond}
          BL label 帶鏈接的跳轉(zhuǎn)指令 LR←PC-4, PC←label BL{cond}
          BX Rm 帶狀態(tài)切換的跳轉(zhuǎn)指令 PC←label,切換處理狀態(tài) BX{cond}

          五、ARM協(xié)處理器指令
          ARM 支持協(xié)處理器操作,協(xié)處理器的控制要通過協(xié)處理器命令實現(xiàn).
          助記符 說明 操作 條件碼位置
          CDP
          coproc,opcodel,CRd,CRn,CRm{,opcode2} 協(xié)處理器數(shù)據(jù)操作指令 取決于協(xié)處理器 CDP{cond}
          LDC{L} coproc,CRd〈地址〉 協(xié)處理器數(shù)據(jù)讀取指令 取決于協(xié)處理器 LDC{cond}{L}
          STC{L} coproc,CRd,〈地址〉 協(xié)處理器數(shù)據(jù)寫入指令 取決于協(xié)處理器 STC{cond}{L}
          ARM 寄存器到協(xié)處理器
          MCR coproc, opcodel,Rd,CRn,{,opcode2} 寄存器的數(shù)據(jù)傳送指令 取決于協(xié)處理器 MCR{cond}
          協(xié)處理器寄存器到 ARM
          MRC coproc, opcodel,Rd,CRn,{,opcode2} 寄存器到數(shù)據(jù)傳送指令 取決于協(xié)處理器MCR{cond}

          五、ARM 雜項指令
          助記符 說明 操作 條件碼位置
          SWI immed_24 軟中斷指令 產(chǎn)生軟中斷,處理器進入管理模式 SWI{cond}
          MRS Rd,psr 讀狀態(tài)寄存器指令 Rd←psr,psr 為 CPSR 或 SPSR MRS{cond}
          MSR psr_fields,Rd/#immed_8r 寫狀態(tài)寄存器指令 psr_fields←Rd/#immed_8r,psr 為 CPSR 或 SPSR MSR{cond}



          關(guān)鍵詞: ARM指令集Thumb指令

          評論


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