运算符伪指令
常数
- 二进制常数:以字母B为结尾
- 八进制常数:以字母Q为结尾
- 十进制常数:以字母D为结尾(可省略)
- 十六进制常数:以字母H为结尾
- 字符串常数:以ASCII码形式存放
算术运算符
- +:加
- -:减
- *:乘
- /:除,取整
- MOD:模除、取余
- SHL:左移
- SHR:右移
1 | MOV AL, 16 MOD 5 ;(AL)=1 |
逻辑运算符
- AND:与
- OR:或
- NOT:非
- XOR:异或
用于数值表达式中对数值进行按位逻辑运算,结果为8、16或32位二进制数
注意区分与逻辑运算执行的区别!!!:逻辑运算符在汇编的时候就由汇编程序完成逻辑运算了,而逻辑指令则是在指令执行的时候完成
1
2
3 ;(DL)=10110100B
OR DL, NOT 7EH ;其中NOT是逻辑运算符在编译的时候数值已经确定为81H,OR是逻辑运算指令,在执行的时候计算81H与DL寄存器中的数据作或运算,相当于执行指令时候执行下面指令
OR DL, 81H
关系运算符
- EQ:等于
- NE:不等于
- LT:小于
- GT:大于
- GE:大于等于
- LE:小于等于
参与关系运算的必须是两个数值,若关系成立,则结果为真(0FFFFH),否则结果为假(0000H)
1 | MOV AX, ((12 LT 8) AND 5) OR ((20 GE 9) AND 7) |
分析运算符
SEG
,OFFSET
,TYPE
加在变量名或标号名的前面
- SEG:得到变量名或者标号名的段基址
- OFFSET:得到变量名或者标号名的偏移量
- TYPE:在变量名前面,返回值为1(字节),2(字),4(双子),-1(NEAR),-2(FAR)
- LENGTH:用在变量名前面,对与变量使用DUP进行定义的情况,汇编程序将回送分配给该变量的单元数。对于其他情况则送回1.
- SIZE:用在变量名前面,汇编程序将送回分配给该变量的字节数,值为LENGTH与TYPE的乘积。
属性说明伪指令
- PTR操作符
格式:类型 PTR 地址表达式
功能:确定地址表达式的存储单元为指定的类型(类似与强制类型转换),即用在地址表达式前面,用于指定或临时改变变量名和标号名的类型
分类:BYTE
,WORD
,DWORD
,NEAR
,FAR
等
例子:
1 | ADD WORD PTR [SI], 20 ;存储器操作类型为字 |
- THIS操作符
格式: THIS 类型
功能:返回一个具有指定类型的存储器操作数。返回的存储器操作数的段基地址和偏移址就是下一个将要分配的存储单元的段基址和偏移地址。
例子:
1 | MY_WORD EQU THIS WORD ;MY_WORD是一个字变量,他的段基址和偏移地址与字节变量MY_BYTE相同 |
- SHORT(短转移说明)
格式: JMP SHORT PTR 目标地址
功能: 转移的目标地址等于当前IP的内容加上8位的位移量,转移的目标地址距离本条指令的下一条指令之间的偏移量范围为-128~127
- LABEL伪指令
格式: 变量号/标号 LABEL [类型]
功能:通常和下一个语句所定义的变量和标号联用,给下一个语句所定义的变量和标号取别名。别名由LABEL左边的名称决定,而其类型属性或距离属性则由LABEL右边的参数来给定。
分类:
- 与变量连用(改变其类型属性)
1 | TIMB LABEL BYTE ;为TIMW取别名TIMB,并修改类型为字节型 |
定义堆栈段也经常使用LABEL语句:
1 | ASTACK SEGMENT |
- 与标号连用(改变其距离属性)
1 | SUBF LABEL FAR |