アドレッシングモードとは

アドレッシングモード(Addressing Mode)とは、コンピュータのCPU(中央演算処理装置)が実行する命令において、オペランド(演算の対象となるデータ)がメモリやレジスタのどこに存在するか、そのアドレスをどのように指定するかを決定する方式を指します。

これにより、命令の柔軟性が高まり、様々なデータ構造やプログラミングパターンに対応できるようになります。

アドレッシングモードの基本的な概念

CPUは、命令をフェッチ(読み出し)、デコード(解釈)、実行(実行)するサイクルで動作します。命令のデコード段階で、CPUはオペコード(実行する演算の種類)だけでなく、オペランドがどこにあるかを特定するためのアドレッシングモードも解釈します。

主な概念は以下の通りです。

  1. オペランド(Operand): 演算の対象となるデータ、またはそのデータの格納場所を示す情報です。命令の一部として指定されます。
  2. 実効アドレス(Effective Address): アドレッシングモードによって最終的に計算され、CPUが実際にデータにアクセスするために使用するメモリ上の物理アドレスまたは仮想アドレスです。
  3. 命令セットアーキテクチャ(ISA: Instruction Set Architecture): 特定のCPUファミリーがサポートする命令の集合や、それらの命令がメモリやレジスタにどのようにアクセスするかといった、CPUの設計と機能に関する仕様です。アドレッシングモードはISAの重要な要素です。
  4. プログラミング効率と性能: 多様なアドレッシングモードを提供することで、プログラマはより簡潔かつ効率的にコードを記述でき、CPUはメモリへのアクセスを最適化し、全体的な処理性能を向上させることができます。

主要なアドレッシングモードの種類

アドレッシングモードはCPUアーキテクチャによって多少異なりますが、以下に代表的なものを挙げます。

  1. 即値アドレッシングモード(Immediate Addressing Mode)
    • 概要: オペランドとなるデータ値そのものが、命令の中に直接含まれている方式です。
    • 特徴: データ取得のためのメモリ参照が不要なため、最も高速なアクセスが可能です。扱えるデータのサイズは、命令フォーマットで定められたビット幅に制限されます。
    • : ADD AX, 5 (レジスタAXに直接数値5を加算する)
      • 実効アドレスの計算: 不要。5が直接データ。
  2. レジスタアドレッシングモード(Register Addressing Mode)
    • 概要: オペランドがCPU内部のレジスタに格納されており、命令中でそのレジスタの名前を指定する方式です。
    • 特徴: レジスタはCPUに最も近い記憶領域であるため、即値に次いで高速なアクセスが可能です。レジスタの数は限られています。
    • : MOV BX, AX (レジスタAXの値をレジスタBXにコピーする)
      • 実効アドレスの計算: 不要。オペランドはレジスタそのもの。
  3. 直接アドレッシングモード(Direct Addressing Mode)
    • 概要: オペランドが格納されているメモリの物理アドレス(または論理アドレス)が、命令の中に直接指定されている方式です。
    • 特徴: アクセスするメモリ位置が固定されている場合に便利ですが、プログラムの再配置性(異なるメモリ位置にロードされても動作する能力)が低くなることがあります。
    • : LOAD AX, [1000h] (メモリ番地1000h番地にあるデータをレジスタAXに読み出す)
      • 実効アドレスの計算: 実効アドレス=命令に指定されたアドレス
  4. レジスタ間接アドレッシングモード(Register Indirect Addressing Mode)
    • 概要: オペランドのメモリ番地が、指定されたレジスタに格納されている方式です。命令中ではレジスタの名前を指定します。
    • 特徴: ポインタを扱うような場合に非常に強力です。ループ処理で配列の要素を順にアクセスする際などに効率的です。
    • : LOAD AX, [BX] (レジスタBXが指すメモリ番地にあるデータをレジスタAXに読み出す)
      • 実効アドレスの計算: 実効アドレス=指定されたレジスタの値
  5. ベースアドレスアドレッシングモード(Base Addressing Mode)
    • 概要: 指定されたベースレジスタの値に、命令に指定されたオフセット(変位値)を加算して実効アドレスを計算する方式です。
    • 特徴: データ構造のベースアドレスをベースレジスタに格納し、構造体内の各要素をオフセットでアクセスする際に有用です。
    • : LOAD AX, [BX+10h] (レジスタBXの値に10hを加算したメモリ番地にあるデータをレジスタAXに読み出す)
      • 実効アドレスの計算: 実効アドレス=ベースレジスタの値+オフセット
  6. インデックスアドレッシングモード(Indexed Addressing Mode)
    • 概要: 指定されたインデックスレジスタの値に、命令に指定されたオフセットを加算して実効アドレスを計算する方式です。しばしば、配列のインデックスやループカウンタとして利用されます。
    • 特徴: 配列の要素アクセスに適しています。ベースアドレスアドレッシングモードと似ていますが、役割が異なります。
    • : ADD AX, [SI+4*DX] (SIレジスタの値にDXレジスタの値の4倍を加算したメモリ番地にある値をAXに加算する)
      • 実効アドレスの計算: 実効アドレス=インデックスレジスタの値+オフセット
      • スケールファクタ(4∗DXの部分)が加わる場合もあります。
  7. 相対アドレッシングモード(Relative Addressing Mode)
    • 概要: プログラムカウンタ(PC)や命令ポインタ(IP)レジスタの値に、命令に指定されたオフセットを加算して実効アドレスを計算する方式です。
    • 特徴: プログラムコード内の分岐(ジャンプ)命令でよく使用されます。実行可能ファイルがメモリ上のどこにロードされても正しく動作する「再配置可能コード」の生成に役立ちます。
    • : JMP +10h (現在の命令から10hバイト先にジャンプする)
      • 実効アドレスの計算:実効アドレス=PCの値+オフセット

アドレッシングモードの重要性

アドレッシングモードは、CPUの設計と、その上で動作するソフトウェアの効率性に大きな影響を与えます。

  • プログラミングの柔軟性: 様々なデータアクセスパターン(単一の値、配列、構造体、ポインタなど)を効率的に表現できるため、高水準言語のコンパイラがより効率的な機械語を生成しやすくなります。
  • メモリ管理の効率化: ベースレジスタやインデックスレジスタを用いることで、セグメントやページングといったメモリ管理機構と連携し、効果的なメモリ利用を促進します。
  • コードサイズの削減: 複雑なアドレッシングモードは、データアクセスに必要な命令の数を減らし、結果的にプログラム全体のコードサイズを小さくできることがあります。
  • 実行速度の向上: 適切なアドレッシングモードを選択することで、メモリへのアクセス回数を減らしたり、キャッシュヒット率を高めたりすることができ、プログラムの実行速度向上に寄与します。

アドレッシングモードとは、コンピュータのCPUが命令を実行する際に、オペランドがメモリやレジスタのどこに存在するか、そのアドレスをどのように指定するかを決定する方式です。

即値、レジスタ、直接、レジスタ間接、ベースアドレス、インデックス、相対アドレッシングモードなど、多岐にわたる種類が存在し、それぞれが異なるデータアクセスパターンやプログラミング要件に対応します。

アドレッシングモードの選択と設計は、CPUの性能、メモリ管理の効率、コードの柔軟性とサイズに大きな影響を与えるため、コンピュータのアーキテクチャとソフトウェアの効率的な動作を理解する上で不可欠な概念です。

関連用語

オペランド | 今更聞けないIT用語集
アセンブリ | 今更聞けないIT用語集
ITアドバイザリー/情報技術支援

お問い合わせ

システム開発・アプリ開発に関するご相談がございましたら、APPSWINGBYまでお気軽にご連絡ください。

APPSWINGBYの

ソリューション

APPSWINGBYのセキュリティサービスについて、詳しくは以下のメニューからお進みください。

システム開発

既存事業のDXによる新規開発、既存業務システムの引継ぎ・機能追加、表計算ソフトによる管理からの卒業等々、様々なWebシステムの開発を行っています。

iOS/Androidアプリ開発

既存事業のDXによるアプリの新規開発から既存アプリの改修・機能追加まで様々なアプリ開発における様々な課題・問題を解決しています。


リファクタリング

他のベンダーが開発したウェブサービスやアプリの不具合改修やソースコードの最適化、また、クラウド移行によってランニングコストが大幅にあがってしまったシステムのリアーキテクチャなどの行っています。