コンピュータサイエンスにおいて、命令セットアーキテクチャ(ISA)は、一般的にソフトウェアがコンピュータまたはコンピュータファミリのCPUを制御する方法を定義する抽象モデルです。 [1]中央処理装置(CPU)など、そのISAによって記述された命令を実行するデバイスまたはプログラムは、そのISAの 実装と呼ばれます。
一般に、ISA は、サポートされる命令、データ型、レジスタ、メイン メモリを管理するためのハードウェア サポート、[説明が必要]基本機能 (メモリの一貫性、アドレス指定モード、仮想メモリなど)、およびISA 実装の 入出力モデルを定義します。
ISA は、その ISA の実装で実行されるマシン コードの動作を、その実装の特性に依存しない方法で指定し、実装間のバイナリ互換性を提供します。これにより、パフォーマンス、物理サイズ、金銭的コストなどの特性が異なるが、同じマシン コードを実行できる ISA の複数の実装が可能になり、ソフトウェアを交換することなく、パフォーマンスが低くコストの低いマシンをコストが高くパフォーマンスの高いマシンに置き換えることができます。また、その ISA の実装のマイクロアーキテクチャの進化も可能になり、ISA の新しい高性能な実装で、以前の世代の実装で実行されるソフトウェアを実行できるようになります。
オペレーティング システムが特定の ISA 用の標準的で互換性のあるアプリケーション バイナリ インターフェイス(ABI) を維持している場合、マシン コードはその ISA とオペレーティング システムの将来の実装で実行されます。ただし、ISA が複数のオペレーティング システムの実行をサポートしている場合、最初のオペレーティング システムが他のオペレーティング システム用に構築されたマシン コードの実行をサポートしていない限り、あるオペレーティング システムのマシン コードが別のオペレーティング システムで実行されることは保証されません。
ISA は、命令やその他の機能を追加したり、より大きなアドレスやデータ値のサポートを追加したりすることで拡張できます。拡張された ISA の実装では、これらの拡張機能のない ISA バージョンのマシン コードも実行できます。これらの拡張機能を使用するマシン コードは、これらの拡張機能をサポートする実装でのみ実行されます。
ISA が提供するバイナリ互換性により、ISA はコンピューティングにおける最も基本的な抽象化の 1 つになります。
概要
命令セット アーキテクチャは、特定のプロセッサで命令セットを実装するために使用されるプロセッサ設計技術のセットであるマイクロアーキテクチャとは区別されます。異なるマイクロアーキテクチャを持つプロセッサは、共通の命令セットを共有できます。たとえば、Intel PentiumとAMD Athlon は、 x86 命令セットのほぼ同一のバージョンを実装していますが、内部設計は根本的に異なります。
特定のマシンの設計とは異なるアーキテクチャ の概念は、 System/360の設計段階で IBM のFred Brooksによって開発されました。
NPL [System/360] 以前は、同社のコンピュータ設計者は、テクノロジを選択するだけでなく、機能やアーキテクチャの改良をすることでコスト目標を自由に達成することができました。対照的に、SPREAD の互換性目標は、コストとパフォーマンスの幅広い範囲にわたる 5 つのプロセッサ シリーズに対して単一のアーキテクチャを前提としていました。5 つのエンジニアリング設計チームのいずれも、コストとパフォーマンスの目標を達成する上での困難を緩和する方法として、アーキテクチャ仕様の調整を行えるとは期待できませんでした。[2] : p.137
Smalltalk、Java仮想マシン、MicrosoftのCommon Language Runtimeなど、バイトコードをISAとしてサポートする一部の仮想マシンは、よく使用されるコードパスのバイトコードをネイティブマシンコードに変換することでこれを実装しています。さらに、これらの仮想マシンは、あまり使用されないコードパスを解釈によって実行します(ジャストインタイムコンパイルを参照)。Transmetaは、この方法で VLIWプロセッサ上にx86命令セットを実装しました。
ISAの分類
ISAはさまざまな方法で分類できます。一般的な分類は、アーキテクチャの複雑さによるものです。複合命令セットコンピュータ(CISC)には多くの特殊な命令があり、その一部は実際のプログラムではほとんど使用されません。縮小命令セットコンピュータ(RISC)は、プログラムで頻繁に使用される命令のみを効率的に実装することでプロセッサを簡素化し、あまり使用されない操作はサブルーチンとして実装され、その結果生じるプロセッサ実行時間の増加は使用頻度が低いことで相殺されます。[3]
その他のタイプには、非常に長い命令語(VLIW) アーキテクチャ、および密接に関連する長い命令語(LIW) [引用が必要]と明示的並列命令コンピューティング(EPIC) アーキテクチャがあります。これらのアーキテクチャは、命令の発行とスケジュールをコンパイラに任せることで、RISC や CISC よりも少ないハードウェアで命令レベルの並列性を活用しようとします。[4]
最小命令セットコンピュータ(MISC)や1命令セットコンピュータ(OISC)など、さらに複雑さの少ないアーキテクチャも研究されている。これらは理論的には重要なタイプだが、商用化されていない。[5] [6]
説明書
機械言語は個別のステートメントまたは命令から構成されます。処理アーキテクチャでは、特定の命令は以下を指定できます。
- オペコード(実行する命令)例:追加、コピー、テスト
- 明示的なオペランド:
より複雑な操作は、これらの単純な命令を組み合わせることによって構築され、これらの命令は順番に実行されるか、または制御フロー命令 によって指示されたとおりに実行されます。
命令の種類
多くの命令セットに共通する操作の例は次のとおりです。
データ処理とメモリ操作
- レジスタを固定定数値に設定します。
- メモリ位置またはレジスタからメモリ位置またはレジスタにデータをコピーします(マシン命令はしばしば「移動」と呼ばれますが、この用語は誤解を招きます)。これらは、レジスタの内容、別のメモリ位置の内容、または計算結果を保存したり、保存されたデータを取得して後で計算を実行したりするために使用されます。これらは、ロード操作またはストア操作と呼ばれることがよくあります。
- ハードウェア デバイスからデータを読み取ったり書き込んだりします。
算術演算と論理演算
- 2つのレジスタの値を加算、減算、乗算、または除算し、結果をレジスタに格納し、ステータスレジスタに1つ以上の条件コードを設定する場合もあります。[7]
- 増分、一部の ISA ではデクリメントが行われ、些細なケースではオペランドのフェッチが節約されます。
- ビット単位の演算を実行します。たとえば、レジスタのペア内の対応するビットの論理積と論理和を取ったり、レジスタ内の各ビットの否定を取ったりします。
- レジスタ内の 2 つの値を比較します(たとえば、どちらかが小さいか、または等しいかを確認します)。
- 浮動小数点数の演算を行う浮動小数点命令。[7]
制御フロー操作
- プログラム内の別の場所に分岐し、そこで命令を実行します。
- 特定の条件が満たされた場合に、条件付きで別の場所に分岐します。
- 間接的に別の場所に分岐します。
- 次の命令の位置を戻るポイントとして保存しながら、別のコード ブロックを呼び出します。
コプロセッサ命令
- コプロセッサとの間でデータをロード/保存したり、CPU レジスタと交換したりします。
- コプロセッサ操作を実行します。
複雑な指示
プロセッサの命令セットには「複雑な」命令が含まれている場合があります。1 つの「複雑な」命令は、他のコンピュータでは多くの命令を必要とするような処理を実行します。このような命令は、複数のステップを実行する命令、複数の機能ユニットを制御する命令、または特定のプロセッサによって実装される単純な命令の大部分よりも大規模な命令に代表されます。「複雑な」命令の例には、次のものがあります。
- 複数のレジスタをメモリ(特にスタック)に、またはメモリから一度に転送する
- 大きなメモリブロックの移動(例:文字列のコピーやDMA 転送)
- 複雑な整数および浮動小数点演算(例:平方根、または対数、正弦、余弦などの超越関数)
- SIMD命令はSIMDレジスタ内で、多数の同種の値を並列に操作する単一の命令である。
- アトミックなテスト・アンド・セット命令またはその他の読み取り・変更・書き込み アトミック命令を実行する
- レジスタではなくメモリからのオペランドを使用してALU演算を実行する命令
複雑な命令は、RISC 命令セットよりも CISC 命令セットでよく使用されますが、RISC 命令セットにも含まれることがあります。RISC 命令セットには、通常、メモリ オペランドを使用した ALU 演算や、大きなメモリ ブロックを移動する命令は含まれませんが、ほとんどの RISC 命令セットには、複数のデータに対して同時に同じ算術演算を実行する SIMD 命令またはベクトル命令が含まれています。SIMD 命令には、大きなベクトルや行列を最小限の時間で操作する機能があります。SIMD 命令を使用すると、音声、画像、ビデオ処理によく使用されるアルゴリズムを簡単に並列化できます。さまざまな SIMD 実装が、 MMX、3DNow!、AltiVecなどの商標名で市場に投入されています。
命令エンコーディング

従来のアーキテクチャでは、命令には、メモリの内容をレジスタに追加するなどの実行する操作を指定するオペコードと、レジスタ、メモリ位置、またはリテラル データを指定する0 個以上のオペランド指定子が含まれます。オペランド指定子には、その意味を決定するアドレス指定モードがある場合や、固定フィールドにある場合があります。多くのマイクロコードアーキテクチャを含む非常に長い命令語(VLIW) アーキテクチャでは、1 つの命令で複数のオペコードとオペランドが同時に指定されます。
一部の特殊な命令セットには、トランスポート トリガー アーキテクチャ(TTA)などのオペコード フィールドがなく、オペランドのみがあります。
ほとんどのスタック マシンには「0 オペランド」命令セットがあり、算術演算と論理演算にはオペランド指定フィールドがありません。評価スタックにオペランドをプッシュする命令、またはスタックから変数にオペランドをポップする命令だけがオペランド指定子を持ちます。命令セットは、データ レジスタや任意のメイン メモリ セルではなく、式スタックでのみ機能するポストフィックス (逆ポーランド記法) 演算を使用して、ほとんどの ALU アクションを実行します。ほとんどの算術式はポストフィックス記法に簡単に変換できるため、これは高級言語をコンパイルするのに非常に便利です。[8]
条件付き命令には、述語フィールド (操作が実行されないようにする特定の条件をエンコードする数ビット) が含まれることがよくあります。たとえば、条件付き分岐命令では、条件が真の場合に制御が渡されるため、実行はプログラムの別の部分に進みますが、条件が偽の場合は制御が渡されないため、実行は順次続行されます。一部の命令セットには条件付き移動もあり、条件が真の場合は移動が実行され、データがターゲットの場所に格納され、条件が偽の場合は移動は実行されず、ターゲットの場所は変更されません。同様に、IBM z/Architecture には条件付きストア命令があります。いくつかの命令セットでは、すべての命令に述語フィールドが含まれています。これは、分岐述語と呼ばれます。
オペランドの数
命令セットは、命令で明示的に指定されたオペランドの最大数によって分類できます。
(以下の例では、a、b、c はメモリ セルを参照する (直接または計算された) アドレスであり、reg1などはマシン レジスタを参照します。)
C = A + B
- 0オペランド(ゼロアドレスマシン)、いわゆるスタックマシン:すべての算術演算はスタックの上位1つまたは2つの位置を使用して実行されます:[ 9
]
push a、、、。push baddpop cC = A+B4つの命令が必要です。[10]スタックマシンの場合、「0オペランド」と「ゼロアドレス」という用語は算術命令に適用されますが、1オペランドのプッシュ命令とポップ命令がメモリへのアクセスに使用されるため、すべての命令に適用されるわけではありません。
- 1 オペランド ( 1 アドレス マシン)、いわゆるアキュムレータ マシンには、初期のコンピュータや多くの小型マイクロコントローラが含まれます。ほとんどの命令は、1 つの右オペランド (つまり、定数、レジスタ、またはメモリ位置) を指定し、暗黙のアキュムレータを左オペランド (および
、存在する場合は宛先) として指定します。
load a、、add b。store cC = A+B3つの命令が必要である。[10]
- 2 オペランド - 多くの CISC および RISC マシンがこのカテゴリに分類されます。
- CISC — C
move Aへ、次にCへ。add BC = 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,reg1;load b,reg2;add reg1,reg2;store reg2,c。C = A+B4 つの命令が必要です。
- CISC — C
- 3オペランド、データの再利用性向上: [11]
- CISC — 次のいずれかの単一の命令になります。
add a,b,cC = A+B1 つの命令が必要です。
- CISC — または、命令ごとに 2 つのメモリオペランドに制限されているマシンでは、
move a,reg1;add reg1,b,c;C = A+B2 つの命令が必要です。
- RISC — 算術命令はレジスタのみを使用するため、明示的な 2 オペランドのロード/ストア命令が必要です:
load a,reg1;load b,reg2;add reg1+reg2->reg3;store reg3,c;C = A+B4 つの命令が必要です。- 2オペランドや1オペランドとは異なり、レジスタ内の3つの値a、b、cはすべて再利用できるようになります。[11]
- CISC — 次のいずれかの単一の命令になります。
- より多くのオペランド - 一部の CISC マシンでは、 VAX の「POLY」多項式評価命令など、3 つ以上のオペランド (レジスタまたはメモリ アクセス) を許可するさまざまなアドレッシング モードが許可されています。
3 オペランド命令の 3 つのレジスタをエンコードするために必要なビット数が多いため、16 ビット命令を持つ RISC アーキテクチャは、Atmel AVR、TI MSP430、ARM Thumbの一部のバージョンなど、常に 2 オペランド設計になります。32 ビット命令を持つ RISC アーキテクチャは、 ARM、AVR32、MIPS、Power ISA、SPARCアーキテクチャなど、通常は 3 オペランド設計になります。
各命令は、いくつかのオペランド (レジスタ、メモリ位置、または即値) を明示的に指定します。一部の命令は、スタックの最上部または暗黙のレジスタに格納されるなどして、1 つまたは両方のオペランドを暗黙的に指定します。オペランドの一部が暗黙的に指定されている場合、命令で指定する必要があるオペランドの数は少なくなります。「宛先オペランド」が宛先を明示的に指定する場合、追加のオペランドを指定する必要があります。その結果、命令でエンコードされるオペランドの数は、論理演算または算術演算に必要な引数の数 (アリティ) と異なる場合があります。オペランドは、命令の「オペコード」表現でエンコードされるか、オペコードに続く値またはアドレスとして指定されます。
レジスター圧力
レジスタ圧力は、プログラム実行中の任意の時点での空きレジスタの可用性を測定します。レジスタ圧力は、使用可能なレジスタの多くが使用されている場合に高くなります。したがって、レジスタ圧力が高くなるほど、レジスタの内容をメモリに書き込む頻度が高くなります。アーキテクチャ内のレジスタの数を増やすと、レジスタ圧力は減少しますが、コストが増加します。[12]
Thumbなどの組み込み命令セットはレジスタ セットが小さいため、レジスタ プレッシャーが非常に高くなりますが、 MIPSやAlphaなどの汎用 RISC ISA はレジスタ プレッシャーが低くなります。x86-64 などの CISC ISA はレジスタ セットが小さいにもかかわらず、レジスタ プレッシャーが低くなります。これは、CISC ISA が提供する多くのアドレッシング モードと最適化 (サブレジスタ アドレッシング、ALU 命令のメモリ オペランド、絶対アドレッシング、PC 相対アドレッシング、レジスタ間スピルなど) によるものです。[13]
命令の長さ
命令のサイズや長さは、マイクロコントローラによってはわずか4ビットから、VLIWシステムでは数百ビットまで、幅広く異なります。パーソナルコンピュータ、メインフレーム、スーパーコンピュータで使用されるプロセッサの最小命令サイズは8~64ビットです。x86で可能な最長命令は15バイト(120ビット)です。[14]命令セット内では、異なる命令は異なる長さになる場合があります。一部のアーキテクチャ、特にほとんどの縮小命令セットコンピュータ(RISC)では、命令は固定長で、通常はそのアーキテクチャのワード サイズに対応します。他のアーキテクチャでは、命令は可変長で、通常はバイトまたはハーフワードの整数倍です。Thumbを備えたARMなど、一部のアーキテクチャでは、混合可変エンコーディング、つまり 2 つの固定エンコーディング (通常は 32 ビットと 16 ビット) が採用されており、命令を自由に混合することはできず、分岐 (または ARMv8 の例外境界) で切り替える必要があります。
固定長命令は、いくつかの理由(例えば、命令がキャッシュラインまたは仮想メモリページ境界にまたがっているかどうかを確認する必要がないなど)により可変長命令よりも扱いが簡単で、そのため速度を最適化するのがやや簡単です。
コード密度
1960 年代初期のコンピュータでは、メイン メモリはメインフレームでも高価で非常に限られていました。限られたメモリに収まるようにプログラムのサイズを最小限に抑えることが重要になることがよくありました。したがって、特定のタスクを実行するために必要な命令のサイズ、つまりコード密度 は、あらゆる命令セットの重要な特性でした。これは、当初は小さなメモリだったミニコンピュータ、その後マイクロプロセッサでも重要でした。密度は今日でも、スマートフォン アプリケーション、低速のインターネット接続を介してブラウザーにダウンロードされるアプリケーション、組み込みアプリケーション用の ROM にとって重要です。密度の増加によるより一般的な利点は、キャッシュと命令プリフェッチの効率が向上することです。
コード密度の高いコンピュータには、手順のエントリ、パラメータ化された戻り、ループなどのための複雑な命令が備わっていることがよくあります (そのため、遡及的にComplex Instruction Set Computers、CISCと名付けられました)。ただし、より一般的または頻繁に使用される "CISC" 命令は、"add" などの基本的な ALU 操作と、メモリ内の 1 つ以上のオペランドへのアクセス (直接、間接、インデックスなどのアドレス指定モードを使用) を組み合わせただけです。特定のアーキテクチャでは、2 つまたは 3 つのオペランド (結果を含む) を直接メモリに保持したり、自動ポインタ増分などの機能を実行したりできます。ソフトウェアで実装された命令セットには、さらに複雑で強力な命令が含まれる場合があります。
縮小命令セット コンピュータ(RISC ) は、メモリ サブシステムが急速に成長していた時期に初めて広く実装されました。RISC では、実装回路を簡素化するためにコード密度を犠牲にし、クロック周波数の上昇とレジスタの増加によってパフォーマンスの向上を図っています。1 つの RISC 命令は通常、レジスタの「追加」やメモリ位置からレジスタへの「ロード」など、1 つの操作のみを実行します。RISC 命令セットの命令長は通常固定ですが、典型的な CISC 命令セットの命令長は大きく異なります。ただし、RISC コンピュータでは通常、特定のタスクを実行するためにより多くの命令が必要になり、命令長も長くなることが多いため、バス帯域幅とキャッシュ メモリの使用は本質的に最適ではありません。
ThumbやAVR32などの組み込みRISC ISAは、コード圧縮と呼ばれる技術により、通常、非常に高い密度を示します。この技術は、2つの16ビット命令を1つの32ビットワードにパックし、デコード段階でアンパックして2つの命令として実行します。[15]
最小命令セットコンピュータ(MISC)は、一般的にスタックマシンの一種で、個別の命令数が少ない(8~32)ため、複数の命令を1つのマシンワードに収めることができます。これらのタイプのコアは実装に必要なシリコンがほとんどないため、FPGAやマルチコア形式で簡単に実現できます。MISCのコード密度はRISCのコード密度に似ています。命令密度の増加は、タスクを実行するためにより多くの基本命令を必要とすることで相殺されます。[16] [検証失敗]
コード密度を向上させるメカニズムとして、実行可能ファイルの圧縮に関する研究が行われてきました。コルモゴロフ複雑度の数学は、これに関する課題と限界を説明しています。
実際には、コード密度はコンパイラにも依存します。ほとんどの最適化コンパイラには、コード生成を実行速度に合わせて最適化するか、コード密度に合わせて最適化するかを制御するオプションがあります。たとえば、GCC に-Osは、マシン コードのサイズを小さくして最適化するオプションと、-O3マシン コードのサイズを大きくして実行速度を最適化するオプションがあります。
表現
プログラムを構成する命令は、内部の数値形式(マシンコード)を使用して指定されることはほとんどなく、アセンブリ言語を使用してプログラマーによって指定されるか、より一般的には、コンパイラによって高級プログラミング言語から生成されることがあります。[17]
デザイン
命令セットの設計は複雑な問題です。マイクロプロセッサの歴史には 2 つの段階がありました。最初の段階は CISC (Complex Instruction Set Computer) で、さまざまな命令がありました。しかし、1970 年代に IBM などの企業が研究を行い、命令セットの多くの命令を削除できることを発見しました。その結果、RISC (Reduced Instruction Set Computer) が生まれました。これは、より小さな命令セットを使用するアーキテクチャです。命令セットが単純であれば、速度の向上、プロセッサ サイズの縮小、消費電力の削減が期待できます。ただし、より複雑なセットであれば、一般的な操作を最適化したり、メモリとキャッシュの効率を改善したり、プログラミングを簡素化したりできます。
命令セット設計者の中には、何らかのシステムコールやソフトウェア割り込み用に1つ以上のオペコードを予約している人もいます。例えば、MOS Technology 6502は00 Hを使用し、Zilog Z80はC7、CF、D7、DF、E7、EF、F7、FF H [18]の8つのコードを使用し、Motorola 68000はA000..AFFF H の範囲のコードを使用します。
命令セットがPopek と Goldberg の仮想化要件を満たしていれば、高速仮想マシンの実装ははるかに簡単になります。[説明が必要]
耐性を考慮したプログラミングで使用されるNOPスライドは、メモリの「プログラムされていない」状態がNOPとして解釈される場合、実装がはるかに簡単になります。[疑わしい–議論する]
複数のプロセッサを搭載したシステムでは、命令セットに「フェッチと追加」、「ロード・リンク/ストア条件付き」(LL/SC)、または「アトミック比較とスワップ」などのサポートが含まれている場合、非ブロッキング同期アルゴリズムの実装がはるかに簡単になります [ 引用が必要]。
命令セットの実装
特定の命令セットは、さまざまな方法で実装できます。特定の命令セットを実装するすべての方法で同じプログラミング モデルが提供され、その命令セットのすべての実装で同じ実行ファイルを実行できます。命令セットを実装するさまざまな方法により、コスト、パフォーマンス、消費電力、サイズなどのトレードオフが異なります。
プロセッサのマイクロアーキテクチャを設計する際、エンジニアは加算器、マルチプレクサ、カウンタ、レジスタ、ALU などの「ハードワイヤード」電子回路ブロック (多くの場合、個別に設計) を使用します。その後、この物理的なマイクロアーキテクチャを使用して、ISA の各命令のデコードとシーケンスを記述するために、何らかのレジスタ転送言語がよく使用されます。この記述を実装する制御ユニットを構築するには、2 つの基本的な方法があります (ただし、多くの設計では中間の方法や妥協案が使用されています)。
- 一部のコンピュータ設計では、完全な命令セットのデコードとシーケンスが (マイクロアーキテクチャの残りの部分と同様に) 「ハードワイヤード」されています。
- 他の設計では、ROMまたは書き込み可能なRAM (書き込み可能な制御ストア)、PLA、またはその両方を使用して、マイクロコードルーチンまたはテーブル (またはその両方) を採用してこれを実行します。
書き込み可能な制御ストアを備えたマイクロコードCPU設計の中には、命令セットの変更を可能にするためにこれを使用しているものがある(例えば、RekursivプロセッサやImsys Cjip)。[19]
再構成可能なコンピューティング用に設計された CPU では、フィールド プログラマブル ゲート アレイ(FPGA)が使用される場合があります。
ISA は、インタープリタによってソフトウェアでエミュレートすることもできます。当然、解釈のオーバーヘッドがあるため、エミュレータを実行するハードウェアが桁違いに高速でない限り、エミュレートされたハードウェアでプログラムを直接実行するよりも遅くなります。今日では、新しい ISA またはマイクロアーキテクチャのベンダーが、ハードウェア実装が準備される前にソフトウェア エミュレータをソフトウェア開発者に提供することが一般的な慣行となっています。
多くの場合、実装の詳細が、命令セットに選択される特定の命令に強い影響を与えます。たとえば、命令パイプラインの多くの実装では、命令ごとに 1 つのメモリ ロードまたはメモリ ストアのみが許可され、ロード ストア アーキテクチャ(RISC) が採用されています。別の例として、命令パイプラインの初期の実装方法のいくつかは、遅延スロットにつながりました。
高速デジタル信号処理の要求は逆の方向に進み、命令を特定の方法で実装することを余儀なくされました。たとえば、デジタル フィルターを十分な速度で実行するには、一般的なデジタル信号プロセッサ(DSP) の MAC 命令で、命令と 2 つのデータ ワードを同時にフェッチできる一種のハーバード アーキテクチャを使用する必要があり、シングル サイクルの乗算累算 乗算器が必要です。
参照
- 命令セットアーキテクチャの比較
- 圧縮命令セット
- コンピュータアーキテクチャ
- エミュレータ
- 命令セットシミュレータ
- マイクロオペレーション
- 命令セットコンピューティングなし
- OVPsimフルシステムシミュレーターは、C と標準 API を使用して任意の命令セットを作成/モデル化/エミュレートする機能を提供します。
- プロセッサ設計
- シミュレーション
- レジスタ転送言語(RTL)
参考文献
- ^ 「用語集: 命令セットアーキテクチャ (ISA)」。arm.com。2023年11月11日時点のオリジナルよりアーカイブ。2024年2月3日閲覧。
- ^ Pugh, Emerson W.; Johnson, Lyle R.; Palmer, John H. (1991). IBM の 360 および初期の 370 システム. MIT プレス. ISBN 0-262-16123-0。
- ^ Crystal Chen、Greg Novick、Kirk Shimano (2006 年 12 月 16 日)。「RISC アーキテクチャ: RISC vs. CISC」。cs.stanford.edu。2015年 2 月 21 日時点のオリジナルよりアーカイブ。2015 年2 月 21 日閲覧。
- ^ Schlansker, Michael S.; Rau, B. Ramakrishna (2000 年 2 月). 「EPIC: 明示的並列命令コンピューティング」. Computer . 33 (2): 37–45. doi :10.1109/2.820037.
- ^ Shaout, Adnan; Eldos, Taisir (2003 年夏)。「コンピュータ アーキテクチャの分類について」。国際科学技術ジャーナル。14 :3。2023年3月 2 日閲覧。
- ^ Gilreath, William F.; Laplante, Phillip A. ( 2012年 12 月 6 日)。コンピュータ アーキテクチャ: ミニマリストの視点。Springer Science+Business Media。ISBN 978-1-4615-0237-1。
- ^ ヘネシー&パターソン 2003、p.108より。
- ^ Durand, Paul. 「命令セットアーキテクチャ (ISA)」。コンピュータサイエンス入門 CS 0。
- ^ ヘネシー&パターソン 2003、92ページ。
- ^ ヘネシー&パターソン 2003、93ページより。
- ^ abc Cocke, John; Markstein, Victoria (1990年1月). 「IBMにおけるRISC技術の進化」(PDF) . IBM Journal of Research and Development . 34 (1): 4–11. doi :10.1147/rd.341.0004 . 2022年10月5日閲覧。
- ^ Page, Daniel (2009). 「11. コンパイラ」.コンピュータアーキテクチャの実践入門. Springer. p. 464. Bibcode :2009pica.book.....P. ISBN 978-1-84882-255-9。
- ^ Venkat, Ashish; Tullsen, Dean M. (2014)。ISA の多様性の活用: 異機種 ISA チップ マルチプロセッサの設計。第 41 回コンピュータ アーキテクチャ国際シンポジウム。
- ^ 「Intel® 64 および IA-32 アーキテクチャー ソフトウェア開発者マニュアル」。Intel Corporation。2022年10 月 5 日閲覧。
- ^ Weaver, Vincent M.; McKee, Sally A. (2009).新しいアーキテクチャのコード密度に関する懸念。IEEE 国際コンピュータ設計会議。CiteSeerX 10.1.1.398.1967。doi : 10.1109 /ICCD.2009.5413117。
- ^ 「RISC vs. CISC」. cs.stanford.edu . 2021年12月18日閲覧。
- ^ ヘネシー&パターソン 2003、120ページ。
- ^ Ganssle, Jack (2001 年 2 月 26 日)。「プロアクティブ デバッグ」。embedded.com。
- ^ 「過去と現在の偉大なマイクロプロセッサ (V 13.4.0)」。cpushack.net 。 2014年7月25日閲覧。
さらに読む
- Bowen, Jonathan P. (1985 年 7 月- 8 月)。「標準マイクロプロセッサ プログラミング カード」。マイクロプロセッサとマイクロシステム。9 (6): 274–290。doi :10.1016/0141-9331(85)90116-4。
- ヘネシー、ジョン L. ;パターソン、デビッド A. (2003)。コンピュータアーキテクチャ: 定量的アプローチ (第 3 版) 。Morgan Kaufmann Publishers。ISBN 1-55860-724-2. 2023年3月4日閲覧。
