x8664（又稱 x64，即英文詞 64bit extended，64 位元拓展的簡寫）是一個處理器的指令集架構，基於 x86 架構的 64 位拓展，向後相容於 16 位及 32 位的 x86 架構。x64 於 1999 年由 AMD 設計，AMD 首次公開 64 位元集以擴充給 x86，稱為「AMD64」。其後也為英特爾所採用，現時英特爾稱之為「Intel 64」，在之前曾使用過「Clackamas Technology」 CT、「IA32e」及「EM64T」。 蘋果公司和 RPM 套件管理員以「x8664」或「x86_64」稱呼此 64 位架構。甲骨文公司及 Microsoft 稱之為「x64」。BSD 家族及其他 Linux 發行版則使用「amd64」，32 位元版本則稱為「i386」（或 i486586686），Arch Linux 及其衍生發行版用 x86_64 稱呼此 64 位元架構。 AMD64 AMD64 指令集被應用在 Athlon 64、Athlon 64 FX、Athlon 64 X2、Turion 64、Turion 64 X2、Opteron、Sempron、Phenom、Athlon II、Phenom II、AMD APU、AMD FX、AMD Ryzen、AMD Epyc 等處理器上。 架構特色 在 x8664 出現以前，英特爾與惠普聯合設計出 IA64 架構；惟 IA64 並不與 x86 相容，且市場反應較冷淡，同時受制於多個專利權，使其他廠商不能模仿，規模沒有很大。與 x86 相容的 AMD64 架構便應運而生，其主要特點如名稱所述，既有支援 64 位通用暫存器、64 位整數及邏輯運算、以及 64 位虛擬位址，設計人員又為架構作出不少改進，部份重大改變如下： 新增暫存器 地址闊度加長 SSE2、SSE3 指令 NX 位元：AMD64 其中一個特色是擁有「禁止執行」（NoExecute）的位元，可在一定程度上防止蠕蟲病毒以緩衝區溢位的方式來進行攻擊。 市場分析 AMD64 代表 AMD 放棄了跟隨 Intel 標準的一貫作風，選擇了像把 16 位的 Intel 8086 擴充成 32 位的 80386 般，去把 x86 架構擴充成 64 位版本，且相容原有標準，沒想到比 Intel 自己發表的 64 位元架構還要被認同。因為 AMD64 架構在 IA32 上新增了 64 位暫存器，並相容早期的 16 位和 32 位軟體，可使現有以 x86 為物件的編譯器容易轉為 AMD64 版本。除此之外，NX bit 也是引人注目的特色之一。 不少人認為，像 DEC Alpha 般的 64 位 RISC 晶片，最終會取代現有過時及多變的 x86 架構。但事實上，為 x86 系統而設的應用軟體實在太龐大，成為 Alpha 不能取代 x86 的主要原因，AMD64 能有效地把 x86 架構移至 64 位的環境，並且能相容原有的 x86 應用程式，顯然得到了多數開發者的歡迎。 Intel 64 Intel 64 指令集被應用於 Pentium 4、Pentium D、Pentium Extreme Edition、Celeron、Xeon、Pentium DualCore、Intel Core 2、Intel Core i3、Intel Core i5、Intel Core i7 及 Intel Core i9 處理器上。 概要 Intel 64 計劃的歷史可謂相當長及複雜，其原因主要是因為 Intel 自身的內政問題。該計劃開始時，其代號為「Yamhill」，不過 Intel 一直對外宣稱其計劃不存在；至 2004 年初，Intel 才改口承認，並把代號改為 CT（Clackamas Technology）。在宣佈 CT 計劃的數個星期內，Intel 為計劃給予多個新名稱。在 2004 年春季的 Intel 開發者論壇後，Intel 將之命名為「IA32E」，意即 IA32 的延伸；在數星期後，才改稱為 EM64T。 Intel 曾長時間把該計劃保持機密，其原因有以下兩點。第一，Intel 不想給客戶混淆資訊，把未來 Itanium IA64 處理器的展望與 x86 混為一談；但在 Intel 眼見使用 AMD64 的 Opteron 及 Athlon 64 取得成功，便需要對競爭者的威脅作出迎擊。而第二個原因，是 Intel 為了自身的面子，必然不會承認使用了對手 AMD 的技術，因此 Intel 把該技術以 EM64T 這個名字來推出，雖然核心與 AMD64 幾乎相同，猶如一對孿生兄弟，但如果 Intel 使用了 AMD64 這名字，等於在幫對手做廣告宣傳。在以往 Intel 的行銷中，Intel 總把 AMD 的產品貶為自家技術的仿製品；不過這回 AMD 率先開發民用 64 位元技術，Intel 需要反過來吸納 AMD 的技術，使 Intel 在研發 x86 處理器技術的領導地位受到重挫，因此 Intel 在造勢方面便需要使用更多的人力物力。Intel 主席之後也承認，在保密方面，這個機密算是保護得最差的。 在 Intel 64（EM64T）的檔案中，對於其指令集的起源隻字不提；因此有媒體為它起了「iAMD64」這個別名，諷刺 Intel 在迎擊 AMD 的民用 64 位元技術上，使用了 AMD 的技術，直接把 AMD64 吸納過來，並以新名重新包裝使用。後來 Intel 索性將此技術正式命名為 Intel 64。 架構特色 Intel 64 可使處理器直接存取超過 4GB 的記憶體，容許執行更大的應用程式。而 x8664 架構也加入了額外的暫存器及其他改良在指令集上。透過 64 位的記憶體位址上限，其理論記憶體大小上限達 16777216TB（16EB），不過在初期的應用上並未能支援完整的 64 位地址。 Intel 在之前已在 Itanium 處理器上使用了自家的 64 位 IA64 技術，雖然說 Intel 64 也是 64 位元，但兩者並不相容，即 IA64 的軟體不能直接在 Intel 64 上執行。Intel 64 所用的 x8664 是 IA32 指令集的延伸，而 IA64 則是另一款獨立的架構，沒有任何 IA32 的影子。雖然 IA64 可透過模擬來執行 IA32 的指令，但指令在執行前需經轉換，才能在 IA64 上執行，導致其速度變慢。由於 x8664 是從 IA32 衍生而來，因此執行 IA32 與 64 位程式的表現也顯得綽綽有餘。 首顆使用 Intel 64 技術的處理器屬於 Xeon 型號，支援雙處理器，其核心名稱為 Nocona。由於 Xeon 是直接建基於桌上型 Pentium 4 的架構上，因此 Pentium 4 主機板也可使用 Intel 64，如使用超執行緒（HyperThreading）等。不過 Intel 64 在初期的 Prescott 版本尚未啟用，其原因大概是當時其尚未完善。在使用 Prescott 核心 E0 更新版本的 Pentium 4 處理器已可使用 Intel 64，被稱為 Pentium 4 F。再者，E0 更新版本加入了「禁止執行」位元，稱為 XD bit（eXecute Disable），相當於 AMD64 的 NX bit。 VIA x8664 VIA 在 Centaur 研發部門五年的研發後，釋出了其第一款 x8664 改進架構，微架構研發代號 Isaiah 而 64 位微架構於 2008 年 1 月 24 日首次展示，並在 5 月 29 日以 VIA Nano 品牌釋出產品。 該處理器支援一類 VIA 專為提高低功率應用情景下的效率而研發的 x86 擴充套件指令集。 Isaiah 微架構預計與前一代架構 Esther 相比，同時鍾頻率下，在整數運算表現上會有兩倍提效能提升升， 浮點運算上會有四倍效能提升。而在功耗上，處理器 TDP 設定為 5 W 到 25 W。 此外，對於前代產品 VIA C7 系列尚不支援的 x86 虛擬化技術，該架構也作了支援，同時也保留了加密擴充套件。 虛擬地址空間的細節 儘管虛擬地址有 64 位的寬度，但 zhcn 目前；zhhans 當前；zhtw 目前 的實現機制（以及任何已知處在計劃階段的晶片）並不允許整個 16EB 的虛擬地址空間都被使用。大多數的 zhhans 作業系統；zhtw 作業系統 和應用程式在可見的未來都用不到如此巨大的地址空間（比如，Windows 在 AMD64 上的實現僅應用了 256TB，即 48 位的寬度），所以實現如此巨大的地址寬度只會增加系統的複雜度和地址轉換的成本，帶不來任何好處。AMD 因此決定，在對這一架構的首次實現中，只 有虛擬地址的最低 48 位才會在地址轉換（頁表查詢）時被使用。但是，任何虛擬地址的 48 位至 63 位必須與 47 位一致（按照符號位擴充套件的方式），否則處理器將會報告一個異常。符合這一規則的地址被稱作 傳統格式。傳統格式將從 0 至 00007FFFFFFFFFFF，以及從 FFFF800000000000 至 FFFFFFFFFFFFFFFF 總計 256TB 的地址範圍作為可以使用的虛擬地址空間。 這種 古怪 的規則為日後擴充套件到真正的 64 位定址保留了一個重要的特性：很多的 zhhans 作業系統；zhtw 作業系統（包括但不限於 Windows NT 系列）將地址空間的高半部分（被稱作核心空間）留給自己，將低半部分（使用者空間）留給應用程式程式碼、使用者態棧、堆和其他資料區。這種 傳統地址 的設計保證了每一個符合 AMD64 的實現都擁有兩個記憶體片段：低半段從 0000000000000000 開始，隨著更多的虛擬地址位元變得可用而 向上生長；高半部分被 懸掛 在地址空間的頂部而 向下生長。同樣，將未被使用的地址位元內容固定下來防止被 zhhans 作業系統；zhtw 作業系統 用作標誌位、特權級標號等其他用途，是為了避免當架構擴充套件至 52 56 60 和 64 位的時候出現問題。 zhcn 目前；zhhans 當前；zhtw 目前48 位的實現方式 57 位的實現方式 完全 64 位的實現方式 （非按比例繪製） （非按比例繪製） （非按比例繪製） 64 位定址模式（長模式），是物理地址擴充套件（PAE）的超集；因此，zhcn 記憶體頁；zhhans 記憶體頁；zhtw 記憶體分頁 大小可以是 4KB，2MB，或 1GB。但是，與系統在 PAE 模式下使用的三級分頁表機制不同，長模式下系統使用四級分頁表：PAE 的頁目錄指標表的表項從 4 個擴充套件到了 512 個，而且附加了一個第四級頁面對映表（PageMap Level 4 Table，PML4 Table），包含 512 個採用 48 位實現的表項。整個 48 位地址空間的 4KB 頁面完整對映層級將會佔據略多於 512GB 的 zhhans 記憶體；zhtw 記憶體（256TB 虛擬地址空間的 0196）。在提供更大虛擬地址的實現中，這個表被一個更高的對映層級所對映，即第五級頁面對映表（PML5），可以提供 52 位物理地址（4PiB）和 57 位虛擬地址（128PiB）的實現。 執行模式 x8664 主要有兩種執行模式：長模式和遺留模式。 執行模式 執行模式 作業系統要求 執行程式碼型別 長度（位元組） 長度（位元組） 暫存器堆數 模式 子模式 作業系統要求 執行程式碼型別 地址 運算元 暫存器堆數 長模式 64 位模式 64 位作業系統、64 位 UEFI 韌體 長模式 64 8 16 32 64 16 長模式 相容模式 Bootloader 或 64 位作業系統 保護模式 32 8 16 32 8 長模式 相容模式 Bootloader 或 64 位作業系統 保護模式 16 8 16 32 8 遺留模式 保護模式 Bootloader、32 位作業系統、32 位 UEFI 韌體 保護模式 32 8 16 32 8 遺留模式 保護模式 16 位保護模式作業系統 保護模式 16 8 16 32 8 遺留模式 虛擬 8086 模式 16 位保護模式或 32 位作業系統 真真實模式的子集 16 8 16 32 8 遺留模式 Bootloader、真真實模式作業系統 真真實模式 16 20 32 8 16 32 8 遺留模式 真真實模式 Bootloader、真真實模式作業系統 真真實模式 16 20 21 8 16 32 8 作業系統支援 以下作業系統均支援長模式（long mode）的 x8664 架構。 DOS 在 DOS 環境下可透過 DOS Extender（例如 DOS4GW）來進入保護模式。 FreeBSD FreeBSD 在 51 正式版曾為 x8664 作試驗，至 60 正式版解決了在 x8664 執行 32 位程式出現的一些問題，以及能支援不少驅動程式。 Linux Linux 在 26 版本的核心開始加入長模式，支援 x8664，能相容 32 位程式及模擬 32 位系統，容許在 32 位的環境下，把程式編譯為 64 位版本。 macOS Mac OS X 106 Snow Leopard 開始提供 64 位核心，並可以在部分處理器上開啟 64 位核心。64 位核心只支援 64 位的核心擴充套件，反之亦然；但對於普通應用程式，無論 32 位或 64 位核心均可以支援兩種位寬的應用程式，但 32 位程式只能使用 4GB 的記憶體空間 。 Mac OS X 105 Leopard 在 Intel 與 PowerPC 上提供對 Cocoa Quartz OpenGL 與 X11 的 GUI 程式的 64 位支援，並支援全部的命令列庫和程式。但核心仍只有 32 位版本。 Mac OS X 使用通用二進位制檔案格式將 32 位和 64 位程式和庫程式碼包裝在同一檔案中，在載入時自動選擇最合適的版本。在 Mac OS X 106 中，核心和核心擴充套件也使用通用二進位制格式以同時支援兩種構架。 蘋果公司於 2018 年 4 月起，在 macOS High Sierra 作業系統內執行 32 位元應用程式時，會提醒訊息。並已在 2018 年 6 月的 WWDC 上宣佈 macOS Mojave 將是最後一版支援 32 位元應用程式的 macOS。 MenuetOS x8664 版本的 MenuetOS 系統於 2005 年 6 月推出，雖然原有的 32 位版本 Menuet 以 GPL 授權，但 x8664 版本則維持專屬，並以免費軟體方式釋出，以及提供部分元件的原始碼。 NetBSD x8664 版本的 NetBSD 最早於 2001 年 6 月 19 日被提出，至 2004 年 12 月 9 日推出的 NetBSD 20 已能完全支援 x8664。 OpenBSD OpenBSD 自 2004 年 5 月 1 日推出的 35 版起，已支援 x8664。 Solaris 昇陽的 Solaris 自版本 10 開始已支援 x8664。 Windows 供使用者端使用的 Windows XP Professional x64 Edition 以及供伺服器使用的 Windows Server 2003 x64 Edition 均已於 2005 年 3 月推出。Windows Vista、Windows Server 2008、Windows Server 2012、Windows Server 2012 R2、Windows Server 2016、Windows Server 2019、Windows 7、Windows 8、Windows 81 以及 Windows 10 均有對應的 64 位版本。從 Windows Server 2008 R2 開始的 Windows Server 作業系統只提供 64 位版本，從 Windows 11 開始的面向消費者的 Windows 作業系統只提供 64 位版本。 業界稱謂慣例 由於 AMD64 和 Intel64 基本上一致，很多軟硬體產品都使用一種不傾向任何一方的詞彙來表明它們對兩種架構的同時相容。出於這個目的，AMD 對這種 CPU 架構的原始稱呼 x8664 被不時地使用，還有變體 x86_64。其他公司如微軟和昇陽電腦在營銷資料中使用 x64 作為對 x8664 的縮寫。 許多作業系統及產品，尤其那些是在 Intel 進入這塊市場之前就引入 x8664 支援的，使用 AMD64 或 amd64 同時指代 AMD64 和 Intel64。 BSD 系統（如 FreeBSD、NetBSD 和 OpenBSD）和一些 Linux 發行版（如 Debian、Ubuntu、和 Gentoo）將 AMD64 和 Intel64 都稱作 amd64。Red Hat 的 RPM 將 x8664 稱為 x86_64 或 x8664，將 32 位元的 IA32 稱為 i86（ 為數字 36，比如 i386）。Arch Linux 將 x8664 稱為 x86_64。 Fedora PackageKit 稱 64 位架構為 x86_64。 Java Development Kit（JDK）：包含 x8664 檔案的目錄命名為 amd64。 Mac OS X：終端下的命令 arch 以及開發人員文件都表明蘋果稱 64 位架構為 x86_64。 Microsoft Windows：稱在 IA32 處理器上使用 64 位技術為 x64，但一些相關目錄使用 AMD64 來標明。例如，Windows x64 版安裝 CD 上的系統目錄命名為 AMD64，而 32 位版本上用 i386。 Solaris：作業系統的命令 isalist 將 AMD64 和 Intel64 都定義成 amd64。 應用產品 以下處理器產品使用了 x8664 技術，截至 2018 年 9 月，幾乎等同於市場上所有消費級產品皆使用 x8664 技術。 AMD K8 AMD64 微處理器架構 AMD Athlon 64 AMD Athlon 64 X2 AMD Athlon 64 FX AMD Opteron AMD Turion 64 AMD Sempron（限使用 E6 步進以後的 Palermo、全數 Manila 型號和全數 Sparta 型號） AMD K10 微處理器架構 AMD Phenom AMD Athlon AMD Sempron AMD 推土機微處理器架構 AMD FXSeries AMD Fusion APU AMD Bobcat 微處理器架構的 CPU 核心 AMD Ontario AMD Zacate AMD K10 微處理器架構的 CPU 核心 AMD Llano AMD Ryzen Intel NetBurst Intel 64 Intel Xeon（自 Nocona 起的部分型號） Celeron D（自 Prescott 起的部分型號） Pentium 4（自 Prescott 起的部分型號） Pentium D Pentium Extreme Edition Intel Core 微處理器架構 Intel Xeon Woodcrest Intel Core 2 Intel Pentium DualCore Intel Celeron Intel Nehalem 微處理器架構 Intel Xeon Intel Core i7 Intel Core i5 Intel Core i3 Intel Pentium Intel Celeron Intel Sandy Bridge 微處理器架構 Intel Xeon Intel Core i7 Intel Core i5 Intel Core i3 Intel Pentium Intel Celeron Intel Ivy Bridge 微處理器架構 Intel Xeon Intel Core i7 Intel Core i5 Intel Core i3 Intel Pentium Intel Celeron Intel Haswell 微處理器架構 Intel Xeon Intel Core i7 Intel Core i5 Intel Core i3 Intel Pentium Intel Celeron Intel Broadwell 微處理器架構 Intel Xeon Intel Core i7 Intel Core i5 Intel Core i3 Intel Skylake 微處理器架構 Intel Xeon Intel Core i9 Intel Core i7 Intel Core i5 Intel Core i3 Intel Pentium Intel Celeron Intel Kaby Lake 微處理器架構 Intel Xeon Intel Core i9 Intel Core i7 Intel Core i5 Intel Core i3 Intel Pentium Intel Celeron Intel Coffee Lake 微處理器架構 Intel Xeon Intel Core i9 Intel Core i7 Intel Core i5 Intel Core i3 Intel Pentium Intel Celeron Intel Atom 部分 VIA 兆芯 VIA Nano ZXC 系列 ZXC 系列 KX5000 系列 KX6000 系列 KH20000 系列 KH30000 系列 參考文獻 參見 NX bit AMD K8 AMD K10（由於 K9 在英語發音上不好聽（Canine，狗類），因此 AMD 在 K8 代號後，直接使用 K10 為代號） IA64 x86 x86s 外部連結 AMD Developer Guides Manuals Intel 64 and IA32 Architectures Software Developer Manuals CategoryX86 架構 Category 微處理器 Category 電腦架構