オペランドがメモリアドレスを直接指すアドレス指定方式
直接アドレス指定(ダイレクトアドレッシング)とは、命令のオペランド(=命令が処理する対象を指定する部分)に書かれた数値を、そのままメモリアドレスとして使う方式のことです。実効アドレス(=実際にアクセスする場所)を求めるための計算が不要で、実効アドレス = オペランド という最もシンプルな関係になります。
身近な例で言うと、「住所をそのまま書いた手紙」に似ています。封筒に「東京都〇〇区3丁目」と最終的な届け先を直接書けば、郵便はそこへ1回で届きます。間に「この住所はあそこを見て」といった転送指示がない、最も素直な指定方法です。
上のツールでオペランド値のスライダーを動かすと、青いオペランドからオレンジの矢印が伸び、指し示したメモリセル(緑)の中身が読み出される様子が分かります。オペランドの数字とアクセスするアドレスが完全に一致していることに注目してください。
命令は大きく分けて「命令コード(オペコード)」=何をするか(LOAD・ADD など)と、「オペランド」=どこを対象にするか、の2つで構成されます。直接アドレス指定では、このオペランドの中にアクセスしたいメモリアドレスそのものが入っています。
実効アドレス = オペランド
CPU が命令を解読する流れは次のとおりです。
・命令を取り出す:メモリから命令を読む(フェッチ)
・オペランドを読む:オペランド部の数値をそのまま実効アドレスとする
・メモリにアクセス:その実効アドレスにある値を読み書きする
長所と短所:
・長所:アドレス計算が不要なので高速。仕組みが単純で分かりやすい
・短所:オペランドのビット数で表せる範囲のアドレスしか指定できず、広いメモリ空間を扱いにくい
直接アドレス指定とよく対比されるのが即値(イミディエイト)です。即値はオペランドに書かれた数値をそのまま「データ」として使う方式で、メモリにはアクセスしません。
同じ「5」でも意味がまったく違います。
・即値 #5:使う値は 5 そのもの(メモリは見ない)
・直接アドレス 5:使う値は メモリ[5] の中身(1回メモリを見る)
・記法では即値に # を付けて区別することが多い
整理のコツ: メモリを「何回たどるか」で方式を整理すると覚えやすいです。即値は0回(オペランドが値)、直接アドレスは1回(オペランドがアドレス)、間接アドレスは2回(オペランドがアドレスのアドレス)。この回数の違いが各方式を見分けるカギになります。