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

機械語の命令は、操作の種類を示す「オペコード」(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)が本来の名称である。整数リテラルなどは機械語への変換後も即値としてコード中に埋め込まれることが多いが、文字列などはメモリに格納して参照するコードに変換されることになるため、本来両者は別の概念である。