銀ピン付きセラミックDIPのD8088 | |
| 一般情報 | |
|---|---|
| 発売 | 1979 |
| 製造中止 | 1998年[ 1 ] |
| 共通メーカー | |
| パフォーマンス | |
| 最大CPUクロックレート | 5MHz~16MHz |
| データ幅 | 8ビット |
| アドレス幅 | 20ビット |
| 物理的仕様 | |
| トランジスタ |
|
| コプロセッサ | インテル8087 |
| パッケージ | |
| ソケット | |
| アーキテクチャと分類 | |
| 応用 | デスクトップ、組み込み |
| テクノロジーノード | 3µm |
| 命令セット | x86-16 |
| 製品、モデル、バリエーション | |
| 変異体 |
|
| 歴史 | |
| 前任者 | インテル8085 |
| 後継者 | 80186と80286(どちらも1982年初頭に導入された) |
| サポート状況 | |
| サポートされていません | |
Intel 8088(「エイティエイティエイト」、iAPX 88とも呼ばれる)[ 2 ] [ 3 ] [ 4 ]マイクロプロセッサは、 Intel 8086の派生型である。1979年6月1日に発表された[ 5 ] [ 6 ] [ 7 ] [ 8 ] 8088は、8086の16ビットバスの代わりに8ビットの外部データバスを備えている。しかし、 16ビットレジスタと1メガバイトのアドレス範囲は変更されていない。実際、Intelの資料によると、8086と8088は同じ実行ユニット(EU)を備えており、バスインタフェースユニット(BIU)のみが異なっている。8088は、オリジナルのIBM PCとIBM PC互換機のクローンで使用されていた。
8088は、インテルのプロセッサの多くと同様に、イスラエルのハイファにあるインテルの研究所で、8086の低価格版として設計された。 [ 9 ] 8088は、8ビットのデータパスと8ビットのサポートおよび周辺チップの使用を可能にすることで、経済的なシステムをターゲットにしていた。複雑な回路基板は、発売当時はまだかなり扱いにくく高価だった。8088のプリフェッチキューは、8086の6バイトから4バイトに短縮され、プリフェッチアルゴリズムは、より狭いバスに適応するために若干変更された。[ a ] 8086の基本設計に対するこれらの変更は、インテルのハイファの新しい設計オフィスと研究所に割り当てられた最初の仕事の1つであった。
8088の派生製品で、最大クロック周波数が5MHzを超えるものには、インテルの新しい拡張nMOSプロセスであるHMOSを使用して製造され、最大周波数が8MHzに指定された8088-2がある。その後、完全にスタティックなCHMOS設計の80C88が登場し、0~8MHzのクロック速度で動作できた。また、他のメーカーからも、多かれ少なかれ類似した派生製品がいくつかあった。例えば、NEC V20は、 NECが設計・製造した8088のピン互換で、クロック周波数は同じでわずかに高速な派生製品である。その後のNEC 8088互換プロセッサは、最大16MHzで動作した。1984年、コモドール・インターナショナルは、ライセンスを受けたDynalogic Hyperionクローンで使用するために8088を製造する契約を締結した。これは、同社にとって大きな新方向を示すものと見なされた。[ 10 ] CMOS版は沖電子工業株式会社に外注された。 [ 11 ] 発表時の8088の定価は124.80米ドルであった。[ 12 ] [ 13 ] プラスチックパッケージ版は1981年7月に14.10米ドルで発売された。価格は100個単位の数量である。[ 14 ]インテルはこのマイクロプロセッサを富士通株式会社 に二次発注した。[ 15 ]
8088 はアーキテクチャ的に 8086 と非常によく似ています。主な違いは、8086 の 16 本のデータ ラインではなく、8 本のデータ ラインしかないことです。デバイスのその他のピンはすべて、2 つの例外を除いて 8086 と同じ機能を実行します。まず、ピン 34 はBHEではなくなりました(これは 8086 の上位バイト選択です。8088 には 8 ビット データ バスに上位バイトがありません)。[ 16 ] : 5–97 代わりに、最大モード ステータスSS0を出力します。IO/ Mおよび DT/ R信号と組み合わせて、バス サイクルをデコードできます (一般に、書き込み操作または割り込みが進行中であることを示します)。2 つ目の変更は、メモリ アクセスまたは入出力アクセスが行われているかどうかを通知するピンのセンスが逆になったことです。8088 のピンは IO/ Mです。 8086ではIO /Mとなっている。この逆の理由は、8088を8085と互換性を持たせるためである。[ 16 ]:5–98
クロック周波数、メモリ待機状態の数、および特定のアプリケーションプログラムの特性に応じて、 Intel 8088の平均パフォーマンスは、1秒あたり約0.33~100万命令の範囲でした。[ 17 ]一方、それぞれ2サイクルと3サイクルを要した命令では、1MHzあたり1 ⁄ 3~1 ⁄ 2 MIPSの絶対ピークパフォーマンスが得られました。つまり、10MHzで3~5 MIPSの 範囲です。 mov reg,regALU[b]reg,reg
8086 CPU の実行ユニット (EU) とバスの速度はバランスが取れており、一般的な命令の組み合わせでは、8086 はプリフェッチ キューにある命令をかなりの頻度で実行できました。バスを 8 ビットに削減したことで、8088 ではこれが深刻なボトルネックになりました。8088 では命令フェッチ速度が 8086 に比べて 50% 低下しているため、一連の高速命令によって 4 バイトのプリフェッチ キューがすぐに空になる可能性があります。キューが空の場合、命令の完了にかかる時間はフェッチにかかる時間と同じです。8086 と 8088 はどちらもバス サイクルを完了するのに 4 クロック サイクルかかりますが、8086 では 2 バイトの転送に 4 クロック、8088 では 1 バイトあたり 4 クロックです。そのため、たとえば、EU では実行に 2 クロック サイクルしかかからない 2 バイトのシフトまたは回転命令は、プリフェッチ キューにない場合は、実際には完了するのに 8 クロック サイクルかかります。このような高速命令のシーケンスにより、キューがいっぱいになるのを防ぎ、また一般に、レジスタ オペランドの ALU 命令やデータ移動命令のほとんどすべてとメモリ オペランドの一部を含む、命令バイトあたり 4 クロック未満で実行される基本命令が多いため、実用的なプログラムを実行している間、8088 では EU を少なくとも1 ⁄ 4の時間アイドル状態にすることは事実上不可能であり、半分の時間アイドル状態にすることは難しくありません。つまり、8088 は通常、同じクロック速度で動作する 8086 の約半分の速度で動作しますが、これはバス ボトルネック (唯一の大きな違い) が原因です。
8088 の設計では、低速バスと小さなプリフェッチ キューを特徴とするため、コード実行速度が命令の順序に大きく左右されるという副作用があります。CPU 効率を高めるために 8088 をプログラミングする際は、実行時間の長い命令を可能な限り短い命令でインターリーブすることが重要です。たとえば、文字列の繰り返し操作や 3 バイト以上のシフト操作には、4 バイトのプリフェッチ キューが完全にいっぱいになるまでの時間がかかります。このような低速命令の間に短い命令 (つまり、数バイトの命令) を配置すると、短い命令はキューから取り出されてフル速度で実行できます。一方、低速命令が連続して実行されると、最初の命令の実行後、キューが既にいっぱいになっているためバス ユニットはアイドル状態になります。その結果、後の高速命令で、回避できたはずのフェッチ遅延が発生する可能性が高くなります。単一ビット位置シフトや回転命令など、一部の命令は実行時間の4倍の時間がかかるため、[ c ]全体的な影響は2倍以上の速度低下につながる可能性があります。これらのコードセグメントがループ本体である場合、人間の時間スケールでは実行時間の違いが非常に顕著になる可能性があります。
8088 は (8086 と同様) メモリへのアクセスも遅い。算術および論理命令の実行に使用される同じ ALU が、実効アドレスの計算にも使用される。シフトされたセグメント レジスタの値をオフセット アドレスに加算するための加算器は別個に存在するが、オフセット EA 自体は常にメイン ALU 内で完全に計算される。さらに、EU と BIU (バス ユニット) の疎結合によってユニット間に通信のオーバーヘッドが生じ、4 クロック周期のバス転送サイクルは特に効率化されているわけではない。これを、6502 CPU の 2 クロック周期のバス サイクルや、ほとんどの転送がパイプライン化されて 2 サイクルに短縮される 80286 の 3 クロック周期のバス サイクルと比較してほしい。一般的な ALU 操作やデータ移動操作など、レジスタまたはメモリのいずれかを操作できるほとんどの 8088 命令は、メモリ オペランドの場合、レジスタ オペランドのみの場合よりも少なくとも 4 倍遅くなる。したがって、効率的な 8088 (および 8086) プログラムは、可能な限りメモリ オペランドへの繰り返しアクセスを避け、オペランドをメモリからレジスタにロードしてそこで処理し、完了した結果のみを格納します。8088 は、同時代のプロセッサと比較して比較的大きな汎用レジスタ セットを備えているため、この戦略が実現されています。必要なすべての変数を格納するためのレジスタが不足している場合、レジスタをスタックにプッシュして保存し、ポップして復元することが、メモリを使用してレジスタを拡張する最速の方法です。これは、スタックの PUSH 命令と POP 命令が最も高速なメモリ操作であるためです。80186 以降では、おそらく同じことは当てはまりません。専用のアドレス ALU があり、8088 や 8086 よりもはるかに高速にメモリ アクセスを実行します。
最後に、呼び出し、ジャンプ、割り込みによってプリフェッチ キューがリセットされ、IP レジスタのロードには EU と BIU 間の通信が必要になるため (IP レジスタは BIU にあり、汎用レジスタがある EU にはないため)、これらの操作にはコストがかかります。すべてのジャンプと呼び出しには少なくとも 15 クロック サイクルかかります。条件付きジャンプは、実行されない場合は 4 クロック サイクルかかりますが、実行される場合はプリフェッチ キューのリセットに加えて 16 サイクルかかります。したがって、条件付きジャンプは、ほとんどの場合、特にループ内では実行されないように配置する必要があります。場合によっては、ロジックと移動の一連の操作の方が、同じ結果を得るために 1 つまたは 2 つの命令をスキップする条件付きジャンプよりも高速です。
Intel 8086および8088のデータシートには、専用の乗算命令と除算命令(MUL、IMUL、DIV、IDIV)が搭載されていると記載されていましたが、これらの命令はそれぞれ100~200クロックサイクルと非常に低速です。小さな定数による単純な乗算(シフト演算が可能な2の累乗を除く)の多くは、専用の短いサブルーチンを使用することではるかに高速に実行できます。80286と80386では、これらの乗算命令と除算命令の実行速度が大幅に向上しています。[ d ]

初代IBM PCは、8088を採用した最も影響力のあるマイクロコンピュータです。クロック周波数は4.77MHz(NTSCカラーバースト周波数の4/3)でした。IBMのエンジニアや従業員の中には、 IBM 801プロセッサの使用を望む者もいれば、新型のMotorola 68000を好む者もいました[ e ] 。また、初期のパーソナルコンピュータに搭載されていたMOS Technology 6502やZilog Z80のような小型でシンプルなマイクロプロセッサを主張する者もいました。しかし、IBMは既にIntel製チップを自社製品に採用した実績があり、 8086ファミリーの製造権も取得していました[ f ]。
IBMが8086ではなく8088を選んだのは、インテルが8086よりも価格面で優位性があり、供給量も多かったためである。[ 18 ]もう一つの要因は、8088は8ビットデータバスを備えたほとんどのnMOSチップと容易にインターフェースできるため、 8085の設計を改良してコンピュータを設計することが可能だったことである。これらのチップは成熟しており、したがって経済的な部品であった。これには、8085や類似のプロセッサ(インテル製に限らず)のサポートや周辺機能のために当初設計されたICも含まれており、これらは既に多くの技術者によく知られており、コストをさらに削減することに寄与した。[ g ]
8088 の後継には、80188、80186、80286、80386、80486、およびそれ以降のソフトウェア互換プロセッサ(現在人気の Intel Coreプロセッサを含む)があります。