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 の低価格版として、イスラエルのハイファにある Intel の研究所で設計されました(Intel のプロセッサの多くがそうでした)。[ 9 ] 8088 は、8 ビットのデータ パスと 8 ビットのサポートおよび周辺チップの使用を可能にすることで、経済的なシステムをターゲットにしていました。リリース当時は、複雑な回路基板はまだかなり扱いにくく高価でした。8088のプリフェッチキューは、8086 の 6 バイトから 4 バイトに短縮され、プリフェッチ アルゴリズムは、より狭いバスに適応するようにわずかに変更されました。[ a ] 8086 の基本設計に対するこれらの変更は、ハイファにある Intel の新しい設計オフィスおよび研究所に割り当てられた最初の仕事の 1 つです。
最大クロック周波数が 5 MHz を超える 8088 のバリアントには、インテルの新しい強化nMOSプロセスであるHMOSを使用して製造され、最大周波数が 8 MHz に指定された8088-2 があります。その後、 0 から 8 MHz のクロック速度で動作できる、完全に静的なCHMOS設計の80C88 が登場しました。他のメーカーからも、多かれ少なかれ同様のバリアントがいくつかありました。たとえば、NEC V20 は、 NECが設計および製造した、ピン互換で(同じクロック周波数で) わずかに高速な 8088 のバリアントでした。後続の NEC 8088 互換プロセッサは、最大 16 MHz で動作しました。1984 年、コモドール インターナショナルは、ライセンスを受けたDynalogic Hyperionクローンで使用するために 8088 を製造する契約を締結しました。これは、同社にとって大きな新しい方向性を示す動きと見なされました。[ 10 ] 入手可能な CMOS バージョンは沖電子工業株式会社に外注されました。 [ 11 ] 発表時の 8088 の定価は 124.80 米ドルでした。[ 12 ] [ 13 ] プラスチック パッケージ バージョンは 1981 年 7 月に 14.10 米ドルで発売されました。記載されている価格は 100 個単位の価格です。[ 14 ] Intel はこのマイクロプロセッサを富士通株式会社 に二次供給しました。[ 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 サイクルを要し、 1 MHz あたり1 ⁄ 3~1 ⁄ 2 MIPS、つまり 10 MHz で 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 クロック サイクルかかります。このような高速な命令シーケンスによって、キューが空になる速度と同じ速さで満たされることが防止されます。また、多くの基本命令は命令バイトあたり4クロック未満で実行されるため(レジスタオペランド上のほぼすべてのALUおよびデータ移動命令、そしてメモリオペランド上のこれらの命令の一部を含む)、実用的なプログラムを実行している間、8088のEUを少なくとも1/4の時間アイドル状態にすることは事実上不可能であり、半分の時間アイドル状態にすることは難しくありません。つまり、バスのボトルネック(唯一の大きな違い)のために、8088は通常、同じクロックレートで動作する8086の約半分の速度で動作します。
8088の設計上の副作用として、バスが遅くプリフェッチキューが小さいため、コードの実行速度が命令の順序に大きく依存することがあります。8088をプログラミングする際には、CPUの効率を高めるために、実行時間の長い命令と短い命令を可能な限り交互に配置することが不可欠です。例えば、文字列操作の繰り返しや3バイト以上のシフトは、4バイトのプリフェッチキューが完全に満たされるまで時間がかかります。このような遅い命令の間に短い命令(つまり、合計が数バイトの命令)を配置すると、短い命令はキューからフルスピードで実行できます。一方、遅い命令を連続して順番に実行すると、最初の命令の実行後にはキューがすでに満杯になっているためバスユニットはアイドル状態になり、結果として、後続の高速な命令が回避できたはずのフェッチ遅延に悩まされることになります。 1ビット位置シフトや回転などの一部の命令は、実行よりもフェッチに文字通り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 以降では、おそらく同じことは当てはまりません。80186 以降は専用のアドレス ALU を備えており、8088 および 8086 よりもはるかに高速にメモリにアクセスします。
最後に、呼び出し、ジャンプ、割り込みはプリフェッチ キューをリセットし、IP レジスタのロードには EU と BIU 間の通信が必要となるため (IP レジスタは汎用レジスタがある EU ではなく BIU にあるため)、これらの操作はコストがかかります。すべてのジャンプと呼び出しには少なくとも 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を選んだのは、Intelが前者のほうが価格が安く、供給量も多いと考えたからである。[ 18 ]もう一つの要因は、8088は8ビットデータバスを備えたほとんどのnMOSチップと容易にインターフェースできるため、コンピュータを改良版の8085設計に基づいて構築できたことである。これらは成熟した、したがって経済的なコンポーネントであった。これには、8085や同様のプロセッサ(Intel製に限らず)のサポート機能や周辺機能用に元々設計されたICも含まれており、これらはすでに多くのエンジニアによく知られていたため、コストをさらに削減することができた。[ g ]
8088の後継機種には、80188、80186、80286、80386、80486、そして後継のソフトウェア互換プロセッサ(現在人気のIntel Coreプロセッサなど)が含まれる。