"進化とは、後方互換の中に宿る妥協の連鎖である。"
x86はただの命令セットではない。
それは40年以上にわたって進化を続けながら、なお過去を捨てられない構造である。
この章では、x86アーキテクチャの3つの主要な動作モード:
- Real Mode(16bit)
- Protected Mode(32bit)
- Long Mode(64bit)
を軸に、その設計的背景・構造的断絶・互換性の継承について解剖する。
x86とは何だったのか。そして、なぜそれは未だに生きているのか。
Real Mode:裸の構造
8086における「デフォルト動作モード」であり、
x86における最初の命令体系が動作する世界。
特徴:
- 16ビットアドレス空間(最大64KBセグメント × 複数)
- メモリ保護なし、仮想化なし
- BIOSやブートローダが稼働する最低限の実行基盤
アドレスは「セグメント × 16 + オフセット」で決まる。
例:
mov ax, 0x1000
mov ds, ax
mov si, 0x0020
mov al, [ds:si] ; 実アドレスは 0x10020
この「16ビット × セグメント」というモデルが、後年に多大な影響を残す。
Protected Mode:構造の導入
Intel 80286(1982)から導入されたモード。
目的は明確:
- 複数のプログラムが安全に共存する構造を実現する
- メモリ管理とアクセス制御を可能にする
特徴:
- セグメントディスクリプタ(GDT/LDT)によるメモリ境界の明示
- ページング機構の導入(80386以降)
- 特権レベル(Ring 0〜3)による権限分離
- ハードウェアによる保護違反の検出
命令レベルでは変化は少ないが、実行時の文脈が大きく変わった。
OSカーネルは、このモード上で仮想アドレス空間を構築し、
**“1つのCPUで複数の世界を同時に走らせる”**という設計が可能となる。
仮想8086 Mode:過去の亡霊を召喚する技法
80386から導入。Protected Modeの中にReal Mode互換環境を埋め込む機構。
- 古いDOSプログラムをそのまま実行できる
- 実際には仮想化された保護された空間で動作
- 割り込みやI/O命令は、仮想化レイヤでトラップされ、処理される
→ これは、後方互換性という設計責任を、ハードウェアが引き受けた例である。
Long Mode:64bitという解放と再制約
AMDによって導入された x86-64(AMD64)は、
過去の互換性を保持しつつ、新しい未来を実現するための設計だった。
特徴:
- 64ビット汎用レジスタ(RAX〜R15)
- 64ビット仮想アドレス空間(理論上 2^64、現実的には48ビット程度)
- セグメント方式のほぼ完全な無効化(flat model)
- RIP相対アドレッシングの導入
- SSE/AVX命令の本格的統合
mov rax, [rip + offset] ; 相対アドレス → PIC(位置独立コード)に最適
このモードでは、物理的には全てが広がったように見えて、構造的には極端に簡素化された。
3モードの比較
モード | 対応CPU | 特徴 | アクセスモデル |
---|---|---|---|
Real Mode | 8086〜 | 16ビット, セグメント | seg:offset |
Protected Mode | 80286〜 | メモリ保護, ページング | 仮想アドレス + セグメント記述子 |
Long Mode | AMD64〜 | 64ビット, Flat Memory | 仮想アドレス + ページングのみ |
進化するごとに、「構造は複雑 → 単純 → 抽象化」へと向かっている。
命令と実行の距離が変化する
- Real Mode:命令と物理実行が一致している
- Protected Mode:命令と実行の間に「制約の層」が存在する
- Long Mode:命令は抽象的で、実行は仮想的な空間上で行われる
→ これは「アセンブリを書く」という行為が、
“物理構造への指示”から“抽象構造への依頼”へと変化したことを意味する。
互換性という名の呪縛と進化
x86は、常に後方互換性を背負いながら進化する宿命を持っていた。
- ブートローダは今でもReal Modeで始まる
- BIOSインタフェースは今も一部の環境に残る
- UEFIすら、内部ではLegacyサポートの“影”を抱えている
それでもx86は、脱構造的なアプローチで自己変革を繰り返す設計パターンを持つ。
結語:進化とは、過去を完全に捨てられない未来の技法である
Real Modeに始まり、
Protected Modeで構造を持ち、
Long Modeでその構造を抽象化する。
x86の進化とは、同じ命令セットが異なる世界観の上で生き残る設計そのものだった。
"互換性とは、妥協ではない。それは未来を支えるために過去を引き受ける、設計の意志である。"