Intel 8087

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

8086は数値演算に関して、整数演算命令しか備えていないため、8086だけで浮動小数点演算を行うには別途ライブラリを用意する必要があった。8087を8086の搭載されたコンピュータに装着すると、IEEE 754形式の浮動小数点計算の命令をあたかもひとつのCPUで実行しているかのように使うことができるようになる。8087は8086と共通のバスに接続され、8086の実行する命令を常時監視する。8086では無効命令 (ESC) となる浮動小数点計算の命令を検出すると、8086側で発生する適切なアドレスモードにより追加OPコードおよびオペランドを自身内部にロードし、浮動小数点命令を処理する。8087によって新たに利用できる命令はFADD（加算命令）やFMUL（乗算命令）など68個。8087は8086が命令実行中でも独立して動作することができるが、8087の命令実行が完了してから次の命令を実行させないと誤動作する。それを回避するため8086には、8087の命令実行完了を待つWAIT命令がある。既出のFADDやFMULなどの前にはWAIT命令が必要となる。

8087などのインテル製の数値演算コプロセッサ (x87) は、AX - DXのようにプログラマが随時指定できる汎用レジスタではなく、8レベルの80ビット浮動小数点レジスタスタックを持ち、演算命令はスタックトップの1つまたは複数の値を対象として、結果もスタックトップに残し、ロード・ストアも原則的にスタックトップに対して行うスタックマシンである。

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

1980年に発表された8087は、80287、80387DX (80387SX)、80487SXへと発展していった（ただし80487は実質的に80486DXと等価であり、実装されると80486を停止させすべての処理を80487が行うため、コプロセッサと呼ぶのは正しくない）。1980年代に「x87」といえばこの拡張コプロセッサシリーズを差し、さらに「x87命令」といえばこのコプロに搭載された浮動小数点演算などの命令を指した。しかし80486DXやそれ以降のPentiumなどではCPUコア内にコプロセッサが内蔵されるようになったため（命令は外部プロセッサ時代と共通）、現在ではそれら内蔵の演算ユニットを指して「x87」と言うことがある。Pentium以降のCPUでも内蔵されてはいるが、AMD64アーキテクチャでは浮動小数点演算にx87ではなくSSE/SSE2が基本命令として使われるようになった。x87の存在を前提に書かれたプログラムの互換性維持のため、CPUメーカーによるx87命令のサポートは続いている。

日本電気 (NEC) のPC-9801、PC-100（京セラOEM）やIBM PCなど、8086を搭載したコンピュータの多く(アイ電子機器ai-M16、日立MB-16001、キヤノンAS-100、三菱電機Multi-16、N5200モデル05、精工舎 SEIKO 9500、三洋電機 MBC-5030、東京芝浦電気PA 7020、日本ユニバック UP10Eモデル40など)には、8087を挿すことができるソケットが用意されていた。

関連項目 
 逆ポーランド記法

脚注

参考文献 

 Intel, 1989 Intel Microprocessor and Peripheral Handbook_Vol_1, 1989, ISBN 1-55512-041-5
 Intel, 80387 Programmers Reference Manual 1987, 1987, ISBN 1-55512-057-1 (Appendix C に IEEE 754 仕様と 8087/287 の非互換部の説明がある)
 

8087