运算符伪指令

常数

  1. 二进制常数:以字母B为结尾
  2. 八进制常数:以字母Q为结尾
  3. 十进制常数:以字母D为结尾(可省略)
  4. 十六进制常数:以字母H为结尾
  5. 字符串常数:以ASCII码形式存放

算术运算符

  1. +:加
  2. -:减
  3. *:乘
  4. /:除,取整
  5. MOD:模除、取余
  6. SHL:左移
  7. SHR:右移
1
2
MOV AL, 16 MOD 5 ;(AL)=1
MOV AL, 10100100B SHR 2 ;(AL)=00101001B

逻辑运算符

  1. AND:与
  2. OR:或
  3. NOT:非
  4. XOR:异或

用于数值表达式中对数值进行按位逻辑运算,结果为8、16或32位二进制数

注意区分与逻辑运算执行的区别!!!:逻辑运算符在汇编的时候就由汇编程序完成逻辑运算了,而逻辑指令则是在指令执行的时候完成

1
2
3
;(DL)=10110100B
OR DL, NOT 7EH ;其中NOT是逻辑运算符在编译的时候数值已经确定为81H,OR是逻辑运算指令,在执行的时候计算81H与DL寄存器中的数据作或运算,相当于执行指令时候执行下面指令
OR DL, 81H

关系运算符

  1. EQ:等于
  2. NE:不等于
  3. LT:小于
  4. GT:大于
  5. GE:大于等于
  6. LE:小于等于

参与关系运算的必须是两个数值,若关系成立,则结果为真(0FFFFH),否则结果为假(0000H)

1
2
3
4
5
6
MOV AX, ((12 LT 8) AND 5) OR ((20 GE 9) AND 7)

;上式相当于
;(12 LT 8)=0000H, (12 LT 8) AND 5=0
;(20 GE 9)=0FFFFH, (20 GE 9) AND 7=7
;AX=0007H

分析运算符

SEGOFFSETTYPE加在变量名或标号名的前面

  1. SEG:得到变量名或者标号名的段基址
  2. OFFSET:得到变量名或者标号名的偏移量
  3. TYPE:在变量名前面,返回值为1(字节),2(字),4(双子),-1(NEAR),-2(FAR)
  4. LENGTH:用在变量名前面,对与变量使用DUP进行定义的情况,汇编程序将回送分配给该变量的单元数。对于其他情况则送回1.
  5. SIZE:用在变量名前面,汇编程序将送回分配给该变量的字节数,值为LENGTH与TYPE的乘积。

属性说明伪指令

  1. PTR操作符

格式:类型 PTR 地址表达式

功能:确定地址表达式的存储单元为指定的类型(类似与强制类型转换),即用在地址表达式前面,用于指定或临时改变变量名和标号名的类型

分类:BYTEWORDDWORDNEARFAR

例子:

1
2
ADD WORD PTR [SI], 20 ;存储器操作类型为字
JMP FAR PTR OK ;OK是可以进行段间转移的符号
  1. THIS操作符

格式: THIS 类型

功能:返回一个具有指定类型的存储器操作数。返回的存储器操作数的段基地址和偏移址就是下一个将要分配的存储单元的段基址和偏移地址。

例子:

1
2
MY_WORD EQU THIS WORD ;MY_WORD是一个字变量,他的段基址和偏移地址与字节变量MY_BYTE相同
MY_BYTE DB ?
  1. SHORT(短转移说明)

格式: JMP SHORT PTR 目标地址

功能: 转移的目标地址等于当前IP的内容加上8位的位移量,转移的目标地址距离本条指令的下一条指令之间的偏移量范围为-128~127

  1. LABEL伪指令

格式: 变量号/标号 LABEL [类型]

功能:通常和下一个语句所定义的变量和标号联用,给下一个语句所定义的变量和标号取别名。别名由LABEL左边的名称决定,而其类型属性或距离属性则由LABEL右边的参数来给定。

分类:

  • 与变量连用(改变其类型属性)
1
2
3
4
5
6
7
TIMB LABEL BYTE ;为TIMW取别名TIMB,并修改类型为字节型
TIMW DW 1234H, 5678H
...
...
...
MOV AX, TIMW[0] ;(AX)=1234H
MOV BL, TIMB[0] ;(BX)=34H
定义堆栈段也经常使用LABEL语句:
1
2
3
4
ASTACK SEGMENT
DW 20 DUP (?)
TOP LABEL WORD
ASTACK ENDS ;这里定义了一个由20字组成的堆栈,其栈底名称取名为TOP,类型定义为字
  • 与标号连用(改变其距离属性)
1
2
3
4
SUBF LABEL FAR
SUBN:MOV AX,[BX+SI];隐式定义了SUBN的距离属性为NEAR,前面为SUBN去了一个别名SUBF,属性为FAR。
;SUBF和SUBN有着相同的逻辑地址,但他们的距离属性不同,可作为程序转移或调用时不同情况的入口,当段内转移或段间转移,调用不
;同标号名称,实际上是指向同一条指令