FE EXAM

即値アドレス指定(イミディエイト)

オペランド部に値そのものを書く、メモリアクセス不要のアドレス指定方式

INTERACTIVE VISUALIZATION
命令コード部
オペランド部(即値)
使用する値
命令
ADD R1, #5
即値(オペランド部の値)
#5
メモリアクセス回数
0 回
即値の流れ

▶ または「次へ」で、命令のオペランド部の値そのものが、メモリを参照せずに直接使われる様子を追えます。

ステップ 1 / 5
STEP 1/5命令を読む:ADD R1, #5命令「ADD R1, #5」を見てみます。先頭が命令コード部(オペコード部)、後ろがオペランド部です。「#5」のように「#」が付いた数は即値(イミディエイト)=「命令の中に直接書き込まれた値そのもの」を表します。即値アドレス指定とは、このオペランド部に値そのものを書く方式のことです。
命令語命令コード部ADDオペランド部R1,#5R110レジスタ R1メモリ参照しない
解説

📌
即値アドレス指定とは

命令語の中身命令コード部ADDオペランド部#5 ← 値そのもの「#5」は番地ではなく 5 という値そのもの

即値アドレス指定(イミディエイト:immediate)とは、命令のオペランド部に、計算で使う値そのものを直接書き込んでおくアドレス指定方式のことです。オペランド部=命令のうち「何に対して操作するか」を表す部分のことです。

ほかの方式(直接・間接など)ではオペランド部に「値が入っているメモリの番地(住所)」を書きますが、即値方式では番地ではなく値そのものを書きます。アセンブリでは #5=5 のように「#」記号を付けて即値であることを示します。

身近な例で言うと、買い物メモに「3階の棚を見て」と書くのが直接指定、「りんご3個」と数量を直接書くのが即値です。後者なら棚を探しに行かなくても、メモを見ただけで数が分かります。上のツールで▶ボタンを押すと、オレンジ色のオペランド部にある値「#5」がメモリを参照せずにそのまま使われる様子が見られます。

メモリアクセス不要の利点

即値方式の最大の特徴は、値を取り出すために改めてメモリを読みに行く必要がない点です。命令を取り出した(フェッチした)時点で、使う値も一緒に手元に届いているからです。

オペランド値 = 命令内の値

他の方式と比べると、メモリへのアクセス回数の差がはっきりします。メモリアクセスはCPU内部の処理より時間がかかるため、回数が少ないほど高速です。
即値:メモリアクセス 0回(命令の中に値がある)
直接:メモリアクセス 1回(番地の場所を1回読む)
間接:メモリアクセス 2回(番地を読み、その先をもう1回読む)

即値のメリットをまとめると次のとおりです。
高速:余分なメモリ読み出しが無いので実行が速い
シンプル:値の置き場所(番地)を用意しなくてよい
命令単体で完結:他のメモリ領域に依存しない

身近な例で言うと、レジで「商品番号を調べて棚から取ってくる」のではなく、「その場で 5 個と言えばすぐ計算できる」ようなものです。探しに行く手間がない分、すばやく処理できるわけです。

📐
用途と制約

向いている用途小さな定数を足す初期値を設定制約命令語に収まる範囲の数しか扱えない

即値アドレス指定は、あらかじめ値が決まっている「定数」を扱う場面でよく使われます。プログラムを書いた時点で値が分かっているものに向いています。

典型的な用途は次のとおりです。
カウンタの増減:ループ変数に 1 を足す(ADD R1, #1
初期値の設定:レジスタに 0 を入れる(LOAD R1, #0
固定値との比較・計算:あらかじめ決まった係数を掛ける

一方で、即値には制約もあります。値が命令語の中に直接書き込まれるため、オペランド部のビット幅に収まる範囲の数しか表せないのです。
・大きすぎる値や、実行中に変化する値には使えない
・変化する値はレジスタやメモリ(直接・間接指定)に置く必要がある
・同じ値を何度も書くとプログラムが冗長になることもある

即値指定は、オペランド部の内容がそのまま処理対象の値になる方式で、メモリアクセスが不要です。「値そのもの=即値、番地=直接・間接」という対比で整理すると分かりやすいです。

関連コンテンツ