Intel 8087

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

Intel 8087は、インテルの16ビットCPUi8086およびi8088のために用意されていた数値演算コプロセッサ。インテル製としては初の数値演算コプロセッサである。8087を装着することによって、プログラムの処理内容にもよるが、20%~500%の性能改善が期待できた。

8086は数値演算に関して、整数演算命令しか備えていないため、8086だけで浮動小数点演算を行うには独自にライブラリを用意する必要があった。8087を8086の搭載されたコンピュータにセットすると、IEEE 754形式の浮動小数点計算の命令をあたかもひとつのCPUで実行しているかのように使うことができるようになる。8087は8086と共通のバス上に配置され、8086の実行する命令を常時監視する。8086では無効命令(ESC) となる浮動小数点計算の命令を検出すると、8086側で発生する適切なアドレスモードにより追加OPコードおよびオペランドを自身内部にロードし、浮動小数点命令を処理する。8087によって新たに利用できる命令はFADD(加算命令)やFMUL(乗算命令)など60個。

8087などのインテル製の数値演算コプロセッサ(x87)は、AX~DXのようなプログラマが自由に利用できる汎用レジスタではなく、8レベルの80ビット浮動小数点レジスタスタック(st(0)~st(7))として表現するアーキテクチャを採用し、演算対象をスタックトップの1つまたは複数の値を対象とし結果もスタックトップに残し、ロード・ストアも原則的にスタックトップに対して行われる。

同社が8087を設計した当時、将来の浮動小数点形式の標準となることを目指していた。実際、IEEE 754のx86向け実装の標準となることができた(厳密にはIEEE 754と8087/80287の実装の間には非互換部分が存在する)。8087を使うと、32もしくは64ビットの浮動小数点データ型を利用でき、内部演算には長大で複雑な演算の誤差を少なくするために80ビットのデータ型を使っていた。その他、80ビット(17文字)のBCDデータ型と16、32、64ビットの整数型を利用できた。

1980年に発表された8087は、8028780387DX (80387SX)、80487SXへと発展していった。1980年代に「x87」といえばこの拡張コプロセッサシリーズを差し、さらに「x87命令」といえばこのコプロに搭載された浮動小数点演算などの命令を指した。しかし80486DXやそれ以降のPentiumなどではCPUコア内にコプロセッサが内蔵されるようになったため(命令は外部プロセッサ時代と共通)、現在ではそれら内蔵の演算ユニットを指して「x87」と言うことがある。Pentium以降のCPUでも内蔵されてはいるが、AMD64アーキテクチャでは浮動小数点演算にx87ではなくSSE/SSE2が基本命令として使われるようになったため、x87が利用されることはほとんどなくなった。

日本電気 (NEC) のPC-9801,PC-100(京セラOEM)やIBM PCなど、8086を搭載したコンピュータには、8087を挿すことができるソケットが用意されていた。

x86系のCPUメーカーの公式見解としても、ベクトル計算機構のAVXまで登場した現在では、x87を前提に書かれたプログラムの互換性維持か、SIMD機構が搭載していない超越関数命令を使用する場合のみの使用を推奨している。

テンプレート:Asbox