ICDロゴ

8086

【ハチマルハチロク】

別名
8088 【ハチマルハチハチ】

最終更新日: 2002/10/29

 米Intel社が1978年に発表した16bitマイクロプロセッサ。今日のPC/AT互換機隆盛の基礎となったプロセッサであり、8086が産業界に与えた影響は非常に大きい。

 8086は、総トランジスタ数29000個で、発表当初の動作クロックは5MHzのマイクロプロセッサであり、外部データバス幅が16bitの8086と、8bitの8088の2種類が用意されていた。アドレスバス幅は20bitなのでアクセス可能な物理メモリ空間は1Mbytesになる(これは8080の16倍のメモリ空間)。アドレス線とデータ線は多重化されているので、どちらも同じ40ピンのDIPパッケージで提供されている。ハードウェア的な浮動小数点演算機能は持っていなかったが、後に浮動小数点演算処理専用のコプロセッサ8087が発売されている。8086は、ソフトウェアアーキテクチャ的には、同社の8bitマイクロプロセッサ8080/8085(やZilog社のZ80)との互換性を強く意識して作られている。実際、アセンブリ言語で記述されたプログラムは、わずかな書き換えだけでほとんどそのまま8086のアセンブリ言語に移行して実行することができた。また、周辺LSIとのインターフェイスなども互換性を重視しており、8080用の各種インターフェイスLSI(割り込みコントローラ、シリアル/パラレルインターフェイス、DMAコントローラ、カウンタ/タイマ、他)をそのまま利用することができる。

 8086の特徴は、その独特なメモリアーキテクチャにある。当時広く使われていた8bitマイクロプロセッサでも、すでに16bit(64Kbytes)のアドレスバス幅を持っていたが、システム全体に要求されるアドレス空間はこれを大きく越えており、16bitプロセッサの時代にはさらに広大なアドレス空間が求められていた。そこでIntel社が8086で採用したのが、セグメント方式のメモリアーキテクチャである。セグメント方式では、1Mbytesのアドレス空間全体をまず「セグメント」と呼ばれる最大64Kbytesの領域に分け、さらにその中の特定のバイト位置(0〜65535)を「オフセット」を使って指し示す。最終的な物理アドレスは、常に、セグメントとオフセットの2つを組み合わせることによって求められる。セグメントもオフセットも共に16bitなので、合計32bit幅のアドレスが得られそうであるが、実際にはそうなっていない。まずセグメント部を16倍し(物理的には、16bitのセグメントアドレスの下位に4bit分の0を付加して、20bitのアドレスにする)、そこにオフセットを加える、という形で計算される。これにより、最終的に20bitの物理アドレスが求められる(32bitから20bitにしているので、同じ物理アドレスを表す方法が、4096通りある)。

 8086では、アドレスのオフセット部はプログラマが命令コード中で明示的に指定するが、セグメント部は「セグメントレジスタ」の内容が暗黙のうちに使われる。セグメントレジスタにはCS(コードセグメント)とDS(データセグメント)、ES(エクストラセグメント)、SS(スタックセグメント)の4つがあり、命令によって自動的に使い分けられる。たとえば、命令のフェッチをするときは、命令ポインタ(IPレジスタ)とCSを組み合わせて命令の置かれている物理アドレスが求められる。また、データを読み出すならDSが、スタックへデータをプッシュするのならSSが、それぞれ暗黙のうちに使われる(明示的に指定することも可能)。プログラマは、目的とするデータがどのセグメントに入っているかによって、あらかじめ各セグメントレジスタをセットアップしておく必要があるが、もし目的のセグメントにデータがなければ、別のセグメントに切り替える命令を発行する必要がある(8086のプログラミングで一番難しいのがこのようなセグメントの概念を理解することである)。8086では、64Kbytes以上のデータへアクセスしたり、64Kbytes以上のコードを管理するのが難しいので、俗に「64Kbytesの壁」などと呼ばれている。

 ソフトウェアアーキテクチャ的にみると、AX、BX、CX、DX、SI、DI、SP、BPという8本の16bitレジスタがある。AX、BX、CX、DXの4つは、それぞれ8bitずつに分割して使用することもできる(AX→AHとAL、BX→BHとBL、CX→CHとCL、DX→DHとDL)。これらのレジスタの役割は、8080の時よりも汎用的にはなっているが、命令によっては完全に対称というわけではない。たとえば、AXを使う命令は他のレジスタを使う場合よりも1byte短い短縮系が用意されているし、レジスタ間接アドレッシングモードにはBX/SI/DI/BPのみが利用可能、ループ命令のカウンタはCX、I/O命令における番地指定はDX、転送命令のソースとディスティネーションはSIとDIでのみ指定可能、などとなっている。

 8086はその後8MHz版や10MHz版などが作られ、8088にも8MHz版が用意された。初代IBM-PCには、4.77MHzの8088が採用されている。また浮動小数点演算コプロセッサとして8087が用意されている。8087は8086と協調して動作するプロセッサであり、ユーザーのプログラムからはまったく意識することなく、浮動小数点演算処理を行うことができる。

 8086の後継としては、80186(8086の機能強化版)、80286(保護モードの追加)、80386(32bitモードの追加)、80486(浮動小数点演算機能の内蔵および高機能化)、Pentium(デュアルパイプラインの導入)、Pentium Pro(スーパースカラー機能の追加)などがあり、すべてこの8086からのソフトウェア的な互換性を維持したまま、高速、高機能化が行われている。これらのプロセッサ群や、その互換プロセッサをまとめて、x86アーキテクチャと総称する。

Copyright (C) 2000-2007 Digital Advantage Corp.

アイティメディアの提供サービス

キャリアアップ