(Translated by https://www.hiragana.jp/)
x87 - Wikipedia コンテンツにスキップ

x87

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
Intel 80287から転送てんそう

x87x86アーキテクチャー命令めいれいセットのうち浮動ふどう小数点しょうすうてんすう関係かんけいのサブセットのことである。もともとはx86けいCPU協調きょうちょうして動作どうさするオプションの浮動ふどう小数点しょうすうてんすうコプロセッサ (FPU) でサポートされる、8086命令めいれいセットの拡張かくちょう機能きのうであった。これらのマイクロチップは型番かたばん末尾まつびが"87"となっていた。これはNPX (Numeric Processor Extension) としてもられる。基本きほん命令めいれいセットにたいする拡張かくちょう同様どうよう、x87命令めいれい動作どうさするプログラムを構築こうちくするのに必須ひっすのものではないが、頻出ひんしゅつする数値すうち処理しょりハードウェアおよびマイクロコード実装じっそうにより、これらの処理しょり対応たいおうする機械きかいルーチンがおこなうよりもはるかに高速こうそくおこなうことができる。x87命令めいれいセットは加算かさん減算げんざん比較ひかく基本きほんてき浮動ふどう小数点しょうすうてん演算えんざんだけでなく、タンジェント関数かんすうやそのぎゃく関数かんすうなどの超越ちょうえつ関数かんすう数値すうち演算えんざんふくむ。

Intel 80486以降いこうのほとんどのx86プロセッサーはこれらのx87命令めいれいをメインCPUにふくんでいるが、この用語ようごいまでも命令めいれいセットの一部いちぶすのにもちいられることがある。PCにおいてx87命令めいれい標準ひょうじゅんになるまえコンパイラプログラマ浮動ふどう小数点しょうすうてん演算えんざん実行じっこうするためにかなりおそ浮動ふどう小数点しょうすうてん演算えんざんライブラリを使用しようしていた。この手法しゅほうは(てい価格かかくの)みシステムでは依然いぜん一般いっぱんてきである。

あつか浮動ふどう小数点しょうすうてんデータのフォーマットならびに演算えんざん仕様しようはIntel 8087, Intel 80287はおおむIEEE-754準拠じゅんきょしているが、互換ごかん部分ぶぶんがある。これは、IEEE-754 の策定さくていにIntelが参画さんかくしていたものの、仕様しよう確定かくていしないうちに製品せいひんされたためである。Intel 80187, Intel 80387, ならびにIntel 80486以降いこうのCPUに内蔵ないぞうされるFPUは、完全かんぜんにIEEE-754に準拠じゅんきょしている。

開発かいはつ製造せいぞうおこなった企業きぎょう

[編集へんしゅう]

Intel 8087またはそれ以降いこうのモデルと互換ごかんせいがあるFPUを設計せっけいまたは製造せいぞうした企業きぎょうかかげる。

アーキテクチャーの世代せだい

[編集へんしゅう]

8087インテルによって設計せっけいされた最初さいしょの16ビットプロセッサよう数値すうち演算えんざんコプロセッサ(インテルでの呼称こしょうNDP; Numeric Data Processor)。これはIntel 8088または8086接続せつぞくできるよう設計せっけいされている。以下いかのような演算えんざん可能かのうである。

  • 算術さんじゅつ演算えんざん
加算かさん減算げんざん乗算じょうざん除算じょざん平方根へいほうこん絶対ぜったいなど
tan, arctan, 2x-1, y*log2x, y*log2(x+1)
  • 定数ていすうのロード
0, 1, πぱい, log102, loge2, log210, log2e

80187(80C187)[2]Intel 80186 CPUよう数値すうち演算えんざんコプロセッサ。80188は8ビットデータバスをっているため8087しか使用しようできない。80187は80186や80188とどう時期じきには登場とうじょうせず、80287や80387ののち登場とうじょうした。8087とおなじメインプロセッサへのインターフェイスをっているにもかかわらず、コアは80387のもので、IEEE 754完全かんぜん準拠じゅんきょし、またすべての80387拡張かくちょう命令めいれい実行じっこうすることができた[3]

6MHzばんIntel 80287

Intel 80287は、80286のために用意よういされていた数値すうち演算えんざんコプロセッサ。

8086同様どうよう80286は整数せいすう計算けいさん命令めいれいしかそなえていないため、80286だけで浮動ふどう小数点しょうすうてん演算えんざんおこなうには別途べっとライブラリを用意よういする必要ひつようがあった。80287を80286の搭載とうさいされたコンピュータにセットすると、浮動ふどう小数点しょうすうてん計算けいさん命令めいれい使つかうことができるようになる。また、互換ごかんせいのため、アプリケーションからはNDPがあるようにせかけて、実際じっさいみルーチンない浮動ふどう小数点しょうすうてん演算えんざんライブラリを手段しゅだん用意よういされていた。これは、NDPの有無うむかかわらずアプリケーションからは同一どういつ方法ほうほう浮動ふどう小数点しょうすうてん演算えんざんおこなえるようにする仕組しくみであったが、この方法ほうほう非常ひじょうおそいため、あまり使つかわれることかった。この手段しゅだん使つかわず、浮動ふどう小数点しょうすうてん演算えんざん命令めいれいをエミュレーションライブラリにより実行じっこうしていた場合ばあいは、NDPを利用りようするためにはアプリケーションソフトウェア自体じたいさいコンパイルが必要ひつようであった。

80287は、当初とうしょ協調きょうちょうして動作どうさする80286と同一どういつクロック周波数しゅうはすう同期どうきして動作どうさする見込みこみがたなかったため、厳密げんみつ意味いみでのコプロセッサではなく、たんなる入出力にゅうしゅつりょくプロセッサとして設計せっけいされた。このため、ぎゃくに、より高速こうそくなクロックで動作どうささせることもできた。また、このことにより、あまり意味いみはないがソフトウェアおよ外部がいぶ回路かいろ工夫くふうにより、1つの80286に複数ふくすうの80287を接続せつぞくしたり、種類しゅるいのCPU、たとえば386や、Vシリーズなどに80287を接続せつぞくすることもできた。ぎゃくに、80286に、種類しゅるいのNDPを接続せつぞくすること可能かのうであった。 NECPC-9801VXなど、80286を搭載とうさいしたコンピュータには、80287を挿入そうにゅうすることができるソケットが用意よういされていた。

Intel 80287XL

のちIEEE 754への対応たいおう改善かいぜんした80287XLが登場とうじょうした。

Intel 80387は、インテルの32ビットCPUである80386よう数値すうち演算えんざんコプロセッサ。インテル最初さいしょIEEE 754対応たいおうひんとなった。原理げんりてきにはこれ以前いぜんのプロセッサである8087や80287とおなじである。80386を搭載とうさいしたコンピュータには、80387をすことができる専用せんようソケット用意よういされていた。80386SXようには80387SXがある。

80387では、FSIN, FCOS, FSINCOS, FPREM1, FUCOM, FUCOMP, FUCOMPP命令めいれい追加ついかされた。

コプロセッサとのインターフェイスには特許とっきょ取得しゅとくされていなかったため、IDTサイリックスが、さらに高速こうそく演算えんざんおこな互換ごかんひん製造せいぞうしていた。

i487SX

Intel487は、Intel486の、内蔵ないぞうFPUをオミットした廉価れんかばんである486SXようそとけFPUコプロセッサという名目めいもく発売はつばいされたプロセッサである。実態じったいは、486SXのぜん機能きのうり、フル機能きのう486DXとしてはたらくものであり、コプロセッサというよりは、オーバードライブプロセッサちかい。

486は最初さいしょから数値すうち演算えんざんコプロセッサの機能きのう統合とうごうされて開発かいはつされたため、コプロセッサは必要ひつようなかった。しかし、のち数値すうち演算えんざん機能きのうのない廉価れんか製品せいひんの486SXが発売はつばいされると、それようの487SXが用意よういされた。内部ないぶは、486DXとほとんど同等どうとうである。

クロックダブラを搭載とうさいしたSX2が発売はつばいされると、487SX2が追加ついかされた。こちらの内部ないぶDX2である。

原理げんり

[編集へんしゅう]

従来じゅうらいのx87シリーズは、x86シリーズCPUよう数値すうち演算えんざんコプロセッサとして開発かいはつされているが、486は数値すうち演算えんざんコプロセッサの機能きのう内蔵ないぞうするかたち開発かいはつされ、浮動ふどう小数点しょうすうてん演算えんざん機能きのうのみをから追加ついかする必要ひつようがなく、外部がいぶ数値すうち演算えんざんコプロセッサと通信つうしんする機能きのうたない。

しかし、廉価れんかばんとして内蔵ないぞうFPUをたない486SXが登場とうじょうしたため、べつ方法ほうほう浮動ふどう小数点しょうすうてん演算えんざん機能きのう追加ついかする必要ひつようができた。このため487SXは486DXと同等どうとうのCPU機能きのう搭載とうさいし、システムは、487SXが装着そうちゃくされた場合ばあいには従来じゅうらいのCPUを停止ていしさせて487SXをCPUとして動作どうささせることとした。このようにしてシステムへの数値すうち演算えんざんコプロセッサ機能きのう追加ついか実現じつげんしたが、増設ぞうせつにより従来じゅうらいの80x87シリーズと同等どうとう役割やくわりたしているようにえることから、従前じゅうぜん命名めいめい規則きそくによる487SXという名称めいしょうにされている。

487SXようスロットが用意よういされていない486SX搭載とうさいでは、(それが可能かのうなように設計せっけいされていれば)CPUをたんに486DXにえることで浮動ふどう小数点しょうすうてん演算えんざん機能きのう対応たいおうできる。このようなかんがえはオーバードライブプロセッサにがれた。また、486SX2を最後さいごにFPU内蔵ないぞうモデルはえたため、x86よう数値すうち演算えんざんコプロセッサは消滅しょうめつした。

マルチプロセッサ対応たいおうするための機能きのういので、486SXと増設ぞうせつした487SXを同時どうじ使用しようすることはできない。

Pentium Pro世代せだいから内蔵ないぞうのFPUにFCMOV, FCOMI命令めいれい追加ついかされた。これらの命令めいれいはCPUIDのCMOVビットがセットされていれば使用しようできる。

Pentium III世代せだいからFXSAVE, FXRSTOR命令めいれい追加ついかされた。これらの命令めいれいはCPUIDのFXSRビットがセットされていれば使用しようできる。

Pentium 4 (Prescott)

[編集へんしゅう]

Pentium 4 (Prescott)世代せだいから内蔵ないぞうのFPUにFISTTP命令めいれい追加ついかされた。この命令めいれいはCPUIDのSSE3ビットがセットされていれば使用しようできる。

CPUIDで「Deprecates FPU CS and FPU DS」ビットがセットされているとFXSAVE命令めいれいなどで、FPU CS, FPU DSを保存ほぞんしない。

関連かんれん記事きじ

[編集へんしゅう]

脚注きゃくちゅう

[編集へんしゅう]

参考さんこう文献ぶんけん

[編集へんしゅう]
  • Robert L.Hummelちょ づちでん浩一こういちやく 80x86/80x87ファミリー・テクニカルハンドブック 技術評論社ぎじゅつひょうろんしゃ ISBN 4-87408-588-1
  • 「SuperASCII 1991ねん3がつごうだい2かんだい3ごう株式会社かぶしきがいしゃアスキー出版しゅっぱん、1991ねん3がつ1にち 

外部がいぶリンク

[編集へんしゅう]