8086 生産時期 1978年から1998まで 生産者 Intel , AMD , NEC , 富士通 , Harris (インターシル ), OKI , シーメンス , テキサス・インスツルメンツ , 三菱 , パナソニック (松下)CPU 周波数5 MHz から 10 MHz 命令セット x86 (16ビット)パッケージ 40ピン DIP 前世代プロセッサ Intel 8085 次世代プロセッサ Intel 8088 トランジスタ 29000 コプロセッサ Intel 8087 , 8089(英語版 ) テンプレートを表示
Intel 8086 (インテル8086)はインテル が開発した16ビット マイクロプロセッサ (CPU )。x86 (80x86)アーキテクチャの最初のマイクロプロセッサで、1978年 に発表された。
日本電気 のPC-9801 などパーソナルコンピュータ に広く採用された。対応するオペレーティングシステム に、MS-DOS 、PC-DOS、CP/M-86 があった。
シリーズには、外部データバスを8ビット にした低価格版の8088 があり、初代のIBM PC にも採用された。密結合な構成で、協調して働くように準備されていた数値演算コプロセッサ に8087 があった。また、使われる機会は少なかったが、8089(英語版 ) というI/Oプロセッサも存在した。
当時ライバルとされた製品には、モトローラ の68000 系プロセッサがある[2] 。
アーキテクチャ 8086は8ビットアーキテクチャであった8080 を16ビットに拡張し、乗除算などの命令を強化したCPUである。アドレスバスは20ビットに、データバスは16ビットに拡張された(姉妹品に外部データバスを8ビットに留めた8088もある)。8080とバイナリーレベルの互換性 はないが、開発にあたってIntelは、8080からの速やかな移行を最重点事項に置き、8080のアセンブラ ソースコード に一切の手を加えることなく再アセンブルするだけで、8086用のバイナリを生成する事も出来た[3] 。
8086のレジスタセット 8080のアーキテクチャと大きく異なるのは、演算用のアドレスレジスタ のほかに、セグメントレジスタ という、アドレス変換のための16ビットのレジスタを持っていることである。実際にCPUがアクセスするアドレスは、16ビット幅のレジスタによって指定された64KBのアドレスに、さらに16ビット幅のセグメントレジスタの値を16倍(左に4ビットシフト)して加算したアドレスとするため、1MBのメモリ空間を利用できた。
8086のアーキテクチャでは、プログラム内で通常表現されるアドレスの値は16ビット幅で64KBのメモリ空間である。当時、64KBのメモリ空間は1つのプログラムにとっては十分に広大であり[4] 、セグメント機構はマルチタスクのために用意された[要出典 ] 。(8086には保護がないので、アプリケーションがセグメントレジスタを操作できるが、本来はOSが操作するものである。) 内蔵する4本のセグメントレジスタの値を全て同一にすると、8ビットの8080と同等の環境となり、8080用ソースを8086へ移植するのが容易であるほか、実行バイナリのリロケータブル化が容易であるといったメリットもあった。
しかし、8086や、その互換品・後継品がロングセラーになって使われ続けた結果、より大規模なプログラムが作られる様になると、64KBのメモリ空間は狭くなってしまい、アプリケーションのプログラムが自力でセグメントレジスタを操作して64KB以上のメモリ空間にアクセスする手法が用いられるようになった。しかし、頻繁にセグメントレジスタを操作することはプログラムを煩雑にし、実行時のオーバーヘッドも増えるため、プログラマからは非常に嫌われた。
後に批判の的となってしまったセグメント方式だが、互換性を重視しつつ開発が短期間で完了でき、かつコストパフォーマンスに優れた選択肢であった。これは、当時モトローラ と激しいシェア争いを演じていたintelにとって極めて重大な要素だった。
メモリ空間を1MBとしたのは、当時使われていた40DIPパッケージにアドレス・データバスを割り当てる際に、アドレスピンを効率良く増やして割り当てられる値であったとも言われる。
また、より大容量のアプリケーションを担い、高性能を発揮する次世代のプロセッサとしては、当時計画中であった32ビットCPU、iAPX432 を充てる事が考えられていた。当初、8086は8ビットアーキテクチャから次世代のiAPX 432プロセッサへのつなぎとして考えられていたため、後に大規模な拡張を行う事は一切考えられていなかった[5] 。
演算に使えるレジスタが限定的だったり、メモリを直線的に使うのが面倒等の問題があったものの8080とのソースレベルでの互換性を重視し、既存の8080環境やCP/M などのアプリケーションの移植、プログラマの移行などにも積極的であったことから、IBM-PC へ採用され、現在のx86アーキテクチャの商業的な成功へとつながったと評価されている。
ハードウェア的には、供給クロックのデューティ比 が1:2になっている。クロックジェネレータi8284に3倍のクロックを供給し、それを3分周することにより1:2のクロックを得る。[6]
プログラミングモデル C言語 から生成されたプログラムにおいて、コードとデータのそれぞれで、デフォルトのアクセスをセグメント内のオフセットのみとするか、セグメントも併用してアクセスするか、の違いにより「コード・データともセグメント内」「コードのみセグメント内」「データのみセグメント内」「コード・データともセグメント併用」といったパターンが存在し、ライブラリ等はそれぞれ異なるものを使うため煩雑であった。デフォルトでないアドレッシングには、ポインタに far
や near
という修飾を付ける。プログラミングモデルあるいはメモリモデル等ともいう。
詳細は以下の通り。
Tiny コードセグメントとデータセグメントが共通で、両者合わせて64Kバイト以内。拡張子が"COM"の実行ファイルがこのモデルである。 Small コードセグメント、データセグメントのどちらも64Kバイト以内。 Compact コードセグメントは64Kバイト以内、データセグメントはfarポインタ。コードは小さいが、扱うデータが大きいときに用いられる。 Medium コードセグメントはfarポインタ、データセグメントは64Kバイト以内。コードが大きくても、扱うデータが小さい場合に利用される。 Large コードセグメント、データセグメントのどちらもfarポインタ。変数(配列)のサイズは64Kバイトに制限される。 Huge 基本的にLargeと同じだが、配列などのメモリオブジェクトのサイズが64Kバイトに制限されない。 効率などの理由から、コンパイルはSmallモデルとし、必要に応じて明示的にセグメント操作をプログラマが指示する(適宜farまたはhugeポインタを使用し、また動的なメモリ確保によって64KBの制限を超える)ような作りのプログラムも多い。
データバスについて 8086の外部データバスは16ビットであるが、アドレッシングは8ビット単位で行われ、データバスの下位8ビットが偶数アドレス、上位8ビットが奇数アドレスとなる。
8086でシステムを構築する上で、従来からある8ビットCPU用の周辺チップ(8251(英語版 ) 、8255 、8237(英語版 ) 、8259 など)が多用されたが、これらのデータバスは8ビットであるため、8086に接続するには、8086のデータバスの上位もしくは下位8ビットのどちらかに接続することになった。
そのため、このような構成では、8086 CPUから見ると、周辺チップの連続するレジスタが偶数アドレスもしくは奇数アドレスのみにとびとびに割り当てられる格好となる。
PC-9800シリーズ では実際に上記のような構成になっており、I/Oマップが偶数アドレスと奇数アドレスで分断されている。一方、外部データバスが8ビットの8088 を採用したIBM PC ではそのようなことはなく、8ビットの周辺チップは連続したアドレスに存在する。XTバスの拡張カードにより増設した機器も同様である。
そのため、後にPC/AT で16ビットのISA を採用した際に、8ビットの周辺機器をサポートするためにバス・サイジングの必要性が生じた。
また、PC-9800シリーズでも、PCカード のモデムなど、IBM PCシリーズ用に開発された8ビットの周辺機器をサポートする際に、バス・サイジングの必要性が生じた。
記念品 のちの2018年 には、8086発売40周年を記念して、当時最新のCoffee Lakeマイクロアーキテクチャ に基づくCore i7-8086 K を、限定品として発売している。Core i7-8086Kの最大周波数はインテルのCPUとしては初めて5GHzに達し[7] 、8086のちょうど1000倍となっている[8] 。
脚注 参考文献 田辺皓正編著『マイクロコンピュータシリーズ15 8086マイクロコンピュータ』丸善株式会社 、1983年4月30日。 関連項目 生産終了
現行
その他 マイクロ アーキテクチャ
P5
P5ベースのコア
0.90 μm 0.60 μm 0.35 μm 0.25 μm
P6
P6ベースのコア
0.50 μm 0.35 μm 0.25 μm 180 nm 130 nm 90 nm 65 nm
NetBurst
NetBurstベースのコア
180 nm 130 nm 90 nm 65 nm
Core
Atom
Atomのマイクロアーキテクチャ
45 nm 32 nm 22 nm 14 nm 10 nm Intel 7
Nehalem
Sandy Bridge
Sandy Bridgeベースのコア
32 nm 22 nm
Haswell
Skylake
Cypress Cove
Sunny Cove
Willow Cove
Golden Cove (+Gracemont)
Raptor Cove (+Gracemont)
Redwood Cove (+Crestmont)
Redwood Coveベースのコア
Intel 4 Intel 3
Lion Cove (+Skymont)
Lion Coveベースのコア
Intel 20A Intel 18A