アドレッシングモード
アドレッシングモードとは、命令がそのオペランドの場所(レジスタ内、即値として埋め込まれている、またはレジスタとオフセットから計算されたアドレスのメモリ内)をどのように指定するかを定める規則のことです。
Definition
アドレッシングモードとは、命令によって指定される、オペランドの位置を決定するための手法であり、レジスタや命令自体に直接保持される値から、ベースレジスタ、インデックスレジスタ、およびディスプレイスメントから計算されるアドレスまで多岐にわたります。
Scope
このトピックでは、オペランドがどのように命名され、配置されるかについて扱います。具体的には、即値、レジスタ、レジスタ間接、ベース+ディスプレイスメント、インデックス付き、PC相対、およびより複雑な計算モードが含まれます。また、アドレッシングモードがコードサイズ、命令数、ハードウェアの複雑さにどのように影響するかについても考察します。命令がビットでどのようにエンコードされるか(命令形式とエンコーディング)や、システムの仮想から物理への変換(仮想メモリとページング)については扱いません。
Core questions
- 各アドレッシングモードは、オペランドの実効アドレスまたは値をどのように計算しますか?
- 実際のプログラムで最も頻繁に使用されるアドレッシングモードは何ですか、またその理由は何ですか?
- より豊富なアドレッシングモードは、ハードウェアとデコードの複雑さを犠牲にして、命令数をどのように削減しますか?
- ロードストアアーキテクチャがメモリアクセスを少数の単純なモードに制限する理由は何ですか?
Key concepts
- 即値アドレッシング
- レジスタアドレッシング
- レジスタ間接アドレッシング
- ベース+ディスプレイスメント
- インデックス付きアドレッシング
- PC相対アドレッシング
- 実効アドレス計算
- ロードストア制限
Mechanisms
各アドレッシングモードは、プロセッサがオペランドをどのように導出するかを定義します。即値オペランドは命令にエンコードされ、レジスタオペランドはレジスタファイルから読み取られ、メモリオペランドはベースレジスタ、オプションのスケーリングされたインデックス、およびディスプレイスメントを加算することによって実効アドレスが計算されます。PC相対アドレッシングは、プログラムカウンタを基準としたアドレスを形成し、位置独立コードや分岐ターゲットをサポートします。
Clinical relevance
アドレッシングモードは、コンパイラがコードを生成する方法を形成します。ベース+ディスプレイスメントは構造体フィールドやスタック変数に自然にマッピングされ、インデックス付きモードは配列アクセスに、PC相対アドレッシングは位置独立実行可能ファイルや共有ライブラリに利用されます。RISCのロードストア設計は、パイプライン処理を容易にするためにメモリアドレッシングを意図的に単純に保ちますが、CISCマシンはコード密度を高めるためにより豊富なモードを提供します。
History
初期のCISCアーキテクチャでは、メモリ間接やオートインクリメント形式を含む、多くの精巧なアドレッシングモードが蓄積されました。命令使用に関する経験的調査により、少数の単純なモードがほとんどのアクセスを占めることが示され、RISCが少数のモードのみをサポートし、メモリアクセスをロード命令とストア命令に限定するという決定の動機となりました。
Key figures
- John L. Hennessy
- David A. Patterson
Related topics
Seminal works
- hennessy2019
- patterson2020
Frequently asked questions
- RISCアーキテクチャがサポートするアドレッシングモードが非常に少ないのはなぜですか?
- 調査により、プログラムは圧倒的に少数の単純なモードを使用していることが判明しました。メモリアクセスをレジスタ間接とベース+ディスプレイスメントに制限することで、パイプラインを単純かつ効率的に保ち、実効アドレス計算を高速化できます。コンパイラは、これらのプリミティブからより複雑なアクセスパターンを合成します。
- PC相対アドレッシングは何に使用されますか?
- PC相対アドレッシングは、プログラムカウンタからのオフセットとしてアドレスを計算します。これは、分岐およびジャンプターゲット、および近傍データへのアクセスに使用され、メモリ内のどこにロードされても正しく実行される位置独立コードを可能にします。