オペランドが指すアドレスにさらに目的のアドレスが入っている指定方式
間接アドレス指定(インダイレクトアドレッシング)とは、命令のオペランドが「目的のアドレスが書かれている場所のアドレス」を示す方式のことです。オペランドが指す先には目的の値ではなく別のアドレスが入っており、そのアドレスをもう一度たどって初めて目的の値にたどり着きます。式で書くと 実効アドレス = メモリ[オペランド] です。
身近な例で言うと、「ロッカーの鍵が入った別のロッカー」に似ています。受付で「101番ロッカーを開けて」と言われて開けると、中に入っているのは荷物ではなく「205番の鍵」。その鍵で205番を開けて、ようやく本当の荷物が手に入ります。1つ目のロッカーは道案内でしかなく、2段階たどるのがポイントです。
上のツールでオペランド値のスライダーを動かすと、紫の矢印で1段階目(ポインタセル)へ、緑の矢印で2段階目(実効アドレス)へとアドレスを追跡する様子が分かります。ポインタの中身を変えると行き先が変わることに注目してください。
間接アドレス指定の中心にあるのがポインタという考え方です。ポインタとは「値そのものではなく、値がある場所(アドレス)を指し示すもの」のこと。プログラミングで配列やリストを扱うときにも欠かせない基礎概念です。
実効アドレス = メモリ[オペランド]
アドレスを追跡する流れは2段階です。
・1段階目:オペランドが指すセル(ポインタ)を読む → 中身は別のアドレス
・2段階目:そのアドレス(=実効アドレス)のセルを読む → これが目的の値
・直接アドレスよりメモリ参照が1回多い分だけ時間がかかる
なぜ便利なのか:ポインタの中身(行き先アドレス)を書き換えるだけで、命令そのものを変えずにアクセス先を切り替えられます。たとえば「次のデータの場所」をポインタに入れておけば、同じ命令を繰り返すだけでデータを次々とたどれます。これがリスト構造やテーブル参照を効率よく実現する仕組みです。
| 直接アドレス指定 | 間接アドレス指定 | |
|---|---|---|
| オペランドの中身 | 目的のアドレス | アドレスのアドレス |
| メモリ参照回数 | 1回 | 2回 |
| 速度 | 速い | 1回分遅い |
| 得意なこと | 固定の場所を素早く参照 | 参照先を柔軟に切り替え |
両者の違いは「オペランドが目的地そのものか、目的地までの案内板か」です。直接指定はオペランド=行き先なので1回でアクセスできます。間接指定はオペランド=案内板の場所なので、案内板を見てから本当の行き先へ進む2段階構成になります。
整理のポイント: 「メモリを何回たどるか」で整理すると分かりやすいです。
・即値:0回(オペランドが値そのもの)
・直接アドレス:1回(オペランドがアドレス)
・間接アドレス:2回(オペランドがアドレスのアドレス)