読み方 : そくち

即値【immediate value】イミディエイト

別名  :直値/即値オペランド/immediate operand

即値とは?

アセンブリ言語機械語で、命令が扱う対象の指定(オペランド)としてコード中に直に書き込まれた数値のこと。操作対象としてメモリ上の番地やレジスタ名などではなく、記述した値そのものを指定することからこのように呼ばれる。
即値のイメージ画像

機械語の命令は、操作の種類を示す「オペコード」(opcode)と、操作の対象を示す「オペランド」(operand)から構成される。オペランドの指定方法には、レジスタを使う方法、メモリのアドレスを参照する方法、そして値を命令の中に直接埋め込む方法がある。最後の方法が即値であり、CPUは命令を読み込んだ時点でその値をそのまま利用できる。

例えば、x86系プロセッサの標準的なアセンブリ言語で、「mov ax,bx」という命令は「BXレジスタの内容をAXレジスタにコピーせよ」という意味になるが、「mov ax,0」とした場合は「AXレジスタに0を代入せよ」という意味になる。この「0」のように、対象となるデータそのものをコード中に記したものが即値である。

即値はメモリへの追加アクセスが不要なため、値の取り出しが速い。ループカウンタや固定の加算量など、実行中に変化しない値は即値として記述するのが適している。アセンブリ言語で即値であることを示す記法はCPUの種類やアセンブラによって異なり、「#10」や「$10」のように数値の前に記号を付ける書式が採用されることも多い。

即値として扱える数値の範囲は、命令語の仕様で定義された即値のビット数によって決まる。オペコードが占める分を除いた残りのビット数が上限となるため、あまり大きな値は扱えない。ARMアーキテクチャでは即値のビット幅が特に限られており、大きな値をレジスタロードする際は複数の命令に分けて対処する必要がある。x86系では符号拡張により、短いビット幅の即値を広いレジスタへ展開する仕組みが備わっている。

なお、高水準プログラミング言語で「x=x+1;」の「1」のようにソースコード中に直に書き込まれた文字列や数値のことや、そのようなデータの記述形式を即値ということもあるが、こちらは「リテラル」(literal)が本来の名称である。整数リテラルなどは機械語への変換後も即値としてコード中に埋め込まれることが多いが、文字列などはメモリに格納して参照するコードに変換されることになるため、本来両者は別の概念である。

他の辞典等による「即値」の解説 (外部サイト)

この記事の著者 : (株)インセプト IT用語辞典 e-Words 編集部
1997年8月より「IT用語辞典 e-Words」を執筆・編集しています。累計公開記事数は1万ページ以上、累計サイト訪問者数は1億人以上です。学術論文や官公庁の資料などへも多数の記事が引用・参照されています。