变量
变量是在程序运行期间可以随时修改数值的数据对象。在汇编语言中,变量是一个数据存贮单元的名字,即数据存放地址的符号表示。变量一般都在数据段或附加段中使用数据定义伪指令DB、DW、DD、DQ、DT和LABLE等来定义。
变量的属性:
段属性(SEGMENT)即指定义变量所在段的段首址,说明了该变量存放在哪一个段中。当需要访问该变量时,该段首址一定要在某一段寄存器中。
偏移属性(OFFSET)变量所在段的段首址到该变量定义语句的字节距离。
类型属性(TYPE)指在对该变量所对应的数据区进行存取时,其存取单位所含的字节数。它可以是字节类型(BYTE,一个数据存贮单元占1个字节),字类型(WORD,一个数据存贮单元占2个字节),双字类型(DWORD)、四字类型,十字节类型。这些类型的选择由定义该变量时所使用的伪指令确定。
变量的引用:变量可以单独作为操作数被引用,也可以构成地址表达式后作为操作数被引用:
(1) 在指令语句中,如要对某存储单元进行存取操作,就可直接引用它的变量名(即符号地址)。例如:
DA1 DB 0FEH
DA2 DW 52ACH
┆
MOV AL,DA1
MOV BX,DA2
上述第一条传送指令就是把符号地址DA1存储单元的内容0FEH传送给AL。而第二条指令是把变量DA2(11p符号地址DA2)的内容52ACH送给BX。
在许多指令语句中,无论在源操作数还是目操作数中,采用了变址(基址)寻址或基址寻址。这时,引用一个变量名就是取用它的偏移量。例如:
DA3 DB 10H DUP(?)
DA4 DW 10H DUP(1)
┆
MOV DA3[SI],AL
MOV DX,DA4[BX][DI]
第一条传送指令的目的操作数地址是DA3的偏移量加上寄存SI的内容(如图3.3所示)。而第二条指令的源操作数的地址是DA4的偏移量加上寄存器BX和DI的内容之和。
图3.3
(2)在伪指令语句中。例如:
HUM DB 75H
ARRAY DW 20H DUP(0)
ADR1 DW NUM
ADR2 DD NUM
ADR3 DW ARRAY[2]
图3.4
上述示例中,前两个是定义并预置了简单变量NUM和数组变量ARRAY。后三个数虽然也是使用数据定义伪指令,定义了三个变量ADRI,ADR2和ADR3,但是这些伪指令操作数字段的表达式是引用另一变量名。这三个变量的内容(即存储单元的内容)均是被引用变量名的地址——它的段基值和偏移量。若用Dw,则仅有变量的偏移量,若用DD,则前两个字节存放偏移量,后两个字节存放段基值。假设上述语句所在段的段基值为0915H,NUM的偏移量为0004H,图给出了这些存储单元的情况。
所以在DW,DD伪指令操作数中(注意:不能用DB!)引用变量名,就构成了存放地址指针的变量,这在程序设计中是很有用处的。