博客 / 詳情

返回

x86 架構的簡單介紹

x86 架構的簡單介紹

一、目前常見的 CPU 架構

目前主流的 CPU 架構主要分為兩個陣營:以 x86 為核心的複雜指令集架構(CISC),以及以 ARM 和 RISC-V 為代表的精簡指令集架構(RISC)。其中,x86 架構長期以來主導着桌面和服務器市場,代表廠商包括 Intel 與 AMD,其特點是指令集複雜、兼容性強、單核性能高,適合處理需要強大通用計算能力的場景。而 ARM 架構和新興的 RISC-V 架構則以低功耗、高能效比、架構簡潔為主要優勢,廣泛應用於移動終端、物聯網及嵌入式設備領域。ARM 生態成熟、授權模式靈活;RISC-V 則憑藉開源、可定製、免授權費等特性迅速崛起,吸引了眾多芯片廠商和研究機構的關注。經過多年的發展,這兩大陣營正在逐步向對方領域靠攏:x86 架構在能耗比和移動端優化方面持續改進,如 Intel 的低功耗系列處理器(Atom、Core Ultra)與 AMD 的高能效設計。ARM 架構則不斷提升高性能計算能力,已推出針對桌面和服務器市場的處理器,例如 Apple M 系列芯片、Ampere Altra、以及 華為鯤鵬(Kunpeng)服務器處理器等。同時,RISC-V 也開始探索高性能通用計算方向,出現瞭如 SiFive Performance 系列和 Alibaba 平頭哥玄鐵等高端內核。

此外還有經典的基於 RSIC 的 MIPS 架構,目前已開始轉向 RISC-V。由 IBM 主導的基於 RISC 的 Power 架構,用於大型機和高性能計算,包括用於桌面電腦的 PowerPC 和用於服務器的 POWER 系列。

架構 類型 代表廠商 主要領域 優勢 劣勢
x86 CISC Intel、AMD 桌面、服務器 性能強、兼容性好 功耗高
ARM RISC Apple、華為、高通 移動、嵌入式 低功耗、生態成熟 授權依賴
RISC-V RISC SiFive、平頭哥 嵌入式、AI、科研 開源靈活、潛力大 生態未完善
MIPS RISC Wave Computing 網絡設備(舊) 設計簡潔 市場衰退
Power RISC IBM 高性能計算 吞吐量強 成本高、生態小

1.1 x86 架構

x86 是個人計算機歷史上最經典、最成功的 CPU 架構之一。從最早的 8086 到如今的 Core、Ryzen,它經歷了 40 多年的發展,形成了龐大的生態體系。幾乎所有的桌面操作系統(如 Windows、Linux、macOS 的早期版本)都對 x86 有深度優化。

核心特點:

  • 複雜指令集(CISC):支持大量指令,功能強大但硬件實現複雜。
  • 高性能:得益於超標量、亂序執行、分支預測等技術,單核性能長期領先。
  • 功耗高:相比 RISC 架構,功耗與發熱較大,不適合移動端。
  • 兼容性強:支持大量指令,功能強大但硬件實現複雜。

x86 的應用領域包括桌面電腦、服務器、數據中心、高性能工作站,並且逐漸朝着高能效的方向演進,比如 Intel Core Ultra、AMD Zen 5。

1.2 ARM 架構

核心特點:

  • 精簡指令集計算 (RISC) 架構: 指令集簡單,設計緊湊高效。
  • 低功耗和高能效: 這是其最大的優勢,非常適合電池供電的設備。
  • 授權模式: ARM公司不生產芯片,而是設計架構和指令集,然後授權給各大芯片製造商進行二次開發和製造。
  • 生態:Android、iOS、Linux 等系統都有良好支持。

ARM 的主要應用領域包括智能手機、平板電腦、智能電視、汽車電子、路由器、嵌入式設備等。其正在進軍高性能計算領域。Apple M 系列、華為鯤鵬、Ampere Altra 等產品已進入桌面和服務器市場,挑戰 x86 的地位。

1.3 RISC-V 架構

RISC-V 是一種完全開源的指令集架構,任何公司或個人都可以免費使用和修改。由於其開源的特點,很多想要自主設計芯片的公司基於此研究自己的處理器架構,比如由 RISC-V 轉變為自研架構的龍芯。

核心特點:

  • 開源、免費:無專利費,無需授權。
  • 精簡指令集
  • 可擴展、可定製:適合科研、AI、IoT 等多種場景。
  • 生態仍在成長:開發工具、編譯器、操作系統支持正在逐步完善。
  • 潛力巨大:中國、歐洲、印度等國家正在積極推動 RISC-V 產業化。

RISC-V 的應用領域包括物聯網、微控制器、嵌入式系統、AI 加速器、高性能通用計算等等,被視為去美化、去授權依賴的關鍵路線之一,未來可能成為全球芯片生態的重要支柱。

二、x86 架構的組成

在介紹 x86 架構前,我們先明確核心前提 —— 指令集的概念。指令集(ISA,Instruction Set Architecture)是處理器架構的基礎核心,它定義了 CPU 能夠識別和執行的代碼規範。所有高級語言編寫的程序,最終都必須通過編譯轉化為機器碼,而這些機器碼正是指令集的具體落地形式。從硬件的角度看,處理器必須根據 ISA 的定義來構建其內部邏輯電路,以確保能正確解析和執行這些指令。指令集具有架構排他性,比如為 ARM 架構編譯的可執行文件,其包含的機器指令無法被 x86 處理器識別和運行。

指令集合彙編的關係。它們非常相關但不完全等同,是抽象與具體的關係。指令集是一個標準和架構。它定義了我們可以有哪些指令以及這些指令的功能是什麼。彙編指令是這種標準和架構的具體文本表示,是給人看的。它是根據指令集的規範,用助記符(比如 MOV, ADD, JMP)寫出來的代碼。每一條彙編指令都直接對應着一條指令集架構中定義的機器指令。當你用匯編器編譯彙編代碼時,它就會把這些助記符(如 ADD)翻譯成指令集規範所對應的二進制操作碼(如 00000011),也就是CPU真正能執行的機器碼。

指令集與微架構的關係。微架構是實現指令集的具體硬件電路。 指令集是目標,微架構是達成這個目標的手段。沒有微架構,指令集只是一紙空文;沒有指令集,微架構就不知道要執行什麼命令。一個指令集可以有多種微架構實現。Intel的Core i7 和 AMD 的 Ryzen 都執行 x86指令集,所以它們可以運行相同的Windows操作系統和軟件。但它們的內部設計(微架構)完全不同:Intel和AMD的緩存結構、流水線深度、分支預測算法、執行單元數量等都各有千秋。這就是為什麼同為x86 CPU,它們的性能和功耗卻不一樣。 在指令集基本不變的情況下,通過改進微架構(比如增加更多的執行單元、更好的分支預測、更大的緩存),可以讓CPU在同一個時鐘週期內處理更多的指令,從而大幅提升性能。

指令集的主要定義:

類別 説明 舉例
指令系統(Instruction Set) 定義 CPU 能執行的所有操作 加法、乘法、跳轉、加載/存儲等
寄存器集(Registers) 定義 CPU 內部可直接操作的高速存儲單元 EAX、RAX(x86);X0–X31(ARM)
數據類型(Data Types) 支持的數據格式 字節、字、雙字、浮點數、向量
尋址方式(Addressing Modes) 指定操作數的獲取方式 立即數、寄存器間接、基址+偏移
異常與中斷機制 定義錯誤處理、系統調用等機制 頁錯誤、除零錯誤、中斷向量表
內存模型(Memory Model) 定義程序的內存訪問與一致性規則 物理地址、虛擬地址、分頁機制

同樣採用 x86 架構的不同廠商的處理器一般指令集是兼容的,他們的處理器的區別主要是實現指令集的具體微架構的設計區別。比如同樣實現一個指令,不同廠商執行這個指令的硬件電路設計不同。這就引出了 x86 的整套體系:

  • 指令集架構(ISA):軟件層面定義的指令規則。
  • 微架構(Microarchitecture):硬件層面具體實現方式。
  • 擴展技術:如 SIMD[1](單指令處理多數據)、虛擬化、內存保護、超線程[2]等。

2.1 x86 架構的主要組成

層次 組成 功能
指令集層 指令系統、寄存器、尋址模式 軟件與硬件的接口
微架構層 取指、譯碼、執行、調度、預測 執行指令的實際邏輯
存儲層 緩存、MMU、總線 提供數據支撐
控制層 模式切換、異常處理、虛擬化 管理與調度 CPU 資源

2.1.1 指令集

ISA 是 x86 架構的靈魂,它定義了 CPU 可以理解和執行的所有指令、寄存器種類、尋址模式、異常機制等。x86 的 ISA 發展經歷了多個階段:

  • x86(16位):8086~80286 時代。
  • IA-32(32位):80386 開始,廣泛用於早期 PC。
  • x86-64(64位):由 AMD 首先推出(AMD64),支持 64 位尋址與寄存器擴展。
  • SIMD 擴展:MMX → SSE → AVX → AVX2 → AVX-512,大幅提升並行計算性能。
1. x86 指令集

這裏列舉一部分:

  • 數據傳送指令: MOV, PUSH, POP, LEA(取有效地址)。
  • 算術運算指令: ADD, SUB, MUL, DIV, INC, DEC。
  • 邏輯運算指令: AND, OR, XOR, NOT, SHL(左移), SHR(右移)。
  • 控制轉移指令: JMP(無條件跳轉), CALL / RET(函數調用/返回), Jcc(條件跳轉,如JZ, JNE)。
  • 字符串操作指令: MOVS, CMPS, SCAS(與REP前綴配合使用)。
  • 系統指令: 用於操作系統,如INT(觸發中斷), IRET(從中斷返回), LGDT(加載全局描述符表), CPUID(獲取CPU信息)。
2. x86 寄存器組
  • 通用寄存器:用於算術運算、邏輯運算、內存尋址等。某些寄存器有特殊用途,如ECX常用於循環計數,ESP始終指向棧頂。
    • 32位: EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP。
    • 64位:在32位基礎上擴展為RAX, RBX, RCX, RDX, RSI, RDI, RSP, RBP,並新增了R8到R15。
  • 段寄存器:在實模式和保護模式的早期,用於內存分段管理。在現代64位模式下,它們的意義不大,通常被設置為0。
    • CS(代碼段), DS(數據段), SS(堆棧段), ES, FS, GS(附加數據段)。
  • 指令指針:存放下一條要執行的指令的內存地址。CPU就是通過改變它來實現跳轉和函數調用。
    • EIP(32位) / RIP(64位)
  • 標誌寄存器:存儲CPU運算後的狀態和控制標誌。
    • EFLAGS(32位) / RFLAGS(64位)
  • 控制寄存器:控制CPU的操作模式(如開啓分頁、保護模式)。只有操作系統內核能訪問。比如CR0 包含系統控制標誌,如保護模式使能位(PE)、分頁使能位(PG)。頁目錄基址寄存器 CR3,存放當前進程頁表的物理地址,是 MMU 的核心。
    • CR0, CR1, CR2, CR3, CR4...

2.1.2 微架構

微架構是 實現 ISA 的硬件邏輯設計。不同 CPU(如 Intel Core i9、AMD Ryzen 9)雖然都屬於 x86 指令集,但它們的微架構不同(比如 Intel 的 Alder Lake、AMD 的 Zen 5)。微架構的主要組成部分包括:

  1. 取指單元(Fetch Unit)

    負責從緩存或內存中讀取即將執行的指令,並預先存入指令隊列。現代 CPU 通常具備 分支預測器(Branch Predictor),提前預測跳轉結果以減少流水線停頓。

  2. 譯碼單元(Decode Unit)

    將複雜的 x86 指令翻譯成更簡單的 微操作(Micro-ops 或 µops)。內部的執行單元通常是以類似 RISC 風格的微操作執行的。

  3. 調度與執行單元(Execution Engine)

    將譯碼後的微操作交由不同的功能單元執行:ALU(算術邏輯單元),負責整數運算。FPU(浮點單元),負責浮點計算。SIMD/AVX 單元,負責並行向量計算。Load/Store 單元,負責數據讀寫。支持亂序執行[3](Out-of-Order Execution)與超標量[4](Superscalar)技術。

    亂序執行是現代 CPU 性能的關鍵。x86 亂序執行的一些關鍵點:寄存器重命名,解決指令間的假數據依賴,讓更多指令可以並行執行;保留站,微操作在這裏等待他們所需的操作數就緒;調度器,監視保留站,一旦某個微操作的操作數就緒,就把它分派給一個空閒的執行單元,不嚴格按照原始程序順序,從而實現“亂序執行”。

2.1.3 存儲與緩存層次(Memory Hierarchy)

x86 處理器採用多級緩存結構來解決 CPU 與內存速度差異,這一點基本所有架構是一致的:

  • L1 緩存:分為指令緩存與數據緩存,速度最快。
  • L2 緩存:容量更大,訪問稍慢。
  • L3 緩存:多個核心共享,提升整體數據吞吐。
  • 主存(DRAM):由內存控制器訪問。
  • 內存管理單元 MMU:集成在CPU內,負責將程序使用的虛擬地址通過查詢頁錶轉換為物理地址。

2.1.4 控制單元與系統管理

  • 實模式(Real Mode):16 位尋址,兼容早期 DOS。
  • 保護模式(Protected Mode):支持多任務與內存保護。
  • 長模式(Long Mode):64 位尋址。
  • 系統管理模式(SMM):用於硬件級控制(如電源管理)。
  • 虛擬化擴展:Intel VT-x、AMD-V 支持虛擬機運行。

附錄

x86 指令集的發展

  1. x86 (16位)。始於Intel 8086/8088處理器。16位寄存器(AX, BX, CX...),1MB內存尋址空間,使用分段內存模型。
  2. x86-32 / IA-32。由 80386 處理器引入。擴展到32位寄存器(EAX, EBX, ECX...)。引入保護模式,支持虛擬內存、內存保護和多任務。尋址空間擴展到 4GB。這是現代操作系統(如Windows XP, Linux)真正興起的基礎。
  3. x86-64 / AMD64 / Intel 64。由 AMD 首先設計並推廣,後來被Intel採納。寄存器擴展到64位(RAX, RBX...),並新增了8個通用寄存器(R8-R15)。尋址空間理論上達到2^64字節,實際上目前是 48 位或 57 位。幾乎完全向後兼容 32 位代碼。這是我們現在使用的桌面、服務器 CPU 的基準指令集。
  4. MMX。Pentium MMX處理器,目的是加速多媒體處理(如圖像、音頻),使用80x87浮點寄存器的尾數部分,定義了8個64位寄存器(MM0-MM7),進行單指令多數據 SIMD操作,即一條指令可以同時處理多個小位寬的數據(如8個8位像素)。
  5. SSE。Pentium III處理器引入,為了解決MMX的一些缺陷,並提升浮點性能。引入了獨立的128位寄存器(XMM0-XMM7),後來增加到16個(XMM0-XMM15)。支持單精度浮點數的 SIMD 操作。SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 是一系列連續的擴展,功能不斷增強,例如SSE2加入了雙精度浮點數和整數的SIMD操作。
  6. AVX。Sandy Bridge架構(Intel)和 Bulldozer架構(AMD)。進一步擴展了 SIMD 能力。將寄存器寬度從128位擴展到256位(YMM0-YMM15)。引入了新的三操作數指令格式,更靈活。AVX, AVX2, AVX-512 是更強大的擴展。其中AVX-512將寄存器進一步擴展到512位(ZMM0-ZMM31),並引入了掩碼寄存器等強大功能,主要用於高性能計算和服務器領域。

什麼是 SIMD

x86的SIMD技術經歷了以下幾個主要階段,其核心是寄存器寬度功能的不斷擴展:

技術 引入時間 寄存器寬度 典型數據容量 特點
MMX 1997 64位 8個8位整數 / 4個16位整數 使用浮點寄存器,主要處理整數
SSE 1999 128位 (XMM) 4個32位單精度浮點數 革命性,引入獨立寄存器,支持浮點
SSE2/3/4 2000s 128位 2個64位雙精度浮點數 / 16個8位整數 功能不斷增強和完善
AVX 2011 256位 (YMM) 8個32位單精度浮點數 更寬的寄存器,新指令格式
AVX-512 2013 512位 (ZMM) 16個32位單精度浮點數 極度強大,主要用於服務器/HPC

在傳統的標量運算中,如果你要對兩個數組進行加法運算:

for (int i = 0; i < 4; i++) {
    c[i] = a[i] + b[i];
}

CPU需要執行大致需要執行4條加法指令:

  1. a[0]b[0],相加,結果存入 c[0]
  2. a[1]b[1],相加,結果存入 c[1]
  3. a[2]b[2],相加,結果存入 c[2]
  4. a[3]b[3],相加,結果存入 c[3]

而在SIMD模式下,假設我們有一個128位的SIMD寄存器:

  1. 我們可以將 a[0]a[3] 這4個32位整數,一次性打包加載到一個128位的SIMD寄存器中。
  2. 同樣,將 b[0]b[3] 也打包加載到另一個SIMD寄存器中。
  3. 然後,執行一條SIMD加法指令,這條指令會同時將 a[0]+b[0], a[1]+b[1], a[2]+b[2], a[3]+b[3] 這4個加法計算一次性完成。
  4. 最後,將結果一次性存回內存的 c[0]c[3]

只執行了1條加法指令。

SIMD是一種通過一條指令同時處理多個數據的並行計算技術。它是現代CPU提升數據吞吐量、實現高性能計算的最關鍵手段之一。 當你聽到 SSE、AVX 這些術語時,它們就是 x86 平台上 SIMD 指令集的具體實現。編譯器(如GCC、Clang、MSVC)通常可以自動將合適的循環代碼向量化,生成SIMD指令,而程序員也可以使用內置函數來手動編寫高性能的SIMD代碼。

註釋


Steady Progress!


  1. SIMD/AVX 向量化並行處理數據,提高多媒體性能 ↩︎

  2. 超線程指單核心同時處理多線程任務 ↩︎

  3. 亂序執行可以提前執行不相關的指令,以提高程序執行效率 ↩︎

  4. 超標量執行指每個週期執行多條指令 ↩︎

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.