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

Intel 80286

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
80286
Intel 80286 (PGA)
生産せいさん時期じき 1982ねんから1991ねんまで
生産せいさんしゃ Intel, IBM, AMD, Harris (インターシル), シーメンス, 富士通ふじつう
CPU周波数しゅうはすう 5 MHz から 25 MHz
FSB周波数しゅうはすう 5 MHz から 25 MHz
命令めいれいセット x86 (16ビット)
パッケージ 68ピン PLCC・LCC・PGA
ぜん世代せだいプロセッサ Intel 80188
次世代じせだいプロセッサ Intel 80386
トランジスタ 134000
コプロセッサ Intel 80287
テンプレートを表示ひょうじ
Intel 80286 (PLCC)

Intel 80286(インテル 80286)はインテル16ビットマイクロプロセッサ (CPU)。IBMPC/AT日本にっぽんではPC-9800シリーズ)およびその互換ごかんによってひろ普及ふきゅうした、DOS時代じだい代表だいひょうてきパーソナルコンピュータ (PC) ようプロセッサであった。

概要がいよう

[編集へんしゅう]

1982ねん2がつ1にち発表はっぴょう1984ねんから6MHzばんと8MHzばん出荷しゅっかされた。134,000トランジスタ集積しゅうせきした1.5μみゅーmのNMOSプロセス(インテルの呼称こしょうだとHMOS-III)で製造せいぞうされ、性能せいのう大幅おおはば増加ぞうかさせるパイプラインを構成こうせいする4つの独立どくりつしたユニット(アドレスユニット、バスユニット、命令めいれいユニットと実行じっこうユニット)をっていた。クロック周波数しゅうはすうは6、8、10、12MHz があった。パッケージには68ピンPLCC、LCC、PGAがあった。

8086ソフトウェア上位じょうい互換ごかんせいち、より高速こうそく命令めいれい実行じっこう可能かのうどうクロック8086やく2.5ばい)。また、物理ぶつりメモリ空間くうかんが16MBに拡張かくちょうされ、1GBの仮想かそう記憶きおくマルチタスク処理しょり対応たいおうしている。 また、インテルはこのモデルまではセカンドソース推進すいしん戦略せんりゃく採用さいようしたため、AMD富士通ふじつうシーメンスハリス・コーポレーション英語えいごばん以降いこう、ハリスと表記ひょうき)からもセカンドソースひん供給きょうきゅうされた。とくにAMDとハリスは、ライセンスがけられない80386対抗たいこうするため、16、20MHz、ハリスは25MHz、といった、よりこうクロックの80286を市場いちば投入とうにゅうした。後述こうじゅつするようにDOSで動作どうささせるかぎり、どういちクロックの80386よりもたか実行じっこう速度そくどられたからである。

インテルしゃのiAPX 286 Programmer's Reference Manual[1]では、CPUの80286と後述こうじゅつ周辺しゅうへんLSIわせがiAPX 286であるとしている[ちゅう 1]

対応たいおうソフトウェア

[編集へんしゅう]

808680186たいする上位じょうい互換ごかんせいリアルモードくわえて、プロセスやメモリを保護ほごするプロテクトモード追加ついかし、これをサポートする命令めいれい追加ついかされた。また、マルチタスクオペレーティングシステム実装じっそうするさい必要ひつよう仕組しくみや命令めいれいぐん拡張かくちょうされ、そのの32ビットCPUへつながる基礎きそができあがった。4階層かいそう特権とっけんレベル、仮想かそう記憶きおく機能きのう、メモリ保護ほご機能きのう、TSS(Task state segment)を使用しようしたタスクスイッチ機能きのうなどをつ。

PC DOSおよびMS-DOS
IBMが1984ねんにPC/XTの後継こうけい機種きしゅPC/ATを発表はっぴょうしたとき、8086/8088とリアルモード互換ごかんせいつ80286を採用さいようした。しかし、プロテクトモードをかして設計せっけいされたオペレーティングシステムは一般いっぱんけに普及ふきゅうしておらず、80286はもっぱら高速こうそくな8086としてPC-DOS (MS-DOS) じょう利用りようされることがおおかった。
DOS/V
前述ぜんじゅつとおりPC/ATは80286であるため、AT互換ごかんよう日本語にほんごOSであるDOS/Vは80286以上いじょうのシステムが前提ぜんていとなっている。
Windows 3.x
Windows 3.0や英語えいごばんWindows 3.1において、いずれもスタンダードモードでは、80286のプロテクトモードが活用かつようされた。Windows 3.0の発売はつばいは、IBM PC/ATの発売はつばいから6ねんの1990ねんであった。
日本語にほんごばんWindows 3.1以降いこう[2][3][4]、およびWindows for Workgroups 3.11以降いこう[5]は80286には対応たいおうしていない。
OS/2 1.x
PC DOSおよびMS-DOS後継こうけいのプロテクトモードようオペレーティングシステムとしてIBMマイクロソフト共同きょうどう開発かいはつしたが、パソコンようOSのひとつとしての地位ちい獲得かくとくするにとどまった。OS/2 1.0の発売はつばいは、IBM PC/ATの発売はつばいから3ねんの1987ねんであった[6]
OS/2 2.0以降いこうは80286には対応たいおうしていない。
XENIX
マイクロソフトによって開発かいはつされたUNIXである。

リアルモードへの復帰ふっき

[編集へんしゅう]

80286で、DOSやBIOS資産しさん継承けいしょうしつつ、さら仮想かそう記憶きおく機能きのうかすためにはリアルモードとプロテクトモードのあいだ往復おうふくすることが必要ひつようだが、80286にはプロテクトモードからリアルモードへの復帰ふっき命令めいれいく、復帰ふっきにはCPUのリセット信号しんごうせん有効ゆうこうにするしかなかった。そのため、80286搭載とうさいでは特定とくていのI/Oポートを操作そうさすることによりCPUのリセットパルスを発生はっせいさせるハードウェアをっており、ソフトウェアからCPUのみのリセットをおこなうことができた。BIOSの初期しょきプログラムのなか通常つうじょうのハードウェアリセット(電源でんげんONまたはリセットスイッチ押下おうか)と前述ぜんじゅつのソフトウェアリセットを区別くべつし、初期しょき方法ほうほうえるという処理しょり必要ひつようだった。これら一連いちれん処理しょりはオーバーヘッドがおおきいため、結果けっかてきに80286をもちいたリアル/プロテクトモードあいだのスイッチングは効率こうりつてきなものとなった。

なお後継こうけいの80386以降いこうでは、りょうモードあいだ任意にんい往復おうふくできる機能きのう仮想かそう86モードなどをそなえていた。

リアルモードへもどるための方法ほうほうはハードウェア独自どくじのものとなっており、具体ぐたいてき手順てじゅん以下いかのようにハードウェアによってことなる。

IBM PC/AT[7][8]
80286を搭載とうさいしたIBM PC/ATではキーボードコントローラのI/Oにリセット機能きのう搭載とうさいされていた。これはI/Oポート64hにあり、通例つうれいはFEhをみそのbit0を0にすることでリセット動作どうさとなる。これに先立さきだ当該とうがいプログラムはリセット処理しょり再開さいかいするアドレスCS:IPをBIOS Data Areaの0040:0067hに保存ほぞんする。それ以外いがいのスタックの位置いち(SS:SP)などプログラムの動作どうさ継続けいぞく必要ひつよう情報じょうほう当該とうがいプログラム自身じしんのデータ領域りょういきなどに保存ほぞんする。つぎにリセット動作どうさめるシャットダウンコードをRTCよう 不揮発ふきはつせいCMOSメモリのオフセット0FhにI/Oポート70h, 71hを使用しようしてむ。5をめばリアルモードへの復帰ふっき、0をめば通常つうじょう電源でんげんON、またはリセットスイッチ押下おうかである。プロテクトモードからもどるとBIOSはBIOS Data Areaに保存ほぞんしたアドレスから当該とうがいプログラムの実行じっこう再開さいかいさせる。当該とうがいプログラムはあらかじめ保存ほぞんしておいたスタックの位置いちなどの情報じょうほうもどす。
NEC PC-9800シリーズ[9][10][11]
PC-9800シリーズでは1986ねん登場とうじょうしたPC-9801VX[12]に80286とV30の両方りょうほう搭載とうさいされ、このとき80286とV30をえるためのリセットようI/Oポートがもうけられている。該当がいとうではI/O 00F0hに0を出力しゅつりょくすることでCPUがV30にわらずにリセットされるが、これに先立さきだちリセット処理しょり続行ぞっこうするかさい起動きどうするかを事前じぜん設定せっていしておく必要ひつようがある。この設定せっていはI/O 0035hのbit5,7にあり、さい起動きどう場合ばあい両方りょうほうのbitを1に、処理しょり続行ぞっこう場合ばあいはbit7を0に設定せっていする[ちゅう 2]処理しょり続行ぞっこうする場合ばあい事前じぜんもどりアドレスとなるCS:IPをスタックに保存ほぞんPUSH)したうえで、そのスタックの位置いち(SS:SP)をメモリアドレス0000:0404から0407までの4バイトに保存ほぞんしておく必要ひつようがある。

HMAの活用かつよう

[編集へんしゅう]

上記じょうきとおり80286はリアルモードとプロテクトモードをそなえており、起動きどう直後ちょくごやMS-DOSでは基本きほんてきに8086や80186と互換ごかんせいたかいリアルモードで動作どうさする。

8086では1MiB(000000H - 0FFFFFH)のメモリ空間くうかんつが、本来ほんらい16ビットのレジスタでは64KBまでのアドレス(00000H - 0FFFFH)しか表現ひょうげんできない。そこで16ビットレジスタを2つ用意よういし、まず1MBちゅうのメモリ空間くうかんからアドレスの「原点げんてん」を10Hバイト単位たんい大雑把おおざっぱ指定していし、もうひとつのレジスタでそこから上位じょういの64KBまでをアクセスできるようにしていた。したがって「原点げんてん」をしめすセグメントレジスタを最大さいだいの0FFFFHに設定せっていすれば、0FFFF0Hからさらに上位じょういの64KBすなわち1MBをえる10FFEFHまでアドレスを表現ひょうげんできることになる。しかし8086ではアドレスせんがA0 - A19の20ほんしか用意よういされていないため100000H - 10FFEFHのアドレスにはアクセスできず、けたあふれした部分ぶぶんは000000H - 0FFEFHにラップアラウンドしてアクセスすることになる。

80286ではこのようなラップアラウンドはこらないため、インテルしゃのiAPX 286 Programmer's Reference Manual[1]では「もしリアルモードのプログラムがアドレス空間くうかんのラップアラウンドに依存いぞんしている場合ばあいたとえばFFF0:0400 = 0000:0300)、上位じょういアドレス4ビットをゼロにするために外部がいぶハードウェアを使用しようすべきである」としている[ちゅう 3]

アドレスせんを24ほんつ80286を採用さいようしたシステム(PC/ATなど)では、ラップアラウンドを前提ぜんていつくられたソフトウェアとの互換ごかんせい維持いじしつつ100000H以上いじょうのメモリにもアクセスできるように、21ほんのアドレスせん (A20) の無効むこう有効ゆうこうえるハードウェアをっていた。特定とくていのI/Oポート(PC/ATではキーボードコントローラ)からA20を有効ゆうこうにするとリアルモードのままでも64Kバイト程度ていど上位じょういメモリを参照さんしょうすることが可能かのうになり、HMAばれた。

HMAは64Kバイト程度ていどであるが640Kバイトのやく10%にも相当そうとうし、メモリ枯渇こかつくるしむDOSユーザーにわずかなすくいとなった。80386以降いこうのプロセッサでもHMAは使用しようできる。

キャッシュを内蔵ないぞうした80486以降いこうのCPUではA20を無効むこうにする機能きのう内蔵ないぞうし、CPUにA20M#というピンを追加ついかした[13]。これは外部がいぶハードウェアでA20を無効むこうにしても80486がキャッシュに保存ほぞんされたHMAにアクセスしてしまうためである。このA20M#を制御せいぎょするのは、PC/ATではキーボードコントローラで変化へんかしていない。

なお、80286は16Mバイトのうしろのやく64Kバイトにアクセスした場合ばあい先頭せんとうの000000H番地ばんちにラップアラウンドにするが80386ではこのラップアラウンドはこらない。このことが問題もんだいになる場合ばあいは、80386のページング機能きのう使用しようして16Mバイトのうしろの64Kバイトの領域りょういき先頭せんとうの000000Hにマッピングすることで回避かいひできる[14]

80286の判別はんべつ

[編集へんしゅう]

80286にはCPUID命令めいれいく、インテルはフラグレジスタ使つかったCPUの判別はんべつ方法ほうほう紹介しょうかいしている[15]

PUSHF/POPF命令めいれいきできる16ビットぶんのフラグのうち、上位じょうい4ビットは8086世代せだい(V30[ちゅう 4]、80186などをふくむ)では使つかわれていないやくビットとなっていた。実際じっさいはその部分ぶぶんが1111bとしてせたものの、変更へんこうはできなかった。80286ではこの部分ぶぶんがプロテクトモードで使つかわれるようになったため、リアルモードではゼロクリアされた状態じょうたいになった。さらに仮想かそう86モードをつ80386からはリアルモードにおいてもこのビットが変更へんこう可能かのう仕様しようになっている。すなわちリアルモードの時点じてん (BIOSやMS-DOS) において、フラグレジスタのbit15-12が1111bから変更へんこうできなければ8086世代せだい、0000bから変更へんこうできなければ80286、そのどちらでもない、つまり一部いちぶでも変更へんこう可能かのうであれば80386以降いこう判断はんだんできる。

追加ついか命令めいれい一覧いちらん

[編集へんしゅう]

8086から使用しようできる基本きほん命令めいれいセットにくわえ、以下いか命令めいれいセットが追加ついかされた。

一般いっぱん命令めいれい

[編集へんしゅう]

80286であらたに追加ついかされた命令めいれいのうち11個いっこ拡張かくちょう命令めいれいセットは、のち発表はっぴょうされた80186にも採用さいようされ、共通きょうつう使用しようできた。このほか既存きそん命令めいれいではIMULPUSH即値そくち(イミディエイト)が指定していできるようになり、シフト・ローテイト命令めいれいではCLレジスタをかいさずに 1 以外いがい直接ちょくせつ指定していできるようになった。これらは80186でも同様どうようである。

システム命令めいれい

[編集へんしゅう]

80286で追加ついかされたシステム制御せいぎょ/プロセッサ制御せいぎょ命令めいれいはいずれもプロテクトモードないしは80287関連かんれん命令めいれいである。このほか既存きそん命令めいれいとしてはI/O(入出力にゅうしゅつりょく命令めいれいるいもシステム制御せいぎょ使つかわれる命令めいれいであり、プロテクトモードでは特権とっけん命令めいれいあつかいになった。HLTも特権とっけんレベルに依存いぞんするシステム命令めいれいとなった。

SGDT, SIDT, SLDT, STR, SMSWは特権とっけん命令めいれいではなく、アプリケーションプログラムからも実行じっこう可能かのうである。このことは30ねん以上いじょうつづいている。インテルは、CPUIDでUMIP(User-Mode Instruction Prevention)ビットがセットされているCPUではこれらの命令めいれい特権とっけん命令めいれいにする機能きのうつとしている[13]

LGDT … Load Global Descriptor Table Register
SGDT … Store Global Descriptor Table Register
LIDT … Load Interrupt Descriptor Table Register
SIDT … Store Interrupt Descriptor Table Register
LLDT … Load Local Descriptor Table Register
SLDT … Store Local Descriptor Table Register
LAR … Load Access Right
LSL … Load Segment Limit
ARPL … Adjust Requested Privilege Level
VERR … Verify Read Access
VERW … Verify Write Access
LTR … Load Task Register
STR … Store Task Register
CLTS … Clear Task Switched Flag
LMSW … Load Machine Status Word
SMSW … Store Machine Status Word

廃止はいしされた命令めいれい

[編集へんしゅう]

80286ではPOP CS命令めいれい(オペコード 0F)は廃止はいしされた。80186/V30も同様どうようである。このオペコードは、80286以降いこう拡張かくちょう命令めいれいのプリフィックスとして使用しようされた。80286で使つかわれている0Fプリフィックスは、上記じょうきのシステム命令めいれいのうち、ARPL以外いがいの15命令めいれい該当がいとうする[ちゅう 5]

非公開ひこうかい命令めいれい

[編集へんしゅう]

80286の非公開ひこうかい命令めいれいであるLOADALL使用しようするとリアルモードのままで、プロテクトメモリをふくむ16Mバイトのメモリにアクセス可能かのうとなる。

既存きそん命令めいれい仕様しよう変更へんこう

[編集へんしゅう]

80286はリアルモードにおいて8086や80186とたか互換ごかんせいつものの、完全かんぜん等価とうかというわけではない。ことなるてんとしては、80286以降いこうではPUSH SP命令めいれい挙動きょどう変更へんこうされている[ちゅう 6][16]。また既存きそん命令めいれいわせであっても、プロテクトモードじょうでは挙動きょどうことなる場合ばあいがある[ちゅう 7]

このほか変更へんこうてんとして、シフト・ローテイト命令めいれい指定していできるCLレジスタの即値そくちが31以下いか限定げんていされるようになった。指定していできるは8ビットだが、実際じっさいには下位かい5ビットぶんしか使つかわれない。この変更へんこうは80186も同様どうようだが、V30では適用てきようされておらず、8086相当そうとう挙動きょどうとなる。たとえばシフト命令めいれいで31(16進数しんすうで0x1F)をえる指定していした場合ばあい、8086やV30では演算えんざん結果けっかかならずゼロになるが、80186/286以降いこうでは32でった余剰よじょうぶんだけシフト演算えんざんされる。

除算じょざんエラー(み0)が発生はっせいした場合ばあい、スタックに保存ほぞんされるCS:IPは8086では除算じょざんエラーを発生はっせいさせたつぎ命令めいれいしているが、80286では除算じょざんエラーを発生はっせいさせた命令めいれい自身じしんしている。

8086ではFPU命令めいれい実行じっこうちゅうWAIT命令めいれいでCPUをめておく必要ひつようがあったが、80186以降いこうではその必要ひつようくなった。また、LOCK命令めいれいはもともとあらゆる命令めいれいにおいてバスをロックできる仕様しようだったが、80286以降いこうではロックできる命令めいれいとできない命令めいれいめられている。

あたらしいレジスタ

[編集へんしゅう]

システムレジスタ

[編集へんしゅう]

GDTR (Global Descriptor Table Regsister)

IDTR (Interrupt Descriptor Table Regsister)

LDTR (Local Descriptor Table Regsister)

TR (Task Register)

フラグレジスタ

[編集へんしゅう]

16bitあるフラグレジスタのうち、bit0からbit11までの12ビットは8086と同様どうようのものが用意よういされている。前述ぜんじゅつとおり80186以前いぜんでは上位じょうい4ビットが使つかわれていなかったが、80286ではマルチタスクOSを想定そうていしたあらたなフラグが追加ついかされている。

IOPL (IO privilege level) フラグ
bit12・13をもちいる2ビットぶんのフラグで、0から3までのフラグ状態じょうたいち、いわゆるIO特権とっけんレベルあらわす。通常つうじょうPOPF命令めいれいでなければ変更へんこうできない。
NT (Nested task) フラグ
bit14。うらのタスクが有効ゆうこうであることをしめすフラグ。みなどでされた場合ばあいに1となり、これによりIRET命令めいれいでのリターン処理しょり動作どうさわる。

なおbit15はやくビットになっており、80286では不定ふてい(80386以降いこうは0)とされている[ちゅう 8]

80286ではMSW (Machine status word) レジスタが追加ついかされた。MSWをきするLMSWSMSWという専用せんよう命令めいれい用意よういされている。MSWは16bitぶんあるが、80286で定義ていぎされているのは下位かい4ビットぶんだけである。80386以降いこうではあらたにもうけられたコントロールレジスタに統合とうごうされ、CR0レジスタの下位かい16ビットが該当がいとうするが、互換ごかんせいのためMSWとしてもアクセスできる。

PE (Protection enable)
MSWのbit0。プロテクトモードであることをあらわす。このbitをセットすることでプロテクトモードになる。
MP (Math present)
MSWのbit1。FPU存在そんざいする場合ばあいにセットされる。
EM (Emulate math coprocessor)
MSWのbit2。このビットがセットされているとFPUがあつかいになる。
TS (Task switched)
MSWのbit3。タスクにセットされる。

[編集へんしゅう]

8086ではみは、み4まで定義ていぎされており、80286ではみ5以降いこう追加ついかされた。み5から31まではインテル予約よやくみであったが、IBM PCではみ8から15までを8259A経由けいゆ外部がいぶ割込わりこみにてていた[ちゅう 9]。プロテクトモードのOS/2などは8259Aの番号ばんごうべつ変更へんこうする[18]

  • み0:除算じょざんエラー
除算じょざん命令めいれい(DIV, IDIV)で0でろうとした場合ばあいしょうおおきすぎてレジスタにおさまらない場合ばあい発生はっせいする。
  • み1:シングルステップ
  • み2:NMI(マスク不可能ふかのうみ)
  • み3:ブレークポイント
  • み4:INTOオーバーフロー
  • み5:バウンドチェック
BOUND命令めいれい指定していされたオペランドが、配列はいれつ範囲はんいがいていると発生はっせいする。
  • み6:無効むこうオペコード
  • み7:コプロセッサ不在ふざい
タスクスイッチ、または、80287が装着そうちゃくされていないときに80287の命令めいれい実行じっこうすると発生はっせいする。
  • み8:ダブルフォルト
例外れいがい処理しょりしているときにさらにべつ例外れいがい発生はっせい処理しょりできなくなったときに発生はっせいする。
  • み9:コプロセッサ・セグメント・オーバーラン
  • み10:無効むこうタスク・ステート・セグメント
  • み11:セグメント不在ふざい
メモリじょういスワップアウトされたセグメントにアクセスした場合ばあい発生はっせいする。このみは80286のプロテクトモードで仮想かそう記憶きおくのために使用しようされる。
  • み12:スタック・フォルト
  • み13:一般いっぱん保護ほご例外れいがい
80286のリアルモードでは、オフセットFFFFにあるワードオペランドをアクセスしたり、オフセットFFFFから複数ふくすうバイトの命令めいれい実行じっこうしようとすると発生はっせいする。8086ではオフセット0にラップアラウンドし例外れいがい発生はっせいしない。80286のプロテクトモードでは、データセグメントない命令めいれい実行じっこう、コードセグメントないのデータのえ、現在げんざい特権とっけんレベルよりたか特権とっけんレベルのセグメントへのアクセスなどでも一般いっぱん保護ほご例外れいがい発生はっせいする。
  • み14 - 15:インテル予約よやく
  • み16:コプロセッサ・エラー
IBM PC/ATでは80287のERROR#ピンを80286に直結ちょっけつせず、みコントローラ8259Aに接続せつぞくする設計せっけいとした。コプロセッサ(FPU)を内蔵ないぞうした80486以降いこうのCPUではIBM PC/ATとの互換ごかんせい維持いじするためにCPUにFERR#, IGNNE#というピンを追加ついかしたが、CR0レジスタのNEビットを1にすると8259A経由けいゆではなく本来ほんらいみ16でコプロセッサのエラーを通知つうちする[13]
  • み17 - 31:インテル予約よやく

ディスクリプターキャッシュ

[編集へんしゅう]

80286ではセグメントレジスタには可視かしとディスクリプターキャッシュがあり、プログラムから直接ちょくせつ ディスクリプターキャッシュ変更へんこうはできない。プロテクトモードでは、セグメントレジスタの変更へんこうに、グローバルディスクリプターテーブル、またはローカルディスクリプターテーブルからディスクリプターキャッシュにアクセスけん、ベースアドレス、セグメントリミットがまれ、実際じっさいのメモリアクセスはディスクプターキャッシュ使つかわれる。

リアルモードでは、セグメントレジスタの変更へんこうに、セグメントレジスタの内容ないようが16ばいされたものがディスクリプターキャッシュのベースアドレスにロードされ、実際じっさいのメモリアクセスはディスクプターキャッシュ使つかわれる。このためリアルモードからプロテクトモードに移行いこうした直後ちょくご、セグメントレジスタのがプロテクトモードでは不正ふせいでもハングアップや例外れいがい発生はっせいしない。

また、80286は電源でんげんONまたはリセット、コードセグメントのディスクリプタキャッシュは、ベースアドレスがFF0000Hに設定せっていされ、IPはFFF0に設定せっていされるので、FFFFF0Hから実行じっこう開始かいしされる特殊とくしゅなリアルモードではじまる。この特殊とくしゅ状態じょうたいはCALL FAR, JMP FAR命令めいれいなどでセグメントレジスタが更新こうしんされるまでつづく。

可視かし ディスクリプターキャッシュ
セグメントレジスタ ベースアドレス(24ビット) アクセスけん(8ビット) セグメントリミット(16ビット)

周辺しゅうへんLSI

[編集へんしゅう]
80286よう数値すうち演算えんざんコプロセッサ。8086ようのコプロセッサである8087とことなりI/Oポート (00F8H - 00FDH) をもちいてデータや命令めいれいのやりりをおこなう。パッケージは40ピンDIPである。
  • 82284 クロック生成せいせい
  • 82288 バスコントローラ
  • 82289 バス調停ちょうてい
  • 8259A みコントローラ

CPUアクセラレータ

[編集へんしゅう]

80286システムはCPUアクセラレータ製品せいひんにより、より上位じょういのプロセッサが利用りようできる場合ばあいがあった。そのさい、486相当そうとう製品せいひん起動きどうにソフトウエアでCPUキャッシュを有効ゆうこうにすることで高速こうそくさせる必要ひつようがあった[ちゅう 10]。80286システムは16ビットバスであるため、外部がいぶ16ビットであるi386SXにピン互換ごかんCyrix Cx486SLC登場とうじょうは、これをもちいた80286ようのCPUアクセラレータ製品せいひん各社かくしゃから登場とうじょうした。とく日本にっぽん主流しゅりゅうだったPC-9800シリーズおよびEPSON PC-286シリーズ[ちゅう 11]では80286をソケット経由けいゆ実装じっそうした機種きしゅおおく、CPU交換こうかん容易よういだった。結果けっかてきV30[ちゅう 12]のi386SX[ちゅう 13]くらべてCPUのアップグレードパスにめぐまれ、様々さまざまなバリエーションのCPUアクセラレータ製品せいひんんだ[19]

  • ABM 486GT-Xは前述ぜんじゅつのような486互換ごかんプロセッサを80286ピン互換ごかんのワンチップサイズに封入ふうにゅうしたもので、CPUアクセラレータとうより80286ピン互換ごかんCPUにちかいものだった。
  • CPUアクセラレータ基板きばんじょうCyrix Cx486DLCのような外部がいぶ32ビットプロセッサをうごかす製品せいひん存在そんざいした。
  • メルコはシステムバスのクロックに関係かんけい独立どくりつクロック動作どうさする製品せいひんしていた。
  • 最終さいしゅうてきにメルコやアイ・オあいお・デタ機器たききから発売はつばいされていたIBM 486SLC2もちいた80286製品せいひんでは最大さいだい4ばいそく(やく50MHz)で動作どうさした[20]
数値すうち演算えんざんプロセッサ
おおくの80286ようCPUアクセラレータはその基板きばんじょう80387のソケットもしくはその互換ごかんチップをちょくけしており、386/486互換ごかんCPUかわそうに80387相当そうとう数値すうち演算えんざん機能きのう利用りようできるようになっていた[21]
HIMEM.SYSの問題もんだい
PC-9800シリーズにおいては、80286のシステム[ちゅう 14]とi386以上いじょうのシステム[ちゅう 15]ではA20ラインを制御せいぎょするI/Oポートがことなり、前者ぜんしゃにi386以上いじょうのプロセッサをせた場合ばあい、そのシステムには後者こうしゃにあるI/Oポート00F6hが[11][ちゅう 16]、MS-DOS付属ふぞくのメモリマネージャ(HIMEM.SYS)がA20ラインを正常せいじょうにコントロールできないむね警告けいこく問題もんだいられている。その対策たいさくとして、いくつかのCPUアクセラレータではCPUキャッシュドライバとはべつ独自どくじのメモリマネージャを添付てんぷ、もしくは専用せんようメモリマネージャにCPUキャッシュドライバを統合とうごうしていた。
日本語にほんごばんWindows 3.1への対応たいおう
上記じょうきとおり、英語えいごばんWindows 3.1は80286プロテクトモードをサポートしたが[22]、マイクロソフトばんやNECばん日本語にほんごばんWindows 3.1では80286をサポートしなかった[2][3][4]。CPUをi386以上いじょうにアップグレードした場合ばあいでもマザーボードが80286ようであることをWindows 3.1のインストーラが感知かんちしてセットアップを中断ちゅうだんしてしまう場合ばあいがあり、これを防止ぼうしするために80286ようCPUアクセラレータ製品せいひんのいくつかはWindows 3.1をインストールできるようにするためのツールが用意よういされていた[23]
ただし80286システムはCPUを386以上いじょうえてもメモリまわりに制約せいやくのこるケースがおおく、快適かいてきにWindowsを利用りようできるケースはかぎられていた。もともと80286全盛ぜんせい時代じだい機種きしゅにはプロテクトモードようの1MBをえるアドレスのメモリ(プロテクトメモリ)に専用せんよう高速こうそくスロットがいか、あっても増設ぞうせつできる容量ようりょうすくないケースがあった。そのうえ本来ほんらいのDOS用途ようとではプロテクトメモリをEMS転用てんようすると80286では効率こうりつわる低速ていそくになる[ちゅう 17]ことがられていた[ちゅう 18]結果けっかてきに80286ではWindows用途ようといた専用せんようプロテクトメモリが普及ふきゅうせず、DOS用途ようとのメモリとして汎用はんよう拡張かくちょうスロットようメモリがおも使つかわれていた。そのなかにはプロテクトメモリに転用てんようできるものもあったが、プロテクトメモリ用途ようととしては専用せんようスロットに増設ぞうせつするよりも低速ていそくであるため、メモリに負担ふたんをかけるWindows用途ようとではそれによる速度そくど低下ていか顕著けんちょあらわれた。
なおWindows 9598はOS自体じたいはや段階だんかいで80286以下いかのマザーを感知かんちして起動きどうめてしまう仕様しよう[ちゅう 19]のため、事前じぜんにDOSを起動きどうするなどしてCPU情報じょうほうさい設定せってい[ちゅう 20]したうえで高速こうそくさい起動きどうツールなどでその「はや段階だんかい」をパスできるように工面くめんするか、もしくはOSの起動きどうプログラム[ちゅう 21]改造かいぞうして機種きしゅ判別はんべつルーチンをつぶさないかぎり、たとえCPUをえても80286マザーじょうでWindows 95をうごかすことはできない。

脚注きゃくちゅう

[編集へんしゅう]

注釈ちゅうしゃく

  1. ^ 原文げんぶん:iAPX 286 - 80286 CPU family
    Each processor family consists of the CPU(e.g., 80286), processor extensions(80287 for the iAPX 286), and bus support circuits, such as the 82284 Clock Generator and 82288 Bus Controller.
  2. ^ 通常つうじょうこの操作そうさはI/O 0037hのコントロールポートをかいしておこなう。I/O 0037hに0AhをめばI/O 0035hのbit5が0に、0Bhをめば1になる。同様どうように0Eh・0FhをめばI/O 0035hのbit7がそれぞれ0・1に設定せっていされる。
  3. ^ 原文げんぶん:If any real-mode program relies on address space wrap-around (e.g. FFF0:0400 = 0000:0300), then external hardware should be used to force the upper 4 addresses to zero during real mode.
  4. ^ 厳密げんみつには、8086/80186のフラグレジスタで使用しようだったやくビットの一部いちぶがV30では8080エミュレーションで使つかわれるが、x86として動作どうさしているかぎりは8086/80186互換ごかん挙動きょどうとなる。
  5. ^ とくに80386以降いこうでは、条件じょうけんジャンプでnearジャンプ(-32768から+32767までの相対そうたいアドレス指定してい)をおこなうときのプリフィックスにも使つかわれるようになった。80286およびそれ以前いぜん条件じょうけんジャンプ命令めいれいはshortジャンプ(-128から+127までの相対そうたいアドレス指定してい)しか使つかえない。
  6. ^ 8086のPUSH SP命令めいれいでスタックポインタSPを退避たいひさせる場合ばあい、SPから2が減算げんざんされたのちのSP記録きろくされる。たとえば、PUSH SPのあとPOP AXを実行じっこうするとAXにはSP-2がロードされる。80286以降いこうではPUSH SPのさい減算げんざんされるまえもとのSP退避たいひするようになった。この挙動きょどうちがいはプログラムが8086で実行じっこうされているのか、80286で実行じっこうされているのかを判別はんべつすることに使用しようできる。
  7. ^ 80286ではフラグレジスタの使つかわれていなかったやくビットのいくつかにあらたな意味いみたせており、そのによって一部いちぶ既存きそん命令めいれい挙動きょどう影響えいきょうる。たとえば既存きそんPOPF命令めいれいはプロテクトモードにおいてIO特権とっけんレベルをしめすIOPLフラグが変更へんこうできるようになっており、これによって既存きそん命令めいれいのうち特権とっけんレベルに依存いぞんするようになった命令めいれい(I/Oや、みフラグの制御せいぎょ命令めいれい)が影響えいきょうける。またのタスクからされたプログラムではそのためのNTフラグがっており、IRET動作どうさ影響えいきょうする。
  8. ^ V30ではbit15が「エミュレーションモード・フラグ」にてられており、8080エミュレーション機能きのう関係かんけいする。
  9. ^ PC-9801では初代しょだいから2の8259Aをカスケード接続せつぞくして入力にゅうりょくを15ほん拡張かくちょうしており、み8から23までの外部がいぶみが定義ていぎされていた[17]
  10. ^ 80286システムを486互換ごかんCPUにえても起動きどうはCPUキャッシュが有効ゆうこうになっていない。一般いっぱんにCPUはメモリに頻繁ひんぱんにアクセスしながら動作どうさするため、CPUキャッシュが無効むこうでメモリアクセスがまったく高速こうそくしていない状態じょうたいではCPU内部ないぶ倍率ばいりつ関係かんけいくほとんど処理しょり速度そくど向上こうじょうしない。
  11. ^ EPSON PC-286シリーズの場合ばあいはロットによってCPUソケット形状けいじょうCLCC(セラミック・リードレス・チップ・キャリア)という特殊とくしゅなものが混在こんざいしており、その場合ばあい半田はんだごてをもちいるか、業者ぎょうしゃ依頼いらいしてCPUソケットを交換こうかんする必要ひつようがあった[19]
  12. ^ 8086世代せだいのx86CPUはNECのピン互換ごかんCPU V20やV30と交換こうかんすることでCPU性能せいのう向上こうじょうできたことがられるが、V30ようとしてはおも拡張かくちょうスロットに増設ぞうせつするタイプのCPUアクセラレータが製品せいひん少数しょうすうられていた程度ていどで、CPUをえるタイプのCPUアクセラレータ製品せいひん本格ほんかくてき出回でまわるようになったのは80286以降いこうのプラットフォームからである。これは8086/V30はアドレスとデータを時分じぶんわり入出力にゅうしゅつりょくしていたり、8086/V30よう周辺しゅうへんチップとの接続せつぞくせいくなかったりなど、それ以降いこうのCPUと単純たんじゅんえるには不向ふむきだったこともある
  13. ^ 廉価れんかばんプロセッサであるi386SXではCPUソケットが省略しょうりゃくされており、基本きほんてき基板きばんちょくけとなっていた。CPUアクセラレータを動作どうささせるには外部がいぶからCPUを無効むこうにできる機能きのう必須ひっすであり、これに対応たいおうしたi386SXはロットがかぎられていた。
  14. ^ i386DXを搭載とうさいするPC-98XL2ふく
  15. ^ PC-98XL2のぞ
  16. ^ I/Oポート00F2hで制御せいぎょする。このポートはi386以上いじょうのシステムにもある
  17. ^ EMSのページフレームとプロテクトメモリとをCPUがデータをコピーする方式ほうしきのため。この方式ほうしき特別とくべつなハードウェアを必要ひつようとせず「ソフトウェアEMS」とばれる
  18. ^ なおi386以上いじょうかわそうしていればDOS用途ようとであっても専用せんようプロテクトメモリで「仮想かそうEMS」を使用しようしたほうが高速こうそくになる。80286とおな方式ほうしき使用しようするとおそくなる
  19. ^ メモリチェック設定せっていされるワークエリアの機種きしゅ判別はんべつする。
  20. ^ たとえば前述ぜんじゅつのWindows 3.1をインストールできるようにするためのツールを利用りようするなど。
  21. ^ 具体ぐたいてきにはIO.SYS

出典しゅってん

  1. ^ a b iAPX 286 Programmer's Reference Manual including the iAPX 286 Numeric Supplement
  2. ^ a b 『Microsoft Windows Operating System Version 3.1 お使つかいになるまえに』Microsoft Corporation、1993ねん、2ぺーじ。KPN890076-9406。 
  3. ^ a b 日本語にほんごMicrosoft WIndows バージョン 3.1 ライセンス情報じょうほう日本アイ・ビー・エム、1993ねん。66G5342/D42865。 
  4. ^ a b NECばんWindows 3.1
  5. ^ Windows for Workgroups Version History
  6. ^ OS/2のあゆみをかえ
  7. ^ Protected Mode Basics by Robert Collins
  8. ^ トランジスタ技術ぎじゅつ SPECIAL 特集とくしゅう IBM PC & 80286のすべて ISBN 4-7898-3182-5
  9. ^ システムポート” (プレーンテキスト). ウェブテクノロジ. 2018ねん1がつ6にち閲覧えつらん
  10. ^ BIOSが使用しようするシステム共通きょうつういき” (プレーンテキスト). ウェブテクノロジ. 2018ねん1がつ6にち閲覧えつらん
  11. ^ a b CPU,CPU周辺しゅうへん使用しようするI/O” (プレーンテキスト). ウェブテクノロジ. 2018ねん1がつ6にち閲覧えつらん
  12. ^ PC-9801VX
  13. ^ a b c Intel 64 and IA-32 Architectures Software Developer Manuals
  14. ^ 80386システムプログラム 吉田よしだ俊郎としおちょ ム社むしゃ p104 ISBN 4-274-07544-3
  15. ^ インテル(R) プロセッサの識別しきべつとCPUID命令めいれい” (PDF). インテル. 2017ねん12月5にち閲覧えつらん
  16. ^ Jeff Prosise (1990). “Tutor: Distinguishing among CPUs”. PC Mag 9 (13): 426. https://books.google.co.jp/books?id=ofXGcGVTvoEC&lpg=PT433&pg=PT433 2016ねん11月20にち閲覧えつらん. 
  17. ^ 東工大とうこうだい電算でんさん愛好あいこうかい&小高おだかあきらしん、「98ハードにつよくなるほんII」 (1988)、pp.25-30。
  18. ^ Int 50 - IRQ0 relocated by OS/2 v1.x
  19. ^ a b 「PC-98パワーアップ道場どうじょう」 ソフトバンククリエイティブ ISBN 9784797305777
  20. ^ PK-X486S50-L
  21. ^ 別売べつばい数値すうち演算えんざんコプロセッサ HSC-40 ※このページは一部いちぶブラウザでは文字もじけする
  22. ^ Windows 3.1 Hardware Compatibility List - Microsoft
  23. ^ HRX-C12Qキャッシュコントロールユーティリティ

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

[編集へんしゅう]
  • インテルジャパン、CQ出版しゅっぱんしゃ 1984 80286プログラマーズ・リファレンス・マニュアル ISBN 4-87185-605-4
  • 大貫おおぬき広幸ひろゆき田中たなかめぐみかい蓑原みのはらたかし「80286ハンドブック」アスキー出版しゅっぱんきょく(1985ねん)。ISBN 4871481832
  • 成田なりたけいおう「80x86/x87 ハンドブック」ナツメしゃ(1995ねん)。ISBN 9784816318344
  • Robert L.Hummelちょ づちでん浩一こういちやく 80x86/80x87ファミリー・テクニカルハンドブック 技術評論社ぎじゅつひょうろんしゃ ISBN 4-87408-588-1

関連かんれん項目こうもく

[編集へんしゅう]