8086は x86アーキテクチャの元祖

1978年6月リリース
8086
8086
8086 は、インテルが1978年(昭和53年)に発表した16ビットCPUである。21世紀まで続く x86アーキテクチャの最初の製品となった。
外部データバスを8ビットにした廉価版の 8088 は、1981年(昭和56年)8月、IBM PC に採用され、オフィスへのパソコン普及に貢献した。
国内では、後に国民機と呼ばれる PC-9801 に搭載され、16ビット・パソコンの普及を牽引した。

8086開発の背景

8086のダイ
8086のダイ
1970年代後半、8ビットCPUを搭載したホビーコンピュータが百花繚乱の様相を呈していた。販売台数で見ると、モトローラの 6800 をモデルとしてモステクノロジーが開発した 6502 を搭載した Apple IIPET 2001(国内ではファミコンやPC Engineが採用)と、インテルの 8080 を改良した Z80 を搭載したパソコンがしのぎを削っていた。
だが、8080 を開発したインテルは蚊帳の外であった。
IBM PCのマザーボード
IBM PCのマザーボード
そのころ、IBMがパソコンを開発しようと動き出し、短期間で上市するために部品は既存製品を活用する方針を打ち出していた。インテルは他社に先駆けて16ビットCPUを開発しており、ホビーパソコンの8ビットCPUより高性能である点にIBMが惹かれた。(実際には廉価版の 8088 が搭載されることになる)

x86アーキテクチャ

8086のレジスタ
8086のレジスタ
8086 は、8ビットCPU 8080 のデータバスを16ビットに拡張し、乗除算など命令を強化したが、レジスタ構成は 8080 に似ている。
AX はアキュムレータで、他のレジスタより高速に計算ができるほか、唯一除算命令が実行できる。BX はアドレス指定に使われる汎用レジスタ、CX はループカウンタなどに用いられる汎用レジスタ、DX レジスタはデータ処理に利用される汎用レジスタ。AXBXCXDXの4本は、たとえばAXをAH+ALのように分けて8ビット汎用レジスタとして用いることも出来る。
BP はベースポインタとしてアドレス指定ができる。セグメントレジスタ SS をデフォルト参照する。
SP はスタックポインタで、セグメントレジスタSSを参照する。
SIDI はインデクスレジスタとしてアドレス指定に使用できる。
フラグレジスタは、プロセッサ命令によって各種のフラグがセット/リセットされる。
インストラクションポインタ IP はセグメントレジスタ CS とセットで、現在実行しているプログラムのアドレスを示す。
セグメントレジスタと物理アドレス
セグメントレジスタと物理アドレス
セグメントレジスタ と呼ぶ4本の16ビット幅レジスタ(CS, DS, SS, ES)の値を左に4ビット・シフトして加算した20ビットをアドレスとして指定することができ、物理メモリ空間は1Mバイトに拡張された。
上図では、セグメントレジスタとオフセットのレジスタ値をセットして、物理アドレス &H C1234を指していることを表す。
メモリはセグメント切替のため、同一アプリケーションで利用できるメモリ空間は64Kバイトに制限されていたが、当時のプログラムはそれで十分だった。

このように従来アーキテクチャを踏襲したことで、8086 の開発はスピーディかつ安価に行われ、CPU自体も安定していた。ソフトウェアは 8080 とバイナリレベルの互換はなかったものの、再アセンブルすることでほぼ移植ができた。

OSとしては、1981年(昭和56年)、デジタルリサーチから CP/M8086 対応版となる CP/M-86 が発売されたが、同年、IBM PC に搭載された PC-DOS(後の MS-DOS)が主流となった。

乗除算命令の高速化をめぐって

16ビット整数の乗算命令は最大154クロックサイクル、除算命令は194クロックサイクルを要する。つまり、5MHzの 8086 の場合、1秒間に約3万2千回の整数乗算を行うことができる。
乗除算命令を持たない 8080Z80 に比べれば長足の進歩だが、それでも、アルゴリズム的にはタイガー計算機のハンドルを回していることに変わりない。

その後に登場する16ビットCPUは、乗除算の結果をより速く出す方へ進化していく。
1980年(昭和55年)にモトローラが発売した16ビットCPU 68000 は、8086 に遅れること2年、その2.5倍の約7万トランジスタを搭載していた。乗算命令は最大74クロックサイクルと、8086 の半分以下になった。
インテルも負けてはいない。1984年(昭和59年)に発売した 80286 では24クロックサイクルと、劇的に短縮した。前述のNEC V30 は53クロックサイクルだ。
32ビットCPUの 8038680486 になると、逆にクロックサイクルが大きくなってしまった。一方、モトローラの32ビットCPU 68030 は28クロックサイクルと、80286 並に短くなっている。

Excelのような事務処理ソフトを使う範囲では、乗除算速度が問題になることはないが、シューティングゲームには影響が出る。
当時のディスプレイはブラウン管であったから、画面の書き換え時間(リフレッシュレート)は30~60Hz(1秒間に30~60回)だった。この期間中に計算が終わっていなければ、敵の位置が動かないまま背景だけ動いているという結果になりかねない。

アセンブラとMS-DOS

個人的には、こうしたクロックサイクルまで勘案して機械語プログラムをアセンブルしたのは x86アーキテクチャ が最後だったように思う。その後は、年々歳々CPUのクロック数が上昇したから、プログラミングで工夫するよりコストが安くなったからだ。

MS-DOSには、マイクロソフト製アセンブラ MASM(Microsoft Macro Assembler)が標準で付いてきた。マクロやプロシージャに対応しており、高級言語に近い構造化プログラミングが可能だった。

主要スペック

項目 仕様
メーカー Intel
発売開始 1978年6月
トランジスタ数 29,000
データバス 16ビット
アドレスバス 20bit
物理メモリ 1MB
CPUクロック 5~10MHz
プロセスルール 3μm
命令セット x86
ソケット 40ピンDIP
最大消費電力 1.87W

CPUの歴史

発表年 メーカー CPU名 ビット数 最大クロック
1971年インテル40044bit750KHz
1974年インテル80808bit3.125MHz
1975年モステクノロジーMOS 65028bit3MHz
1976年ザイログZ808bit20MHz
1978年インテル808616bit10MHz
1979年モトローラMC68098bit2MHz
1979年ザイログZ800016bit10MHz
1980年モトローラMC6800016bit20MHz
1984年インテル8028616bit12MHz
1985年インテル8038632bit40MHz
1985年サン・マイクロシステムズSPARC32bit150MHz
1986年MIPSR200032bit15MHz
1987年ザイログZ28016bit12MHz
1987年モトローラMC6803032bit50MHz
1989年インテル8048632bit100MHz
1991年MIPSR400064bit200MHz
1990年モトローラMC6804032bit40MHz
1993年インテルPentium32bit300MHz
1994年IBM, モトローラPowerPC 60332bit300MHz
1995年サイリックスCyrix Cx5x8632bit133MHz
1995年AMDAm5x8632bit160MHz
1995年サン・マイクロシステムズUltraSPARC64bit200MHz
1999年IBM, モトローラPowerPC G432bit1.67GHz
1999年AMDAthlon32bit2.33GHz
2000年インテルPentium 432bit3.8GHz
2001年インテルItanium64bit800MHz
2003年AMDOpteron64bit3.5GHz
2003年インテルPentium M32bit2.26GHz
2006年SCE,ソニー,IBM,東芝Cell64bit3.2GHz
2006年インテルCore Duo32bit2.33GHz
2006年インテルCore 2 Duo64bit3.33GHz
2008年インテルCore i9/i7/i5/i364bit5.8GHz
2017年AMDRyzen64bit5.7GHz
2020年AppleM1/M264bit3.49GHz

参考サイト

(この項おわり)
header