アドレス指定方式(アドレスしていほうしき)とは | 意味や読み方など丁寧でわかりやすい用語解説

アドレス指定方式(アドレスしていほうしき)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

アドレス指定方式 (アドレスしていほうしき)

英語表記

Addressing mode (アドレッシングモード)

用語解説

「アドレス指定方式」は、コンピュータの中央処理装置(CPU)が、メモリや入出力デバイスに格納されているデータや命令にアクセスする際に、その場所を示す「アドレス」をどのように決定・計算するかを定めたルールや方法の総称である。コンピュータがプログラムの命令を実行する際、その命令自体や操作対象となるデータがメモリ上のどこにあるかを正確に知る必要がある。このアドレスを知るためのさまざまな手法がアドレス指定方式であり、効率的なプログラムの実行や柔軟なデータ操作を実現するために不可欠な概念である。プログラマがプログラムを作成する際、通常は高級言語で記述するため、アドレス指定方式を直接意識することは少ないかもしれないが、コンパイラやアセンブラはこれらの方式を適切に利用して機械語コードを生成している。また、オペレーティングシステムがメモリを管理する上でも、この概念は非常に重要となる。

アドレス指定方式には様々な種類があり、それぞれ異なる目的と利点を持つ。主な方式としては、即値指定、直接指定、間接指定、レジスタ指定、レジスタ間接指定、ベースレジスタ指定、インデックス指定、相対指定などが挙げられる。

まず、即値指定(Immediate Addressing)は、命令のオペランド部そのものがデータとなる方式である。例えば、「ADD 5」という命令では、数値の「5」がそのまま加算対象のデータとなる。メモリへのアクセスが不要なため、最も高速なデータ取得方法の一つである。主に定数を扱う場合や、レジスタに初期値を設定する場合に利用される。

次に、直接指定(Direct Addressing)は、命令のオペランド部に、アクセスしたいデータが格納されているメモリの物理アドレスを直接記述する方式である。例えば、「LOAD 1000H」という命令であれば、メモリ番地1000Hに格納されているデータを読み込む。シンプルな構造で理解しやすいが、プログラムがメモリ上の特定の固定位置に依存するため、柔軟性に欠ける場合がある。

間接指定(Indirect Addressing)は、命令のオペランド部に、データのアドレスが格納されているメモリのアドレスを指定する方式である。つまり、一度メモリにアクセスしてデータのアドレスを取り出し、そのアドレスを使って再度メモリにアクセスしてデータ本体を取得する。これはポインタ変数と似た概念であり、一つのアドレス指定で様々な場所のデータを参照できる柔軟性を持つ。

レジスタ指定(Register Addressing)は、命令のオペランド部に、CPU内部のレジスタ番号を指定する方式である。データがレジスタ内にすでに存在する場合に用いられ、CPUに最も近い場所からデータを取得するため、即値指定に次いで高速なアクセスが可能である。一時的な計算結果や頻繁に利用されるデータを保持するのに適している。

レジスタ間接指定(Register Indirect Addressing)は、命令のオペランド部にレジスタ番号を指定し、そのレジスタが保持している値がデータのアドレスを示す方式である。レジスタにアドレス値を格納しておき、そのアドレスを用いてメモリにアクセスする。間接指定と異なり、一度レジスタにアドレスをロードすれば、その後はメモリへのアクセス回数を減らせる可能性がある。配列の要素を順次処理する際など、アドレスを動的に変更しながらアクセスするのに有効である。

ベースレジスタ指定(Base Register Addressing)は、特定のレジスタ(ベースレジスタ)に基準となるアドレス(ベースアドレス)を格納し、命令のオペランド部で指定されたオフセット値(変位)をそのベースアドレスに加算することで、実効アドレスを算出する方式である。例えば、ベースレジスタにプログラムの開始アドレスを設定し、各データへのアクセスはオフセット値で表現することで、プログラム全体をメモリ上の任意の位置に再配置(リロケーション)することが容易になる。

インデックス指定(Indexed Addressing)は、インデックスレジスタと呼ばれる特定のレジスタにインデックス値(添字)を格納し、命令のオペランド部で指定された基準アドレス(ベースアドレスまたは変位)にそのインデックス値を加算して実効アドレスを算出する方式である。主に配列や構造体のような連続したデータ構造の要素に順番にアクセスする際に用いられる。インデックスレジスタの値を変更するだけで、配列の次の要素にアクセスできるため、繰り返し処理に非常に適している。

相対指定(Relative Addressing)は、現在実行中の命令のアドレスを保持しているプログラムカウンタ(PC)の値に、命令のオペランド部で指定されたオフセット値(変位)を加算して実効アドレスを算出する方式である。特に条件分岐やジャンプ命令において、プログラムカウンタからの相対的な位置を指定するのに使われる。この方式の利点は、プログラム全体がメモリ上のどこに配置されても正しく動作するため、位置独立なコード(PIC: Position-Independent Code)を作成するのに役立つ点である。

これらの複数のアドレス指定方式が存在するのは、CPUが様々なタイプのデータアクセス要求に効率的かつ柔軟に対応するためである。ある方式は定数アクセスに最適であり、別の方式は配列アクセスに、また別の方式はプログラムの再配置や位置独立なコード生成に適している。CPUは、命令の種類やオペランドの形式に応じて最適なアドレス指定方式を選択し、実効アドレス(実際にデータが格納されているメモリアドレス)を計算して、データや命令の読み書きを実行する。これにより、プログラマはより表現豊かで効率的なプログラムを記述できる基盤が提供されている。

関連コンテンツ