天天看點

系統指令集x86,x64,x86-64,amd64,IA-32e,EMT64,IA-64,arm64的差別

在軟體包的選擇上常常會遇到一些容易讓人産生混淆的指令集名稱,下面對這些名稱做一點解釋:

1)x64是對原有32-bit x86指令集的64位擴充的一個總稱,包括:

AMD公司的x86-64(x86-64後來更名為AMD64)

Intel公司的 IA-32e(後來又稱為EMT64)

AMD64和EMT64在絕大多數情況是相容的,大多數代碼可以同時在兩種指令集上正常運作。

2)Intel還有一種64位指令集IA-64,這個是基于Explicitly Parallel Instruction Computing (EPIC)的 ,是獨立的,與x86,x64沒有關系

3)ARM64,這個是Advanced RISC Machines (ARM)公司開發的64位指令集。

在軟體安裝包的命名上 x86-64,x64, amd64基本可以認為是等價的。 arm64這個也比較常見。

下面是Go語言在unix上判斷系統指令集的一段C代碼,在執行uname指令後,通過字段machine裡包含字元串來判斷指令集,

  1. 含有x86_64或者amd64的判定為amd64
  2. 不符合條件1,但包含86的判斷為386
  3. 包含arm的,判定為arm
  4. 否則為未知指令集,報錯
if(uname(&u) < 0)
                        fatal("uname: %s", strerror(errno));
                if(contains(u.machine, "x86_64") || contains(u.machine, "amd64"))
                        gohostarch = "amd64";
                else if(hassuffix(u.machine, "86"))
                        gohostarch = "386";
                else if(contains(u.machine, "arm"))
                        gohostarch = "arm";
                else
                        fatal("unknown architecture: %s", u.machine);
           

參考文章:

《Introduction to x64 Assembly》

繼續閱讀