跳轉到

1978 - Intel 8086(x86 架構的誕生)#

案件摘要#

1978 年 6 月 8 日,Intel 發布 8086——16-bit 微處理器,採用新設計的 x86 指令集:

\[ 16\ \text{bit 資料匯流排} \quad 20\ \text{bit 位址} \quad 1\ \text{ MB 記憶體} \quad \text{5\ MHz} \quad \text{約 } 29{,}000 \ \text{電晶體}. \]

四十六年後(2024),Intel Core i9 仍是 x86-64——向下相容的指令集,跨 46 年不變:

\[ \text{8086} \to 80286 \to 386 \to 486 \to Pentium \to \text{Core} \to \text{x86-64} \quad\Longrightarrow\quad \text{PC 帝國}. \]

8086 建立了「ISA 恆久性 > 製程先進性」的產業邏輯: 每一次製程升級(16→32→64 bit)都必須保持對舊程式的相容——這既是最偉大的工程成就, 也是最大的技術負債(見「1981-CISC與RISC之戰.md」)。

前因 -- 為什麼會有這個案子#

  • 8080 時代的教訓(1974–1977):
  • Intel 8080(1974):8-bit 機器,由外部工程師設計(Intel 收購設計,製造晶片)。
    • 弱點:只有 16-bit 位址(64 KB 記憶體)、8 個暫存器、記憶體需「頁」切換。
  • 8085(1976):改進但仍是 8-bit。
  • 16-bit 的必然性(1977):純 8-bit 架構已到頂:
  • 記憶體 64 KB 遠不足以執行大型程式(如 CP/M、多工);
  • 資料運算需經常分兩段(16-bit 高/低),效率低;
  • 第一片 16-bit 微處理器是 Datapoint 的 Zilog Z80(1976),但 8086 更快更好且擴展性更強。
  • 8086 的偵探直覺(相容性哲學): Intel 團隊(Stephen Morse 領導,Stephen Morse 為 8086 首席設計師)的核心決定:

    「向下相容」是電腦工業的道德責任——使用者已投資的軟體投資不能作廢。 8086 設計成 「16-bit 位址空間,但可用段(segment)機制擴展到 1 MB」:

\[ 20\ \text{bit 實體位址} = 16\ \text{bit 段(segment)} \times 16 + 16\ \text{bit 偏移(offset)}. \]

段:偏移(segment:offset) 正是 8086 的位址架構—— 這讓 8086 在只有 1 MB 記憶體的時代(1978,1 MB 是奢侈)依然設計了 20-bit 位址空間—— 前瞻性的關鍵設計。

線索與推理 -- 數學式、程式、理論#

第一條線索:段:偏移位址系統(8086 的核心創新)#

8086 的 20-bit 位址由兩個 16-bit 值合成:

\[ \text{物理位址} = \underbrace{\text{Segment} \times 16}_{\text{段基址}} + \underbrace{\text{Offset}}_{\text{偏移}}\quad (\in [0,\ 2^{20}-1]). \]
  • 例如 1234:0010 → 物理位址 \(0x12340 + 0x10 = 0x12350\) ( \(829,520\) )。
  • 段:偏移的靈活性:同一段基址 + 多個偏移 → 陣列、堆疊、程式碼段的組織。
  • 代價:分段帶來複雜性(8086 的分段 bug 是 DOS 時代的著名問題)→ 386 引入平坦模式(flat mode)。

第二條線索:8086 指令集(CISC 的誕生)#

8086 有 92 條基本指令,CISC(複雜指令集電腦)特徵: - 變長指令(1–6 bytes) - 記憶體到記憶體運算(如 MOV [BX], [SI]) - 複雜定址模式: \(\text{EA} = \text{Base} + \text{Index} \times \text{Scale} + \text{Displacement}\) 7 種定址模式支援記憶體直接/間接/索引/相對定址——通用但複雜。

第三條線索:IBM PC 的確定性(1981)與指令集壟斷#

IBM 於 1981 年選定 Intel 8088(8086 的 8-bit 匯流排版本)作為 IBM PC 的 CPU:

\[ \text{IBM PC(1981)} \xrightarrow{\text{IBM PC/XT}} \xrightarrow{\text{AT(1984,80286)}} \xrightarrow{\text{386/486}} \xrightarrow{\text{Pentium}} \xrightarrow{\text{x86-64}}. \]

指令集的不可逆性(Irreversibility): - 一旦軟體生態(DOS、Windows、Office、資料庫)在 8086 上建立, 後續 CPU 必須支援 8086 指令 → 每一代 CPU 都要硬體實現 8086 的語義—— 導致 CPU 的複雜度隨代數累積(CISC 現代 CPU 如 Skylake 有數千個內部微碼條目)。

Python:段:偏移位址計算與 CISC/MOV 語義#

def physical_address(segment, offset):
    """8086 段:偏移 → 20-bit 物理位址"""
    addr = (segment << 4) + offset
    return addr & 0xFFFFF          # 20-bit 遮罩

# 示範:常見 DOS 位址
print("DS=1000h, BX=0201h →", hex(physical_address(0x1000, 0x0201)))
print("CS=0F00h, IP=0100h →", hex(physical_address(0x0F00, 0x0100)))
print("SS=1000h, SP=FFFEh →", hex(physical_address(0x1000, 0xFFFE)))

# CISC MOV:記憶體到記憶體(8-bit 位址:[BX]=[0200h],[SI]=[0300h])
def mov8086_mem_to_mem(src_off, dst_off, mem):
    mem[dst_off] = mem[src_off]     # MOV [BX], [SI] 的寄存器間接模式
    return mem

mem = [0]*1024
mem[0x0200], mem[0x0300] = 0xAB, 0x00   # [0200]=ABh
mem = mov8086_mem_to_mem(0x0200, 0x0300, mem)
print(f"\nMOV [0200h],[0300h]: mem[0300]={hex(mem[0x0300])}")

# 定址模式 EA = Base + Index*Scale + Disp
def effective_address(base, index, scale, disp, mode="16bit"):
    if mode=="16bit":
        return (base + index + disp) & 0xFFFF
    else:
        return (base + index*scale + disp) & 0xFFFFFFFF

# MOV [BX+SI+10h], AL:EA = BX + SI + 0x10
print("MOV [BX+SI+10h], AL → EA =", hex(effective_address(0x1000, 0x0200, 1, 0x10, "16bit")))
輸出:
DS=1000h, BX=0201h → 0x10201
CS=0F00h, IP=0100h → 0xf100
SS=1000h, SP=FFFEh → 0x1fffe

MOV [0200h],[0300h]: mem[0300]=0xab

MOV [BX+SI+10h], AL → EA = 0x1210
(段:偏移位址計算與 CISC 定址模式——8086 的「通用性」代價是複雜的定址邏輯, 但正是這種複雜性支撐了 DOS/Windows 的移植性與 x86 生態。)

結案 -- 後果與影響#

  • IBM PC 標準(1981–):Intel 8088 + Microsoft MS-DOS + IBM PC 的組合 統治了 1980s–1990s 全球 PC 市場(x86 佔 90%+)——Wintel 聯盟的勝利。
  • 指令集的「向下相容」(Compatibility)承諾:
  • x86 架構的鐵律:任何新 CPU 都必須執行 8086 指令。
  • 代價:現代 x86-64 CPU 內含數千條 CISC 指令的解碼邏輯(複雜解碼器佔晶片面積 5–10%); 收益:數十年的軟體投資全部可延續——這是「ISA 護城河」。
  • x86-64 的擴張(2003–):AMD 於 2003 年推出 AMD64,Intel 於 2004 年推出 EM64T—— 64-bit 擴充 \(2^{32} \to 2^{64}\) 位址空間,同時完全相容 32-bit x86。
  • RISC 陣痛(1980s–1990s):RISC(1981,見「1981-CISC與RISC之戰.md」)在性能上超越 CISC, 但 CISC 藉「相容性護城河」戰勝——Apple/MIPS/ARM/RISC-V 只能在 新市場(行動、嵌入式)取勝。
  • 2020s 的轉折:Apple M1/M2/M3/M4(2020–2024)採 ARM 架構(RISC 血統)—— Apple 生態的 x86 依賴結束,Linux/Windows on ARM 亦加速——ISA 護城河首次被大規模突破。
  • 歷史定位:8086 是「指令集產業」的創始者——證明「ISA 是產業的護城河,比製程技術更持久」: 數十年後,每一顆 PC CPU(無論 Intel 或 AMD)都在執行 1978 年的指令。

關鍵人物與文獻#

  • S. Morse:8086 首席設計師 (1978)。
  • R. Noyce、G. Moore:Intel 領導層——決定 x86 策略。
  • V. Lomont:IBM PC 選定 8088 (1981);B. Gates:MS-DOS(鞏固 x86 生態)。
  • 相關案件:1971-Intel4004微處理器.md、1981-CISC與RISC之戰.md、1993-GPU圖形處理器.md、2007-多核心CPU.md。