8086開発の背景
そのころ、IBMがパソコンを開発しようと動き出し、短期間で上市するために部品は既存製品を活用する方針を打ち出していた。インテルは他社に先駆けて16ビットCPUを開発しており、ホビーパソコンの8ビットCPUより高性能である点にIBMが惹かれた。(実際には廉価版の 8088 が搭載されることになる)
x86アーキテクチャ
8086 は、8ビットCPU 8080 のデータバスを16ビットに拡張し、乗除算など命令を強化したが、レジスタ構成は 8080 に似ている。
AX はアキュムレータで、他のレジスタより高速に計算ができるほか、唯一除算命令が実行できる。BX はアドレス指定に使われる汎用レジスタ、CX はループカウンタなどに用いられる汎用レジスタ、DX レジスタはデータ処理に利用される汎用レジスタ。AX、BX、CX、DXの4本は、たとえばAXをAH+ALのように分けて8ビット汎用レジスタとして用いることも出来る。
BP はベースポインタとしてアドレス指定ができる。セグメントレジスタ SS をデフォルト参照する。
SP はスタックポインタで、セグメントレジスタSSを参照する。
SI と DI はインデクスレジスタとしてアドレス指定に使用できる。
フラグレジスタは、プロセッサ命令によって各種のフラグがセット/リセットされる。
インストラクションポインタ IP はセグメントレジスタ CS とセットで、現在実行しているプログラムのアドレスを示す。
AX はアキュムレータで、他のレジスタより高速に計算ができるほか、唯一除算命令が実行できる。BX はアドレス指定に使われる汎用レジスタ、CX はループカウンタなどに用いられる汎用レジスタ、DX レジスタはデータ処理に利用される汎用レジスタ。AX、BX、CX、DXの4本は、たとえばAXをAH+ALのように分けて8ビット汎用レジスタとして用いることも出来る。
BP はベースポインタとしてアドレス指定ができる。セグメントレジスタ SS をデフォルト参照する。
SP はスタックポインタで、セグメントレジスタSSを参照する。
SI と DI はインデクスレジスタとしてアドレス指定に使用できる。
フラグレジスタは、プロセッサ命令によって各種のフラグがセット/リセットされる。
インストラクションポインタ IP はセグメントレジスタ CS とセットで、現在実行しているプログラムのアドレスを示す。
セグメントレジスタ と呼ぶ4本の16ビット幅レジスタ(CS, DS, SS, ES)の値を左に4ビット・シフトして加算した20ビットをアドレスとして指定することができ、物理メモリ空間は1Mバイトに拡張された。
上図では、セグメントレジスタとオフセットのレジスタ値をセットして、物理アドレス &H C1234を指していることを表す。
メモリはセグメント切替のため、同一アプリケーションで利用できるメモリ空間は64Kバイトに制限されていたが、当時のプログラムはそれで十分だった。
このように従来アーキテクチャを踏襲したことで、8086 の開発はスピーディかつ安価に行われ、CPU自体も安定していた。ソフトウェアは 8080 とバイナリレベルの互換はなかったものの、再アセンブルすることでほぼ移植ができた。
OSとしては、1981年(昭和56年)、デジタルリサーチから CP/M の 8086 対応版となる CP/M-86 が発売されたが、同年、IBM PC に搭載された PC-DOS(後の MS-DOS)が主流となった。
上図では、セグメントレジスタとオフセットのレジスタ値をセットして、物理アドレス &H C1234を指していることを表す。
メモリはセグメント切替のため、同一アプリケーションで利用できるメモリ空間は64Kバイトに制限されていたが、当時のプログラムはそれで十分だった。
このように従来アーキテクチャを踏襲したことで、8086 の開発はスピーディかつ安価に行われ、CPU自体も安定していた。ソフトウェアは 8080 とバイナリレベルの互換はなかったものの、再アセンブルすることでほぼ移植ができた。
OSとしては、1981年(昭和56年)、デジタルリサーチから CP/M の 8086 対応版となる CP/M-86 が発売されたが、同年、IBM PC に搭載された PC-DOS(後の MS-DOS)が主流となった。
乗除算命令の高速化をめぐって
16ビット整数の乗算命令は最大154クロックサイクル、除算命令は194クロックサイクルを要する。つまり、5MHzの 8086 の場合、1秒間に約3万2千回の整数乗算を行うことができる。
乗除算命令を持たない 8080 や Z80 に比べれば長足の進歩だが、それでも、アルゴリズム的にはタイガー計算機のハンドルを回していることに変わりない。
その後に登場する16ビットCPUは、乗除算の結果をより速く出す方へ進化していく。
1980年(昭和55年)にモトローラが発売した16ビットCPU 68000 は、8086 に遅れること2年、その2.5倍の約7万トランジスタを搭載していた。乗算命令は最大74クロックサイクルと、8086 の半分以下になった。
インテルも負けてはいない。1984年(昭和59年)に発売した 80286 では24クロックサイクルと、劇的に短縮した。前述のNEC V30 は53クロックサイクルだ。
32ビットCPUの 80386 や 80486 になると、逆にクロックサイクルが大きくなってしまった。一方、モトローラの32ビットCPU 68030 は28クロックサイクルと、80286 並に短くなっている。
Excelのような事務処理ソフトを使う範囲では、乗除算速度が問題になることはないが、シューティングゲームには影響が出る。
当時のディスプレイはブラウン管であったから、画面の書き換え時間(リフレッシュレート)は30~60Hz(1秒間に30~60回)だった。この期間中に計算が終わっていなければ、敵の位置が動かないまま背景だけ動いているという結果になりかねない。
乗除算命令を持たない 8080 や Z80 に比べれば長足の進歩だが、それでも、アルゴリズム的にはタイガー計算機のハンドルを回していることに変わりない。
その後に登場する16ビットCPUは、乗除算の結果をより速く出す方へ進化していく。
1980年(昭和55年)にモトローラが発売した16ビットCPU 68000 は、8086 に遅れること2年、その2.5倍の約7万トランジスタを搭載していた。乗算命令は最大74クロックサイクルと、8086 の半分以下になった。
インテルも負けてはいない。1984年(昭和59年)に発売した 80286 では24クロックサイクルと、劇的に短縮した。前述のNEC V30 は53クロックサイクルだ。
32ビットCPUの 80386 や 80486 になると、逆にクロックサイクルが大きくなってしまった。一方、モトローラの32ビットCPU 68030 は28クロックサイクルと、80286 並に短くなっている。
Excelのような事務処理ソフトを使う範囲では、乗除算速度が問題になることはないが、シューティングゲームには影響が出る。
当時のディスプレイはブラウン管であったから、画面の書き換え時間(リフレッシュレート)は30~60Hz(1秒間に30~60回)だった。この期間中に計算が終わっていなければ、敵の位置が動かないまま背景だけ動いているという結果になりかねない。
アセンブラとMS-DOS
個人的には、こうしたクロックサイクルまで勘案して機械語プログラムをアセンブルしたのは x86アーキテクチャ が最後だったように思う。その後は、年々歳々CPUのクロック数が上昇したから、プログラミングで工夫するよりコストが安くなったからだ。
MS-DOSには、マイクロソフト製アセンブラ MASM(Microsoft Macro Assembler)が標準で付いてきた。マクロやプロシージャに対応しており、高級言語に近い構造化プログラミングが可能だった。
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年 | インテル | 4004 | 4bit | 750KHz |
1974年 | インテル | 8080 | 8bit | 3.125MHz |
1975年 | モステクノロジー | MOS 6502 | 8bit | 3MHz |
1976年 | ザイログ | Z80 | 8bit | 20MHz |
1978年 | インテル | 8086 | 16bit | 10MHz |
1979年 | モトローラ | MC6809 | 8bit | 2MHz |
1979年 | ザイログ | Z8000 | 16bit | 10MHz |
1980年 | モトローラ | MC68000 | 16bit | 20MHz |
1984年 | インテル | 80286 | 16bit | 12MHz |
1985年 | インテル | 80386 | 32bit | 40MHz |
1985年 | サン・マイクロシステムズ | SPARC | 32bit | 150MHz |
1986年 | MIPS | R2000 | 32bit | 15MHz |
1987年 | ザイログ | Z280 | 16bit | 12MHz |
1987年 | モトローラ | MC68030 | 32bit | 50MHz |
1989年 | インテル | 80486 | 32bit | 100MHz |
1991年 | MIPS | R4000 | 64bit | 200MHz |
1990年 | モトローラ | MC68040 | 32bit | 40MHz |
1993年 | インテル | Pentium | 32bit | 300MHz |
1994年 | IBM, モトローラ | PowerPC 603 | 32bit | 300MHz |
1995年 | サイリックス | Cyrix Cx5x86 | 32bit | 133MHz |
1995年 | AMD | Am5x86 | 32bit | 160MHz |
1995年 | サン・マイクロシステムズ | UltraSPARC | 64bit | 200MHz |
1999年 | IBM, モトローラ | PowerPC G4 | 32bit | 1.67GHz |
1999年 | AMD | Athlon | 32bit | 2.33GHz |
2000年 | インテル | Pentium 4 | 32bit | 3.8GHz |
2001年 | インテル | Itanium | 64bit | 800MHz |
2003年 | AMD | Opteron | 64bit | 3.5GHz |
2003年 | インテル | Pentium M | 32bit | 2.26GHz |
2006年 | SCE,ソニー,IBM,東芝 | Cell | 64bit | 3.2GHz |
2006年 | インテル | Core Duo | 32bit | 2.33GHz |
2006年 | インテル | Core 2 Duo | 64bit | 3.33GHz |
2008年 | インテル | Core i9/i7/i5/i3 | 64bit | 5.8GHz |
2017年 | AMD | Ryzen | 64bit | 5.7GHz |
2020年 | Apple | M1 | 64bit | 3.49GHz |
2023年 | インテル | Core Ultra 9 / 7 / 5 | 64bit | 5.1GHz |
参考サイト
- 8086誕生から40年、その歴史を振り返る:@IT
- Z80 で機械語を学ぶ:ぱふぅ家のホームページ
- Intel 80286 は MS-DOS上の最速CPU:ぱふぅ家のホームページ
- ダイナブック J-3100SS でモバイル生活:ぱふぅ家のホームページ
(この項おわり)
外部データバスを8ビットにした廉価版の 8088 は、1981年(昭和56年)8月、IBM PC に採用され、オフィスへのパソコン普及に貢献した。
国内では、後に国民機と呼ばれる PC-9801 に搭載され、16ビット・パソコンの普及を牽引した。