标号
1.标号的定义:
隐含方式 在指令语句的标号域,由一个标识符和其后跟一个冒号组成。这样该标号就被定义成类型为NEAR的标号。
使用PROC定义 使用过程定义伪指令PROC定义一个过程时,该过程名字也可作为标号,它可作为CALL指令的操作数使用。
使用LABEL定义 用隐含方式定义的标号是NEAR型的,也就是只允许在段内使用。而有时往往需要段间使用,甚至希望在不同段使用同一程序语句,这时就需预先使用LABEL伪指令给这一程序语句建立一个新的名称,以便补充和刷新这些标号原有的属性。
定义FAR属性的标号:
INPUT_POINT LABEL FAR
IN AL,BYTE_PORT
MOV BL,AL.
定义NEAR属性的标号:
SUM_DOB LABEL MEAR
MOV AX,[BX]
ADD AX,[BX 2]
2.标号的属性:
段属性 与变量的段属性相同
偏移属性 与变量的偏移属性相同
类型属性 与变量的类型属性相同
3.标号的引用:标号一旦被定义,即可在操作数域引用,作为循环指令、转移指令和调用指令中的操作数。
4.标号与变量的区别:变量是在程序运行期间可以随时修改数值的数据对象,是内存中的一个数据区的名字,它可以作为指令的存储器操作数;变量名是由标识构成。 标号表示指令地址,是为一组指令语句所起的字。它对应的值在汇编时就自动计算并设置好的;标号是由标识及后跟一个冒号构成。
3.2.4 数值表达式
数值表达式 由常量和算术运算符、逻辑运算符、关系运算符组合成的表达式,其结果为数值。
算术运算符 算术运算符有加( )、减(-)、乘(*)、除(/)和模除(MOD)。其中除法表示两个数相除只取商的整数部分,而模除则表示两个整数相除后取余数。在使用算数运算符构成的表达式作为操作数时,表达式的值必须满足指令对操作数的要求,否则会产生错误。
例如:219/7=31
219 MOD 7的结果为2
表3.2:算术运算符
运算符 |
语法 |
运算 |
─ * / MOD ─ SHR SHL [ ] |
表达式 ─表达式 表达式1 * 表达式2 表达式1 / 表达式2 表达式1 MOD 表达式2 表达式1 表达式2 表达式1 — 表达式2 表达式 SHR 次数 表达式 SHL 次数 表达式1[表达式2] |
正数(单项运算符) 负数(单项运算符) 乘法 除法 模除(求余数) 加法 减法 右移 左移 下标操作符 |
表中后面两个运算符是进行逻辑移位。SHR进行右移时,最左边以0填之,SHL进行左移时,最右边以0填之。移位的位数由运算符SHR/SHL右边的次数决定。如次数≥16,则结果恒为零。移位运算符与移位指令是完全不相同的两回事。移位运算符是对某一个具体的数(常数)在汇编时完成移位的,而移位指令是对一个寄存器或存储单元内容,在程序运行时执行移位的。根据它们在一条语句中出现的位置可以判断出它是移位运算符还是移位指令。例如:
NUM=11011011B
┆
MOV AX,NUM SHL 3
MOV BX,NUM SHR 2
MOV DX,NUM SHR 6
上述三条指令于下面三条指令一一对应等效:
MOV AX,11011000B
MOV BX,00110110B
ADD DX,3
表中最后一个是下标运算符,它对存取数组元素是很有用的。[]表示加法,把表达式1和表达式2相加后形成一个存储器操作数地址。但是两个存储器操作数地址(如两个变量名)不能相加。例如下面两语句是等价的:
MOV AX,DA_WORD[20H]
MOV AX,DA_WORD 20H
即源操作数是以DA_WORD为首址的第20H,21H两个字节组成的一个字。[20H]是一个数组的下标变量,也可以用寄存器来存放下标变量.例如下面5个语句是相互等价的:
MOV AX,ARRAY[BX][SI]
MOV AX,ARRAY[BX SI]
MOV AX,[ARRAY BX][SI]
MOV AX,[ARRAY SI][BX]
MOV AX,[ARRAY BX SI]
逻辑运算符 逻辑运算符包括与(AND)、或(OR)、异或(XOR)、非(NOT)和逻辑右移(SHR)、逻辑左移(SHL)。 逻辑运算符对整数常量进行按位操作,因而运算的结果仍为整数常量。
AND、OR、XOR、NOT、SHR、SHL既是逻辑运算符,也是指令助记符。作为运算符时,则必定出现在操作数域,而且在源程序汇编时进行计算的;而作为指令助记符时,则应放在助记符域,其运算是在程序执行期间才进行。
例如:设NUMBER=01101011B
NUMBER AND OFH的结果是00001011B
NUMBER XOR 11110000B结果是10011011B
NUMBER SHR 2 的结果是00011010B
关系运算符 关系运算符有六种:相等(EQ)、不相等(NE)、小于(LT)、大于(GT)、小于等于(LE)和大于等于(GE)。 关系运算符是在两个常量之间进行的,其结果只有两种情况:若关系成立则结果为0FFFFH(16为全1);否则结果为零。
表3.3:关系运算符
运算符 |
语法 |
运算 |
EQ NE LT LE GT GE |
表达式1 EQ 表达式2 表达式1 NE 表达式2 表达式1 LT 表达式2 表达式1 LE 表达式2 表达式1 GT 表达式2 表达式1 GE 表达式2 |
两个表达式相等为真 两个表达式不相等为真 表达式1表<达式2为真 表达式1=<表达式2为真 表达式1>表达式2为真 表达式1>=表达式2为真 |
例如:设NUM1=50
则表达式“NUM1 NE 100”的值为0FFFFH
而表达式“NUM1 EQ 100”的值为0