3.2.1 符号定义伪指令
1.等值语句EQU
EQU语句给符号名定义一个值,或定义为别的符号名,或任何可以求出常数值的表达式,也可以是任何有效的助记符。
格式:符号名EQU表达式
符号名经EQU定义过后,在程序中就可使用。表达式可以是能求出常数值的表达式或就是常数,也可以是另一个符号名,也可以是任何有效的助记符。
【例3-16】
CONSTANT EQU 256
DATA EQU HEIGHT+12
ALPHA EQU 7
BETA EQU ALPHA-2
例3-16中,CONSTANT的值为256,ALPHA的值为7,而BETA值就等于7-2=5,因为BETA的表达式中用了ALPHA,因此ALPHA必须在BETA之前先定义。
与EQU相类似的还有一个“=”伪指令可作为等值语句使用。它们之间的区别是EQU伪指令中的符号名是不允许重复定义的,而“=”伪指令则允许重复定义。
【例3-17】
┇
EMP=7
┇
EMP=EMP+2
┇
开始EMP为7,之后EMP为9。注意,在同一源程序中,同一符号名不能同时使用EQU和“=”伪指令来分别定义。
2.定义符号名语句LABEL
基本形式:
名字 LABEL类型
功能:将名字作为一个符号地址,指定其类型,地址由所在位置确定,但并不为名字分配内存空间。
说明:当类型是BYTE、WORD、DWORD、QWORD或TBYTE时,名字作为相应类型的变量;当类型是NEAR或FAR时,名字作为相应类型的标号。
【例3-18】 定义地址相同、类型不同的两个变量
ba LABELBYTE
w a DW 50DUP(?)
将100个字节的数组首地址赋予两个不同类型的变量:字节类型变量ba与字类型变量w a。尽管w a+2与ba+2指向同一内存地址,但下列两条指令的操作类型不同:
MOV w a+2,0 ;将0作为一个字送到地址w a+2
MOV ba+2,0;将0作为一个字节送到地址ba+2
要特别注意LABEL伪指令的位置。若使用如下定义的顺序:
w a DW 50DUP(?)
ba LABELBYTE
则ba的地址等于w a+100。
此外,LABEL也可用于标号。例如,下面的语句定义了两个标号NearL与FarL。
FarLLABELFAR
NearLMOV AX,0
这里,NearL与FarL指向同一条指令,但NearL是NEAR类型的标号,而FarL是FAR类型的标号。这样,同一条指令处定义了两个不同距离属性的标号,以提高引用的灵活性。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。