命令セットアーキテクチャ

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

コンピュータサイエンスでは、コンピュータアーキテクチャも呼ばれる命令セットアーキテクチャISA )は、コンピュータ抽象的なモデルです。中央処理装置(CPU)など、そのISAによって記述された命令を実行するデバイスは、実装と呼ばれます。

一般に、ISAは、サポートされる命令データ型レジスタ、メインメモリを管理するためのハードウェアサポート、基本機能(メモリの一貫性アドレッシングモード仮想メモリなど)、および実装ファミリの入力/出力モデルを定義します。 ISAの。

ISAは、そのISAの実装で実行されるマシンコードの動作を、その実装の特性に依存しない方法で指定し、実装間のバイナリ互換性を提供します。これにより、パフォーマンス、物理サイズ、金銭的コストなどの特性が異なるが、同じマシンコードを実行できるISAの複数の実装が可能になるため、低パフォーマンス、低コストのマシンでソフトウェアを交換することなく、より高コストで高性能のマシンに交換できます。また、マイクロアーキテクチャの進化を可能にします ISAの新しい、より高性能な実装が前世代の実装で実行されるソフトウェアを実行できるように、そのISAの実装の。

オペレーティングシステムが特定のISAの標準で互換性のあるアプリケーションバイナリインターフェイス(ABI)を維持している場合、マシンコードはそのISAとオペレーティングシステムの将来の実装で実行されます。ただし、ISAが複数のオペレーティングシステムの実行をサポートしている場合、最初のオペレーティングシステムが他のオペレーティングシステム用に構築されたマシンコードの実行をサポートしていない限り、あるオペレーティングシステムのマシンコードが別のオペレーティングシステムで実行されることは保証されません。

ISAは、命令やその他の機能を追加するか、より大きなアドレスとデータ値のサポートを追加することで拡張できます。拡張ISAの実装は、それらの拡張なしでISAのバージョンのマシンコードを実行できます。これらの拡張機能を使用するマシンコードは、これらの拡張機能をサポートする実装でのみ実行されます。

それらが提供するバイナリ互換性により、ISAはコンピューティングにおける最も基本的な抽象化の1つになります。

概要

命令セットアーキテクチャは、特定のプロセッサで命令セットを実装するために使用されるプロセッサ設計手法のセットであるマイクロアーキテクチャとは区別されます。異なるマイクロアーキテクチャを備えたプロセッサは、共通の命令セットを共有できます。たとえば、IntelPentiumAMDAthlonは、ほぼ同じバージョンのx86命令セットを実装していますが、内部設計根本的に異なります。

特定のマシンの設計とは異なるアーキテクチャー の概念は、System / 360の設計段階でIBMのFredBrooksによって開発されました。

NPL [System / 360]の前は、同社のコンピューター設計者は、テクノロジーを選択するだけでなく、機能的およびアーキテクチャーの改良を行うことによって、コスト目標を自由に尊重していました。対照的に、SPREAD互換性の目標は、広範囲のコストとパフォーマンスにまたがる一連の5つのプロセッサに対して単一のアーキテクチャを想定していました。5つのエンジニアリング設計チームのいずれも、コストとパフォーマンスの目標を達成する際の困難を緩和する方法として、アーキテクチャ仕様の調整をもたらすことができると期待することはできませんでした。[1] :p.137 

SmalltalkJava仮想マシンMicrosoft共通言語ランタイムなどのISAとしてバイトコードをサポートする一部の仮想マシンは、一般的に使用されるコードパスのバイトコードをネイティブマシンコードに変換することでこれを実装します。さらに、これらの仮想マシンは、解釈によって使用頻度の低いコードパスを実行します(ジャストインタイムコンパイルを参照)。Transmetaは、この方法でVLIWプロセッサ 上にx86命令セットを実装しました。

ISAの分類

ISAは、さまざまな方法で分類できます。一般的な分類は、アーキテクチャの複雑さによるものです。複雑な命令セットコンピュータ(CISC)は、まれにしか実用的なプログラムで使用することはできませんそのうちのいくつかは、多くの専門的な命令を持っています。縮小命令セットコンピュータ(RISC)は、以下の一般的な操作は、それらが低頻度の使用によって相殺追加プロセッサの実行時間を得有する、サブルーチンとして実現しつつ、効率的、頻繁にプログラムで使用される命令のみを実行することによって処理を簡略化します。[2]

他のタイプには、 VLIW(Very Long Instruction Word)アーキテクチャ、および密接に関連するLong Instruction Word(LIW)および明示的並列命令コンピューティング(EPIC)アーキテクチャが含まれます。これらのアーキテクチャは、コンパイラに命令の発行とスケジューリングを 行わせることにより、RISCやCISCよりも少ないハードウェアで命令レベルの並列性を活用しようとします。

最小命令セットコンピュータ(MISC)や1命令セットコンピュータ(OISC)など、さらに複雑さが少ないアーキテクチャが研究されています。これらは理論的に重要なタイプですが、商品化されていません。

指示

機械語は、個別のステートメントまたは命令から構築されます処理アーキテクチャでは、特定の命令で以下を指定できます。

  • オペコード(実行する命令)例:追加、コピー、テスト
  • 明示的なオペランド:
レジスタ
リテラル/定数値
メモリへのアクセスに使用されるアドレッシングモード

より複雑な操作は、これらの単純な命令を組み合わせることによって構築されます。これらの命令は、順次実行されるか、制御フロー命令によって指示されます。

命令タイプ

多くの命令セットに共通する操作の例は次のとおりです。

データ処理とメモリ操作

  • レジスタを固定定数値に設定ます。
  • データをメモリ位置またはレジスタからメモリ位置またはレジスタにコピーします(マシン命令はしばしば移動と呼ばれますが、この用語は誤解を招く可能性があります)。これらは、レジスタの内容、別のメモリ位置の内容、または計算結果を格納するため、または格納されたデータを取得して後で計算を実行するために使用されます。これらは、ロードおよびストア操作と呼ばれることがよくあります。
  • ハードウェアデバイスからのデータの読み取り書き込み

算術演算と論理演算

  • 2つのレジスタの値を加算減算乗算、または除算し、結果をレジスタに配置します。場合によっては、ステータスレジスタに1つ以上の条件コードを設定します。
    • インクリメント一部のISAではデクリメントし、些細な場合にオペランドフェッチを保存します。
  • ビット単位の演算を実行します。たとえば、レジスタのペアの対応するビットの論理積と論理和を取り、レジスタの各ビットの否定取ります
  • レジスタ内の2つの値を比較します(たとえば、1つが小さいかどうか、またはそれらが等しいかどうかを確認します)。
  • 浮動小数点数の算術演算用の浮動小数点命令

制御フロー操作

コプロセッサー命令

  • コプロセッサーとの間でデータをロード/ストアするか、CPUレジスターと交換します。
  • コプロセッサー操作を実行します。

複雑な指示

プロセッサは、命令セットに「複雑な」命令を含めることができます。単一の「複雑な」命令は、他のコンピューターで多くの命令を受け取る可能性のある何かを実行します。[要出典]このような命令は、複数のステップを踏む、複数の機能ユニットを制御する、または特定のプロセッサによって実装される単純な命令の大部分よりも大規模に表示れる命令に代表されます。「複雑な」命令の例には、次のものがあります。

複雑な命令は、RISC命令セットよりもCISC命令セットの方が一般的ですが、RISC命令セットにも含まれる場合があります。 RISC命令セットには、通常、メモリオペランドを使用したALU演算や、メモリの大きなブロックを移動する命令は含まれていませんが、ほとんどのRISC命令セットには、複数のデータに対して同時に同じ算術演算を実行するSIMDまたはベクトル命令が含まれています。 SIMD命令には、最小限の時間で大きなベクトルと行列を操作する機能があります。 SIMD命令により、音声、画像、およびビデオ処理に一般的に含まれるアルゴリズムを簡単に並列化できます。さまざまなSIMD実装が、 MMXなどの商品名で市場に投入されています3DNow!、およびAltiVec

命令エンコーディング

1つの命令には、論理演算を識別する複数のフィールドが含まれる場合があり、送信元アドレスと宛先アドレス、および定数値が含まれる場合もあります。これはMIPSの「AddImmediate」命令であり、ソースレジスタとデスティネーションレジスタを選択し、小さな定数を含めることができます。

従来のアーキテクチャでは、命令には、レジスタにメモリの内容を追加するなど、実行する操作を指定するオペコードと、レジスタ、メモリ位置、またはリテラルデータを指定できる0個以上のオペランド指定子が含まれますオペランド指定子は、その意味を決定するアドレッシングモードを持っている場合もあれば、固定フィールドにある場合もあります。非常に長い命令語多く含む(VLIW)アーキテクチャ、マイクロコード・アーキテクチャを、複数の同時オペコードとオペランドは、単一の命令で指定されています。

トランスポートトリガーアーキテクチャ(TTA)など、一部のエキゾチックな命令セットにはオペコードフィールドがなく、オペランドのみがあります。

フォース仮想マシンやその他の「0オペランド」の命令セットは、いくつかのように任意のオペランド指定フィールド、不足スタックマシンNOSC含むを。[3] [より良い情報源が必要]

条件付き命令には、多くの場合、述語フィールドがあります。これは、特定の条件をエンコードして、操作を実行しないのではなく実行させるための数ビットです。たとえば、条件分岐命令は、条件がtrueの場合に制御を転送するため、実行はプログラムの別の部分に進み、条件がfalseの場合は制御を転送しないため、実行は順次続行されます。一部の命令セットには条件付き移動もあるため、条件がtrueの場合は移動が実行され、条件がfalseの場合はターゲット位置にデータが格納され、ターゲット位置は変更されません。同様に、IBM z / Architectureには条件付きストア命令があります。いくつかの命令セットには、すべての命令に述語フィールドが含まれています。これは呼ばれます分岐予測

オペランドの数

命令セットは、命令で明示的に指定されたオペランドの最大数によって分類できます

(以下の例では、ab、およびcは(直接または計算された)メモリセルを参照するアドレスであり、reg1などはマシンレジスタを参照します。)

C = A + B
  • 0オペランド(ゼロアドレスマシン)、いわゆるスタックマシン:すべての算術演算はスタックの上位1つまたは2つの位置を使用して実行されます:push a、、、push baddpop c
    • C = A+B4つの命令が必要です。スタックマシンの場合、「0オペランド」および「ゼロアドレス」という用語は算術命令に適用されますが、1オペランドのプッシュおよびポップ命令がメモリへのアクセスに使用されるため、すべての命令に適用されるわけではありません。
  • 1オペランド(1アドレスマシン)、いわゆるアキュムレータマシンには、初期のコンピュータと多くの小さなマイクロコントローラが含まれます。ほとんどの命令は、単一の右オペランド(つまり、定数、レジスタ、またはメモリ位置)を指定し、暗黙のアキュムレータは次のようになります。左側のオペランド(および存在する場合は宛先)load a、、add bstore c
    • C = A+B3つの指示が必要です。
  • 2オペランド—多くのCISCおよびRISCマシンはこのカテゴリに分類されます。
    • CISC —Cmove A; 次にCadd B
      • C = A+B2つの命令が必要です。これにより、明示的な保存命令なしで結果が効果的に「保存」されます。
    • CISC —多くの場合、マシンは命令ごとに1つのメモリオペランドに制限されていload a,reg1ます。add b,reg1; store reg1,c; addこれには、結果がのように別の場所に格納された拡張でC = A+Bあるか、同じメモリ位置に格納されているかに関係なく、メモリの移動にロード/ストアのペアが必要ですA = A+B
      • C = A+B3つの指示が必要です。
    • RISC —明示的なメモリロードが必要な場合、命令は次のようになりますload a,reg1load b,reg2; add reg1,reg2; store reg2,c
      • C = A+B4つの命令が必要です。
  • 3オペランド、データのより良い再利用を可能にします:[4]
    • CISC —単一の命令になります。 add a,b,c
      • C = A+B1つの命令が必要です。
    • CISC —または、命令ごとに2つのメモリオペランドに制限されているマシンでは、move a,reg1; add reg1,b,c;
      • C = A+B2つの命令が必要です。
    • RISC —算術命令はレジスタのみを使用するため、明示的な2オペランドのロード/ストア命令が必要ですload a,reg1load b,reg2; add reg1+reg2->reg3; store reg3,c;
      • C = A+B4つの命令が必要です。
      • 2オペランドまたは1オペランドとは異なり、これにより、レジスタ内の3つの値a、b、およびcがすべて残り、さらに再利用できます。[4]
  • より多くのオペランド-一部のCISCマシンでは、 VAX "POLY"多項式評価命令など、3つを超えるオペランド(レジスタまたはメモリアクセス)を許可するさまざまなアドレッシングモードが許可されています。

3オペランド命令の3つのレジスタをエンコードするために必要なビット数が多いため、16ビット命令を持つRISCアーキテクチャは、Atmel AVR、TI MSP430、およびARMサムの一部のバージョンなど、常に2オペランド設計です。 。32ビット命令を持つRISCアーキテクチャは、通常、ARMAVR32MIPSPower ISASPARCアーキテクチャなどの3オペランド設計です。

各命令は、いくつかのオペランド(レジスタ、メモリ位置、または即値)を明示的に指定します。一部の命令は、スタックの最上位または暗黙のレジスタに格納されるなどして、一方または両方のオペランドを暗黙的に指定します。一部のオペランドが暗黙的に指定されている場合、命令で指定する必要のあるオペランドの数は少なくなります。 「宛先オペランド」で宛先を明示的に指定する場合は、追加のオペランドを指定する必要があります。したがって、命令にエンコードされるオペランドの数は、論理演算または算術演算(アリティ)に数学的に必要な引数の数とは異なる場合があります。オペランドは、命令の「オペコード」表現でエンコードされます。 または、オペコードに続く値またはアドレスとして指定されます。

圧力を登録する

レジスター圧力は、プログラム実行中の任意の時点での空きレジスターの可用性を測定します。使用可能なレジスタが多数使用されている場合、レジスタの圧力は高くなります。したがって、レジスタの圧力が高いほど、レジスタの内容をメモリにこぼさなければならないことが多くなります。アーキテクチャ内のレジスタの数を増やすと、レジスタの圧力は減少しますが、コストは増加します。[5]

Thumbなどの組み込み命令セットはレジスタセットが小さいため、レジスタプレッシャーが非常に高くなりますが、 MIPSAlphaなどの汎用RISCISAはレジスタプレッシャーが低くなります。x86-64のようなCISCISAは、レジスタセットが小さいにもかかわらず、レジスタ圧力が低くなります。これは、CISC ISAが提供する多くのアドレッシングモードと最適化(サブレジスタアドレッシング、ALU命令のメモリオペランド、絶対アドレッシング、PC相対アドレッシング、レジスタ間スピルなど)によるものです。[6]

命令の長さ

命令のサイズまたは長さは、一部のマイクロコントローラーのわずか4ビットから、一部のVLIWシステムの数百ビットまで大きく異なります。パーソナルコンピュータメインフレーム、およびスーパーコンピュータで使用されるプロセッサの命令サイズは8〜64ビットです。 x86で可能な最長の命令は15バイト(120ビット)です。[7]命令セット内では、異なる命令の長さが異なる場合があります。一部のアーキテクチャ、特に最も縮小された命令セットコンピュータ(RISC)では、命令は固定長であり、通常はそのアーキテクチャのワードサイズに対応します。他のアーキテクチャでは、命令の長さは可変で、通常はバイトまたはハーフワードの整数倍です Thumb拡張機能を備えARMなどの一部には、混合変数エンコーディングがあります。これは、2つの固定、通常は32ビットと16ビットのエンコーディングであり、命令を自由に混在させることはできませんが、ブランチ(またはARMv8の例外境界)で切り替える必要があります。 )。

RISC命令セットの命令長は通常固定されています(多くの場合4バイト= 32ビット)が、一般的なCISC命令セットの命令の長さは大きく異なります(x86の場合は1〜15バイト)。固定長命令は、いくつかの理由(たとえば、命令がキャッシュラインまたは仮想メモリページの境界にまたがっているかどうかをチェックする必要がない[4] )により、可変長命令よりも処理が複雑ではないため、最適化がいくらか簡単になります。速度。

コード密度

1960年代初頭のコンピュータでは、メインメモリは高価で、メインフレーム上でも非常に限られていました。プログラムのサイズを最小化して、限られたメモリに収まるようにすることが、多くの場合中心的でした。したがって、特定のタスクを実行するために必要なすべての命令の合計サイズであるコード密度は、任意の命令セットの重要な特性でした。それは、最初はミニコンピューター、次にマイクロプロセッサーの小さな記憶にとって重要なままでした。スマートフォンアプリケーション、低速インターネット接続を介してブラウザにダウンロードされるアプリケーション、および組み込みアプリケーションのROMでは、密度は今日でも重要です。密度を上げることのより一般的な利点は、キャッシュと命令のプリフェッチの有効性が向上することです。

コード密度の高いコンピューターには、多くの場合、プロシージャ入力、パラメーター化されたリターン、ループなどの複雑な命令があります(したがって、遡及的にComplex Instruction Set ComputersCISCと呼ばれます)。ただし、より一般的な、または頻繁な「CISC」命令は、「追加」などの基本的なALU演算と、メモリ内の1つ以上のオペランドのアクセス(直接、間接、インデックスなどのアドレッシングモードを使用)を組み合わせるだけです。 。特定のアーキテクチャでは、2つまたは3つのオペランド(結果を含む)をメモリ内で直接許可するか、自動ポインタインクリメントなどの機能を実行できる場合があります。ソフトウェアで実装される命令セットには、さらに複雑で強力な命令が含まれる場合があります。

縮小命令セットコンピュータであるRISCは、メモリサブシステムが急速に成長している時期に最初に広く実装されました。それらは、実装回路を単純化するためにコード密度を犠牲にし、より高いクロック周波数とより多くのレジスタを介してパフォーマンスを向上させようとします。単一のRISC命令は通常、レジスタの「追加」やメモリ位置からレジスタへの「ロード」など、単一の操作のみを実行します。通常、RISC命令セットの命令長は固定されていますが、一般的なCISC命令セットの命令長は大きく異なります。ただし、RISCコンピュータは通常、特定のタスクを実装するためにより多くの、そして多くの場合より長い命令を必要とするため、本質的にバス帯域幅とキャッシュメモリの最適な使用を行いません。

ThumbAVR32などの特定の組み込みRISCISAは、通常、コード圧縮と呼ばれる手法のために非常に高密度を示します。この手法では、2つの16ビット命令が1つの32ビットワードにパックされ、デコード段階でアンパックされて2つの命令として実行されます。[8]

最小命令セットコンピュータ(MISC)は、スタックマシンの一種であり、個別の命令(16〜64)がほとんどないため、複数の命令を1つのマシンワードに収めることができます。これらのタイプのコアは、多くの場合、実装にほとんどシリコンを必要としないため、 FPGAまたはマルチコア形式で簡単に実現できます。 MISCのコード密度は、RISCのコード密度に似ています。増加した命令密度は、タスクを実行するためにより多くのプリミティブ命令を必要とすることによって相殺されます。[9] [検証に失敗しました]

コード密度を改善するためのメカニズムとして、実行可能圧縮に関する研究が行われています。コルモゴロフ複雑性の数学は、これの課題と限界を説明しています。

表現

プログラムを構成する命令が、内部の数値形式(機械語)を使用して指定されることはめったにありません。これらは、アセンブリ言語を使用してプログラマーが指定することもコンパイラーが高水準プログラミング言語から生成することもできます

デザイン

命令セットの設計は複雑な問題です。マイクロプロセッサの歴史には2つの段階がありました。 1つ目はCISC(Complex Instruction Set Computer)で、さまざまな命令がありました。しかし、1970年代に、IBMのような場所が調査を行い、セット内の多くの命令を削除できることがわかりました。その結果、より少ない命令セットを使用するアーキテクチャであるRISC(縮小命令セットコンピュータ)が実現しました。より単純な命令セットは、より高速で、プロセッササイズを縮小し、消費電力を削減する可能性を提供します。ただし、より複雑なセットを使用すると、一般的な操作を最適化したり、メモリとキャッシュの効率を向上させたり、プログラミングを簡素化したりすることができます。

一部の命令セット設計者は、ある種のシステムコールまたはソフトウェア割り込みのために1つ以上のオペコードを予約します。たとえば、MOS Technology6502は00H使用しZilog Z80は8つのコードC7、CF、D7、DF、E7、EF、F7、FF H [10]を使用し、 Motorola68000は範囲A000..AFFFHのコードを使用します

命令セットがPopekとGoldbergの仮想化要件を満たしている場合、高速仮想マシンの実装ははるかに簡単です[説明が必要]

免疫を意識したプログラミングで使用されるNOPスライドは、メモリの「プログラムされていない」状態がNOPとして解釈される場合、実装がはるかに簡単です。[疑わしい]

複数のプロセッサを搭載したシステムで、命令セットに「フェッチアンドアッドロードリンク/ストアコンディショナル」(LL / SC)、または「アトミックコンペアアンドスワップ」。

命令セットの実装

任意の命令セットは、さまざまな方法で実装できます。特定の命令セットを実装するすべての方法は同じプログラミングモデルを提供し、その命令セットのすべての実装は同じ実行可能ファイルを実行できます。命令セットを実装するさまざまな方法は、コスト、パフォーマンス、消費電力、サイズなどの間でさまざまなトレードオフをもたらします。

プロセッサのマイクロアーキテクチャを設計する場合、エンジニアは、加算器、マルチプレクサ、カウンタ、レジスタ、ALUなどの「ハードワイヤード」電子回路のブロック(多くの場合、個別に設計)を使用しますこの物理的なマイクロアーキテクチャを使用したISAの各命令のデコードとシーケンス。この説明を実装するためのコントロールユニットを構築するには、2つの基本的な方法があります(ただし、多くの設計では中間の方法または妥協点を使用しています)。

  1. 一部のコンピューター設計では、完全な命令セットのデコードとシーケンスを「ハードワイヤード」します(他のマイクロアーキテクチャーと同様)。
  2. 他の設計では、これを行うためにマイクロコードルーチンまたはテーブル(または両方)を使用します。通常、オンチップROMまたはPLA、あるいはその両方として使用します(ただし、これまでは別々のRAMとROMが使用されてきました)。Western Digital MCP-1600は古い例であり、マイクロコード専用の個別のROMを使用しています

一部の設計では、制御装置にハードワイヤード設計とマイクロコードの組み合わせを使用しています。

一部のCPU設計では、書き込み可能なコントロールストアを使用します。命令セットを書き込み可能なRAMにコンパイルするか、CPU(RekursivプロセッサやImsys Cjipなど)、[11]、またはFPGA(再構成可能コンピューティング)内でフラッシュします。

ISAは通訳者がソフトウェアエミュレートすることもできます。当然、解釈のオーバーヘッドのため、エミュレーターを実行しているハードウェアが桁違いに高速でない限り、これはエミュレートされたハードウェア上でプログラムを直接実行するよりも遅くなります。今日、新しいISAまたはマイクロアーキテクチャのベンダーは、ハードウェア実装の準備が整う前に、ソフトウェア開発者がソフトウェアエミュレータを利用できるようにするのが一般的です。

多くの場合、実装の詳細は、命令セット用に選択された特定の命令に強い影響を及ぼします。たとえば、命令パイプラインの多くの実装では、命令ごとに1つのメモリロードまたはメモリストアしか許可されないため、ロードストアアーキテクチャ(RISC)になります。別の例として、命令パイプラインを実装するいくつかの初期の方法は、遅延スロットにつながりました

高速デジタル信号処理の要求は反対方向に押しやられており、命令を特定の方法で実装することを余儀なくされています。たとえば、デジタルフィルタを十分に高速に実行するには、一般的なデジタルシグナルプロセッサ(DSP)のMAC命令は、命令と2つのデータワードを同時にフェッチできる一種のハーバードアーキテクチャを使用する必要があり、1サイクルの積和演算が必要です。 乗数

も参照してください

参考文献

  1. ^ ピュー、エマーソンW。; ジョンソン、ライルR。; パーマー、ジョンH.(1991)。IBMの360およびEarly370システムMITプレス。ISBN 0-262-16123-0
  2. ^ クリスタルチェン; グレッグノビック; カーク・シマノ(2006年12月16日)。「RISCアーキテクチャ:RISCとCISC」cs.stanford.edu 2015年2月21日取得
  3. ^ 「ForthResources:NOSC MailListArchive」奇妙なgizmo.com2014年5月20日にオリジナルからアーカイブされました2014年7月25日取得
  4. ^ a b c John CockeによるIBMでのRISCテクノロジーの進化– IBM Journal of R&D、Volume 44、Numbers 1/2、p.48(2000)
  5. ^ ページ、ダニエル(2009)。「11.コンパイラ」。コンピュータアーキテクチャの実用的な紹介スプリンガー。p。464. Bibcode2009pica.book ..... P。ISBN 978-1-84882-255-9
  6. ^ ベンカット、アシッシュ; タルセン、ディーンM.(2014)。ISAの多様性を活用する:異種ISAチップマルチプロセッサの設計コンピュータアーキテクチャに関する第41回年次国際シンポジウム。
  7. ^ 「インテル®64およびIA-32アーキテクチャーソフトウェア開発者マニュアル」インテルコーポレーション2012年7月12日取得
  8. ^ ウィーバー、ヴィンセントM。; マッキー、サリーA.(2009)。新しいアーキテクチャのコード密度に関する懸念コンピュータ設計に関するIEEE国際会議。CiteSeerX10.1.1.398.1967_ 土井10.1109 /ICCD.2009.5413117 
  9. ^ 「RISCvs.CISC」cs.stanford.edu 2021年12月18日取得
  10. ^ ガンスル、ジャック(2001年2月26日)。「プロアクティブデバッグ」Embedded.com
  11. ^ 「過去と現在の偉大なマイクロプロセッサ(V 13.4.0)」cpushack.net 2014年7月25日取得

さらに読む

外部リンク