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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > X86架構(gòu)與ARM架構(gòu)比較

          X86架構(gòu)與ARM架構(gòu)比較

          作者: 時間:2016-11-09 來源:網(wǎng)絡(luò) 收藏
          引言

           CPU是怎樣運作的?

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

            CPU的運作與人腦的運作差不多。先談一下人這個系統(tǒng)的工作方式。眼鏡、耳朵、舌頭、皮膚等等感覺器官接收到“觸覺”,把信息傳給大腦,大腦把信息處理后,把處理結(jié)果送給手、腳、嘴等執(zhí)行器官就可以運動了。

            人腦的功能就是從某個感覺器官讀取信息,處理信息,然后再把結(jié)果送給執(zhí)行器官。

            一個完整的系統(tǒng)與人這個系統(tǒng)差不多,傳感器接收數(shù)據(jù),再把數(shù)據(jù)傳給CPU(CPU按照一定的時序、協(xié)議從內(nèi)存讀數(shù)據(jù)),CPU讀取到數(shù)據(jù)并處理,把處理結(jié)果送給執(zhí)行機構(gòu)就行了(實際上CPU就是按照一定時序、協(xié)議向內(nèi)存單元寫數(shù)據(jù))。

            CPU從內(nèi)存中獲取數(shù)據(jù),處理數(shù)據(jù),再把結(jié)果送到內(nèi)存中去。

          一、指令集架構(gòu)比較

          1、X86指令集架構(gòu)(Register-Memory architecture)

            CPU的運算操作數(shù)可以全部都是寄存器,也允許其中的一個操作數(shù)在memory中。所以,CPU可以通過其他指令來與memeory交互,這種架構(gòu)的指令集相對復雜。舉一個例子如下:

          add mem,reg

          2、ARM指令集架構(gòu)(Load-Store architecture)

            CPU只允許用load/store指令來與memory(Flash、RAM)交互,而CPU的運算全部都是在寄存器中完成。也就是說,CPU運算的操作數(shù)只能全部來自寄存器,而且結(jié)構(gòu)也只能保存在寄存器中。所以,倘若要把RAM兩個數(shù)據(jù)相加,結(jié)果還保存到內(nèi)存中,就需要先將內(nèi)存中的數(shù)據(jù)通過load指令將內(nèi)存數(shù)據(jù)加載到寄存器中,計算結(jié)束后,再將保存結(jié)果寄存器的內(nèi)容通過store指令存儲在RAM中。舉一個例子如下:

          ADD R0,R1,R2

          3、對比分析

            兩種架構(gòu)的區(qū)別在于CPU在處理數(shù)據(jù)時,對內(nèi)存的訪問實機。

            X86可以在處理數(shù)據(jù)時直接讀寫內(nèi)存,但是ARM只能先將內(nèi)存加載到寄存器才能讀,也只有借助寄存器尋址將運算結(jié)果寫到內(nèi)存。

            ARM架構(gòu)這種LOAD/STORE架構(gòu)要比X86的Register-Memory架構(gòu)設(shè)計時容易的多,結(jié)果更簡單?! ?img onload="if(this.width>620)this.width=620;" onclick="window.open(this.src)" style="cursor:pointer" src="http://editerupload.eepw.com.cn/fetch/20161101/317799_1_0.jpg" />

          二、指令集比較

          說明:本文的ARM指令集只指ARM指令集,不討論THUMB指令集

          1、數(shù)據(jù)傳送指令

          指令類功能:負責把數(shù)據(jù)、地址或立即數(shù)傳送到寄存器或存儲單元中

          X86數(shù)據(jù)傳送指令
            指令類型          指 令 說 明
          通用數(shù)據(jù)傳送指令   MOV(傳送)、PUSH(進棧)、POP(出棧)、XCHG(交換)
          累加器專用傳送指令  IN(輸入指令) 、OUT(輸入指令)
          地址傳送指令     LEA(有效地址送寄存器)、LDS(指針送寄存器和DS)、LES(指針送寄存器和ES)
          標志寄存器傳送指令  LAHF(標志送AH)、SAHF(AH送標志寄存器)、PUSHF(標志進棧)、POPF(標志出棧)

          ARM數(shù)據(jù)傳送指令
            指令類型               指 令 說 明
          通用數(shù)據(jù)傳送指令   LDM(多數(shù)據(jù)裝載)、STM (多數(shù)據(jù)存儲)、LDR(單數(shù)據(jù)裝載)、STR(單數(shù)據(jù)存儲)、 SWP(單一數(shù)據(jù)交換)
          標志寄存器傳送指令  MRS(加載標志寄存器到寄存器) MSR(存儲寄存器到標志寄存器)

          補充說明:
          <1> LDR/STR指令的地址,一定是(基址寄存器+/-偏移量)構(gòu)成的
          <2> 出棧入棧指令:無專用指令,用LDM、STM指令替代

          2、算術(shù)指令

          指令類功能: 算術(shù)運算
          X86算術(shù)指令
          指令類型 指 令 說 明
          加法指令 ADD(加法)、ADC(帶進位加法)、INC(加1)
          減法指令 SUB(減法)、SBB(帶借位減法)、DEC(減1)、NEG(求補)、CMP(比較)
          乘法指令 MUL(無符號數(shù)乘法)、IMUL(帶符號數(shù)乘法)
          除法指令 DIV(無符號數(shù)除法)、IDIV(帶符號數(shù)除法)、CBW(字節(jié)轉(zhuǎn)換為字)、CWD(字轉(zhuǎn)換為雙字)

          ARM算術(shù)指令
          指令類型指 令 說 明
          加法指令 ADC(帶進位加法)、ADD(加法)
          減法指令 SBC(帶借位減法)、SUB(減法)、CMP(比較指令)、RSB(反向減法)、RSC(帶借位的反向減法)
          乘法指令 MLA(帶累加的乘法)、 MUL(乘法)
          除法指令沒有專用除法指令,需要用函數(shù)來實現(xiàn),通常是把除法轉(zhuǎn)化為乘法來運算
          傳送類算術(shù)指令:MOV(傳送到目的寄存器)、MVN(傳送到目的寄存器)
          補充說明:傳送類算術(shù)指令兼有傳送功能和數(shù)據(jù)運算功能

          3、邏輯指令

          指令類功能: 對字或字節(jié)執(zhí)行邏輯運算
          X86邏輯指令
           指令類型            指 令 說 明
          邏輯運算指令  AND(邏輯與)、OR(邏輯或)、NOT(邏輯非)、XOR(異或)、TEST(測試)
          移位指令    SHL(邏輯左移)、SAL(算術(shù)左移)、SHR(邏輯右移)、SAR(算術(shù)右移)、ROL(循環(huán)左移)、ROR(循環(huán)右移)、RCL(帶進位循環(huán)左移)、RCR(帶進位右移)

          ARM邏輯指令
           指令類型            指 令 說 明
          邏輯運算指令  AND(邏輯與)、 BIC(清楚位)、EOR(邏輯異或)、ORR(邏輯或)
          移位指令    LSL(邏輯或算術(shù)左移)、ASL(邏輯或算術(shù)左移)、LSR(邏輯右移)、ASR(算術(shù)右移)、 ROR(循環(huán)右移)、RRX(帶擴展的循環(huán)右移)

          4、串處理指令

          指令類功能:處理存放存儲器里的數(shù)據(jù)串
          X86串處理指令
          指令類型        指 令 說 明
          指 令  MOVS(串傳送)、CMPS(串比較)、SCAS(串掃描)、LODS(從串?。?、STOS(存入串)

          ARM串處理指令: 無


          5、控制轉(zhuǎn)移指令

          指令類功能:用來控制程序的執(zhí)行流程
          X86控制轉(zhuǎn)移
           指令類型               指 令 說 明
          無條件轉(zhuǎn)移指令  JMP(段間和段內(nèi)轉(zhuǎn)移)
          條件轉(zhuǎn)移指令 J   Z(結(jié)果為0(或相等)則轉(zhuǎn)移)、JS(結(jié)果為負則轉(zhuǎn)移)、JNS(結(jié)果為正則轉(zhuǎn)移)、JO(溢出則轉(zhuǎn)移)、JNO(不溢出則轉(zhuǎn)移)、JP(奇偶位為1則轉(zhuǎn)移)、JNP(奇偶位為0則轉(zhuǎn)移)
          循環(huán)指令 LOOP(循環(huán)指令)、LOOPPZ/LOOPE(當為0或相等時循環(huán)指令)、LOOPNZ/LOOPNE(當不為0或不相等時循環(huán)指令)
          子程序指令    CALL(調(diào)用指令)、RET(返回指令)
          中斷指令     INT(中斷)、INTO(如溢出則中斷)、RIET(從中斷返回)

          ARM控制轉(zhuǎn)移
          指令類型          指 令 說 明
          無條件轉(zhuǎn)移指令  B(跳轉(zhuǎn))
          條件轉(zhuǎn)移指令   BEQ(相等跳轉(zhuǎn))、BNE(不等跳轉(zhuǎn))等等
          子程序指令    BL(跳轉(zhuǎn),并保存下一條指令的地址到LR)、MOV PC,LR(從函數(shù)返回)
          軟中斷指令    SWI(軟中斷)
          補充說明:     ARM指令集沒有X86那樣專用的循環(huán)指令,這些指令都是通過B、BL指令結(jié)合其他的指令來實現(xiàn)的

          6、相對跳轉(zhuǎn)指令對比

          X86相對跳轉(zhuǎn)指令:

                  jmp short 標號(IP=IP+8位偏移量:-128~127)、

                  jmp near ptr 標號(IP=IP+16位偏移量:-32768~32767)、

                  loop(cx=cx-1;if(cx!=0) IP=IP+8位偏移量)

          ARM相對跳轉(zhuǎn)指令:

                  B、

                  BL

          說明:B、BL指令的偏移量都是24 位有符號數(shù),左移兩位后為26位。有符號擴展為 32 位,表示的有效偏移為 26 位(+/-32MB的地址空間)。

          7、絕對跳轉(zhuǎn)指令對比
          X86絕對跳轉(zhuǎn)指令:

                   jmp far ptr 標號(CS=標號所在段的段地址;IP=標號所在段的偏移地址)、

                   jmp word ptr 內(nèi)存單元(段內(nèi)轉(zhuǎn)移)、

                   jmp dword ptr 內(nèi)存單元(段間轉(zhuǎn)移)


          ARM絕對跳轉(zhuǎn)指令: 無專用的指令,需要用指令來模擬
                  <1> “ldr pc, =標號”(相應(yīng)于B)

                  <2> ldr lr, =halt_loop(相應(yīng)于BL)
                    ldr pc, =標號
               halt_loop:
                   b halt_loop

          三、指令集對比總結(jié)

          1、ARM指令集更簡潔,比較少

           比如說除法指令、循環(huán)指令、堆棧專用指令等等都是是沒有的,靠其他的指令綜合來完成

          2、ARM指令集功能更強大

           比如說b指令可以跳轉(zhuǎn)的范圍是前后32M

          3、ARM每條指令都可條件執(zhí)行

           這使得C語言跳轉(zhuǎn)語句可以用很簡便的方式實現(xiàn)

          4、ARM指令集操作更有序

            因為是LOAD/STORE結(jié)構(gòu),所以都是先從內(nèi)存中加載數(shù)據(jù)到寄存器(load),然后通過寄存器處理,再把處理結(jié)果寫到內(nèi)存中(store)?! ?/p>

          5、ARM指令集都是4字節(jié)的

            這樣便于流水線的實現(xiàn),而且內(nèi)存的分配更有序。在指令尋址上,也節(jié)省了兩位地址。



          關(guān)鍵詞: x86架構(gòu)arm架

          評論


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