新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > X86架構與ARM架構比較

        X86架構與ARM架構比較

        作者: 時間:2016-11-09 來源:網絡 收藏
        引言

         CPU是怎樣運作的?

        本文引用地址:http://www.104case.com/article/201611/317799.htm

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

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

          一個完整的系統與人這個系統差不多,傳感器接收數據,再把數據傳給CPU(CPU按照一定的時序、協議從內存讀數據),CPU讀取到數據并處理,把處理結果送給執行機構就行了(實際上CPU就是按照一定時序、協議向內存單元寫數據)。

          CPU從內存中獲取數據,處理數據,再把結果送到內存中去。

        一、指令集架構比較

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

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

        add mem,reg

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

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

        ADD R0,R1,R2

        3、對比分析

          兩種架構的區別在于CPU在處理數據時,對內存的訪問實機。

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

          ARM架構這種LOAD/STORE架構要比X86的Register-Memory架構設計時容易的多,結果更簡單。  

        二、指令集比較

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

        1、數據傳送指令

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

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

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

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

        2、算術指令

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

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

        3、邏輯指令

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

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

        4、串處理指令

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

        ARM串處理指令: 無


        5、控制轉移指令

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

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

        6、相對跳轉指令對比

        X86相對跳轉指令:

                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相對跳轉指令:

                B、

                BL

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

        7、絕對跳轉指令對比
        X86絕對跳轉指令:

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

                 jmp word ptr 內存單元(段內轉移)、

                 jmp dword ptr 內存單元(段間轉移)


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

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

        三、指令集對比總結

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

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

        2、ARM指令集功能更強大

         比如說b指令可以跳轉的范圍是前后32M

        3、ARM每條指令都可條件執行

         這使得C語言跳轉語句可以用很簡便的方式實現

        4、ARM指令集操作更有序

          因為是LOAD/STORE結構,所以都是先從內存中加載數據到寄存器(load),然后通過寄存器處理,再把處理結果寫到內存中(store)。  

        5、ARM指令集都是4字節的

          這樣便于流水線的實現,而且內存的分配更有序。在指令尋址上,也節省了兩位地址。



        關鍵詞: x86架構arm架

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 竹北市| 黔南| 桐庐县| 铅山县| 长阳| 精河县| 库车县| 灵川县| 宜黄县| 崇明县| 佛学| 阿拉善盟| 东港市| 英超| 长沙市| 和林格尔县| 宁河县| 万山特区| 惠州市| 新疆| 宜川县| 潢川县| 嘉义县| 抚州市| 都江堰市| 娄烦县| 金华市| 宣武区| 宝清县| 安远县| 邹城市| 安顺市| 海晏县| 门源| 靖边县| 资中县| 宁化县| 鄂托克旗| 镇沅| 柳州市| 江源县|