什么是立即操作数?
问题的发现
在汇编语言中, 用作立即操作数 的所有标签和数字常量 ( 即不在诸如 3 (%eax, %ebx, 8) 这样的地址计算中 ) 总是以美元符号 $ 为前缀. 需要的时候, 前缀 0x 表示十六进制数, 例如 $ 0xABC . 如果没有前缀, 则默认该数字为十进制数。
在AT&T
汇编格式中,用$
前缀表示一个立即操作数。(在Intel
汇编格式中,立即数的表示不用带任何前缀。)那我们就有必要知道什么是立即操作数,以便正确添加&
~
我们先了解一下什么是立刻数、什么是操作数?
1. 什么是立刻数
立刻数是一个常量,可以写成十进制(D),十六进制(H),八进制(O),二进制(B)。例如:ADD AX,0FFH
;其中的0FFH
就是立刻数。
通俗一点的理解:一个你可以凭空捏出来给CPU,不需要CPU去各种寄存器取的常量数据。
注意一点:立即数只能作为源操作数,不能放在目的操作数位置。也就是指令中结果所存放的数据位。
2. 什么是操作数
通常一条指令包含操作符和操作数,操作数是指令执行的参与者,也就是说操作数是参与某种功能操作的数据
操作数有三种方式提供:立即数、寄存器存放的数据、内存中的数据
通俗一点的理解:操作符是加工的方式,操作数是被加工的东西。
3. 立即操作数到底是什么
前面提到操作数有一种提供方式是立即数,那么通常把在立即寻址方法指令中给出的数称为立即操作数。(7种寻址方法)
或者这样理解:指令要操作的数据以常量的形式出现在指令中,称为立即操作数。
同样的可以这样延伸理解寄存器操作数、内存操作数。