絶対アドレス指定 (ゼッタイアドレスシテイ) とは | 意味や読み方など丁寧でわかりやすい用語解説
絶対アドレス指定 (ゼッタイアドレスシテイ) の読み方
日本語表記
絶対アドレス指定 (ゼッタイアドレスシテイ)
英語表記
absolute addressing (アブソリュートアドレスィング)
絶対アドレス指定 (ゼッタイアドレスシテイ) の意味や用語解説
絶対アドレス指定は、コンピュータのCPUがメモリ上のデータや命令にアクセスする際に用いるアドレス指定方式の一つである。コンピュータの主記憶装置、すなわちメモリは、情報を格納するための多数の区画から構成されており、それぞれの区画には「アドレス」と呼ばれる一意の識別番号が割り当てられている。絶対アドレス指定とは、この物理的なメモリアドレスの値を直接、命令コードの中に含めることによって、アクセスしたいメモリ上の場所を特定する方式である。プログラムがメモリ上のどの位置に配置されて実行されるかにかかわらず、常に同じ固定のアドレスを参照するため、「絶対」という名称が用いられる。この方式は、アドレス指定の中でも最も基本的かつ直接的な方法と言える。 CPUがプログラムを実行する過程では、「メモリの特定番地からデータを読み出す」「特定番地にデータを書き込む」「特定番地にジャンプして次の命令を実行する」といったメモリへのアクセス処理が絶え間なく発生する。絶対アドレス指定を用いた命令では、例えば「アドレス`0x8000`番地に格納されているデータを、CPU内部の記憶領域であるレジスタにロードせよ」というように、操作対象となるメモリアドレスそのものが命令の一部として記述されている。CPUがこの命令を受け取ると、命令内に埋め込まれたアドレス値を解釈し、他の計算を介さずに直接そのアドレスへアクセスして処理を実行する。この単純さゆえに、アドレスを算出するための余分な処理が不要であり、高速なメモリアクセスが可能になるという利点がある。 この方式の特性をより深く理解するためには、対照的な考え方である「相対アドレス指定」と比較するのが有効である。相対アドレス指定は、ある基準点からの相対的な距離(オフセット)を用いて目的のアドレスを決定する方式である。この基準点には、多くの場合、次に実行すべき命令のアドレスを保持しているプログラムカウンタが用いられる。例えば、「現在実行中の命令から128バイト先のアドレスにジャンプせよ」といった形で場所を指定する。この方法の最大の利点は、プログラムの再配置が容易であることだ。プログラム全体がメモリ上の別の場所に移動したとしても、命令間の相対的な位置関係は変わらないため、命令内のオフセット値を書き換える必要がなく、そのまま実行できる。 一方で、絶対アドレス指定には、この再配置に関して大きな制約が存在する。プログラム内に記述されたアドレスは全て固定の絶対値であるため、もしプログラムをコンパイル時に想定されたメモリアドレスとは異なる場所にロードして実行しようとすると、プログラム内の全てのアドレス参照が不正となり、正常に動作しなくなる。この問題はリロケーションの問題として知られており、これを回避するためには、プログラムをメモリにロードする際に、リンカやローダといったシステムプログラムが、実際の配置先アドレスに合わせてプログラム内の全てのアドレス参照部分を書き換えるという、リロケーション処理を行う必要がある。 現代の汎用的なオペレーティングシステム(OS)が動作する環境では、複数のプログラムを同時に実行するマルチタスクが一般的となっている。OSはメモリ管理機能によって、各プログラムをメモリの空いている領域に動的に配置する。どのプログラムがどのアドレスに配置されるかは実行時まで確定しないため、プログラム側で特定のアドレスを絶対値で指定することは、他のプログラムとの衝突を招く危険性が高く、現実的ではない。したがって、今日の一般的なアプリケーション開発においては、配置場所に依存しない相対アドレス指定や、ベースレジスタとオフセットを組み合わせるなどの間接的なアドレス指定方式が主流となっている。 しかし、絶対アドレス指定が全く使われなくなったわけではなく、特定の用途では依然として不可欠な役割を担っている。その代表例が、OSを介さずにハードウェアを直接制御する組み込みシステムである。組み込みシステムでは、メモリ空間が固定的であり、特定のハードウェア機能(I/Oポートや各種デバイスの制御レジスタなど)は、常に決まったアドレスに割り当てられていることが多い。このような固定アドレスへのアクセスには、絶対アドレス指定を用いるのが最も直接的で効率が良い。また、コンピュータの電源が投入されてOSが読み込まれる前に最初に実行されるブートローダや、OSのカーネル自体がハードウェアや自身の重要なデータ構造にアクセスする際にも、絶対アドレス指定が用いられる。これらの環境では、プログラムが配置されるアドレスが予め厳密に決まっているため、絶対アドレス指定の欠点である再配置の困難さが問題となることはない。 結論として、絶対アドレス指定はメモリアドレスを直接指定する単純かつ高速な方式であるが、プログラムの配置場所が固定されるという強い制約を持つ。そのため、その用途は現代においては限定的であるが、コンピュータシステムの根幹をなす低レイヤーのソフトウェアや、ハードウェア制御が重要な分野では、今なお現役で利用される重要な技術である。システムエンジニアを目指す上で、このようなコンピュータの基本的な動作原理を理解することは、システム全体の構造を把握するために不可欠な知識と言える。