ScholarGate
アシスタント

命令フォーマットとエンコーディング

命令フォーマットは、各機械命令がバイナリでどのように配置されるか(オペコード、レジスタフィールド、即値)を定義し、プログラムがどれだけコンパクトに格納され、ハードウェアがどれだけ容易にデコードできるかを決定します。

PaperMindでテーマを探す近日公開Find papers & topics
Tools & resources
スライドをダウンロード
Learn & explore
動画近日公開

Definition

命令フォーマットとは、機械命令内のビットフィールドの定義された配置であり、その操作とオペランドをエンコードします。命令エンコーディングとは、命令をこれらのバイナリパターンにマッピングするスキームです。

Scope

このトピックでは、命令のバイナリ表現について扱います。固定長エンコーディングと可変長エンコーディング、操作、ソースおよびデスティネーションレジスタ、即値を指定するフィールド、そしてコード密度とデコードの単純さの間のトレードオフが含まれます。RISC-VのR/I/S/B/U/Jタイプのような代表的なフォーマットファミリーも含まれます。オペランドが使用するアドレッシングモードの選択(アドレッシングモード)や、より広範なRISC/CISCの哲学(RISCとCISC)は対象外です。

Core questions

  • 操作とそのオペランドを指定するために、命令エンコーディングにはどのようなフィールドが含まれている必要がありますか?
  • 固定長エンコーディングと可変長エンコーディングは、デコードの単純さとコード密度の間でどのようにトレードオフしますか?
  • 即値と大きな定数は、限られた命令ビット内でどのようにエンコードされますか?
  • 規則的なエンコーディングは、パイプライン化された命令デコードをどのように簡素化しますか?

Key concepts

  • オペコードフィールド
  • レジスタ指定子フィールド
  • 即値フィールド
  • 固定長対可変長エンコーディング
  • コード密度
  • デコードの規則性
  • 命令フォーマットファミリー (R/I/S/B/U/J)

Mechanisms

各命令はビットフィールドに分割されます。オペコードは操作を選択し、レジスタフィールドはオペランドを命名し、即値フィールドは定数またはアドレスオフセットを保持します。固定長フォーマット(RISC-Vなど)では、すべての命令が同じ幅を保ち、フィールドが整合性をもって配置されるため、デコードが単純かつ高速になります。可変長フォーマット(x86など)では、命令を密にパックして密度を高めますが、デコードがより複雑になるという代償を伴います。

Clinical relevance

エンコーディングの選択はプロセッサ全体に影響を及ぼします。規則的な固定長フォーマットは、ディープパイプライン処理を実用的にする単純で高速なデコーダを可能にし、高密度の可変長フォーマットは命令メモリトラフィックを削減します。コンパイラとアセンブラはこれらのフォーマットを正確にターゲットにする必要があり、命令セット拡張は既存のエンコーディング空間内に収まる必要があります。

History

初期の命令セットは、希少なメモリを節約するために、不規則で手作業で調整されたエンコーディングを使用していました。1980年代のRISCムーブメントは、デコードとパイプライン処理を効率化するために均一な固定長フォーマットを支持しましたが、x86のようなCISCセットは高密度の可変長エンコーディングを保持しました。RISC-Vのような現代のオープンISAは、クリーンで拡張可能なフォーマットファミリーを体系化しています。

Key figures

  • David A. Patterson
  • John L. Hennessy

Related topics

Seminal works

  • patterson2020
  • hennessy2019

Frequently asked questions

RISC命令セットが固定長エンコーディングを使用するのはなぜですか?
固定長命令により、プロセッサは命令長を最初にデコードすることなく、次の命令を見つけてそのフィールドを抽出できます。これにより、フェッチおよびデコード段階が簡素化され高速化され、可変長エンコーディングよりもディープパイプライン処理がはるかに容易になります。
命令の幅が固定ビット数しかない場合、大きな定数はどのように処理されますか?
即値フィールドは限られているため、大きな定数は分割して構築されます。例えば、上位即値ロード命令で上位ビットを設定し、続く命令で下位ビットを追加するか、定数をメモリに配置してロードします。

Methods for this concept

Related concepts