乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      i386平臺和x86

       CodeNutter 2016-05-17

                                        

                            i386平臺和x86_64平臺機器代碼的區(qū)別

                                                                                   By Qianghaohao

                             說明:

                                      在此i386(IA32)指的是Intel32位處理器上硬件和GCC代碼的組合.
                                      x86_64指代在AMD和Intel的較新的64位處理器上運行的硬件和GCC代碼的組合.

                               x86-64代碼與i386機器生成的代碼有極大的不同.主要內(nèi)容如下:

                                  1.指針和長整型數(shù)是64位長.整數(shù)算術(shù)運算支持8,16,32,和64位數(shù)據(jù)類型.
                                  2.通用寄存器組從8個擴展到16個.
                                  3.許多程序狀態(tài)都保存在寄存器中,而不是在棧上.整型和指針類型的過程參數(shù)(最多6個)通過
                                   寄存器傳遞.有些過程根本不需要訪問棧.
                                  4.如果可能,條件操作用條件傳送指令實現(xiàn),會得到比傳統(tǒng)分支代碼更好的性能.
                                  5.浮點數(shù)作用面向寄存器的指令集來實現(xiàn),而不用IA32支持的基于棧的方法來實現(xiàn)

                               為了驗證以上區(qū)別,在x86-64 Linux平臺用不同的GCC編譯選項來生成不同平臺的C代碼對應(yīng)的匯編代碼:

                                           測試如下代碼:
                                                    
      1. //文件名:x86-64-IA32.c  
      2.    #include<stdio.h>  
      3.    int main()  
      4.    {  
      5.        int *p;  //int型指針變量  
      6.        long n;  //定義長整型變量  
      7.        printf("size of p = %d\nsize of n = %d\n", sizeof(p), sizeof(n));  
      8.        return 0;  
      9.    }  

                      一.先在i386 Linux上運行命令:gcc -S  -m32 x86-64-IA32.c 產(chǎn)生IA32機器兼容的匯編代碼:


                                              
                        當(dāng)把以上代碼編譯成可執(zhí)行代碼是輸出結(jié)果為:
                                   size of p = 4
                                   size of  n = 4

                     二. 在x86-64 Linux上運行命令:gcc -S -m64 x86-64-IA32.c 產(chǎn)生x86-64平臺的匯編代碼:

                                           
                                             
                    當(dāng)把以上代碼編譯成可執(zhí)行代碼是輸出結(jié)果為:
                              size of p = 8
                              size of  n = 8
                     總結(jié):從以上結(jié)果對比可以看出i386平臺和x86-64平臺的代碼有很大的區(qū)別,在i386平臺指針類型
                     和long類型大小都為4,在x64平臺指針類型和long類型大小都為8.另外兩者產(chǎn)生的匯編代碼也不同
                     在x64平臺指令后綴為q,如pushq ,popq等,而在i386位movl,pushl等.至于其他更多的區(qū)別可以
                     寫其他測試代碼來檢驗,在此不做過多的介紹.

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多