1. 存储器操作数运算符 [ ]
格式:表达式1[表达式2]
功能:
- 指明该操作数为存储器操作数
- 对表达式具有相加的运算作用(表达式为该操作数的偏移地址)
2. 段重设运算符
格式:段寄存器:[表达式]
功能:“:” 用来指定一个存储器操作数的段属性。
MOV AX, ES:[BX]
MOV AX, DS:[1000H] ; 这个必须要指定,否则不知道
3. TYPE 运算符
取变量或标号的类型属性,并用数字形式表示。对变量来说就是取它的类型字节长度。
变量 | 标号 | ||
---|---|---|---|
BYTE | 1 | NEAR | -1 |
WORD | 2 | FAR | -2 |
DWORD | 4 | ||
QWORD | 8 | ||
TWORD | 10 |
V1 DB 'ABCDE'
V2 DW 1234H, 5678H
V3 DD V2
...
MOV AL, TYPE V1 ; MOV AL, 1
MOV CL, TYPE V2 ; MOV CL, 2
MOV CH, TYPE V3 ; MOV CH, 4
4. LENGTH 运算符
该运算符用于取变量的长度。
- 如果变量是用重复数据操作符 DUP 说明的,则 LENGTH 运算取最外层 DUP 给定的值。
- 如果没有用 DUP 说明,则 LENGTH 运算返回值总是 1 。
K1 DB 10H DUP(0)
K2 DB 10H, 20H, 30H, 40H
K3 DW 20H DUP(0, 1, 2 DUP(0))
K4 DB ‘ABCDEFGH’
...
MOV AL, LENGTH K1 ; (AL)=10H
MOV BL, LENGTH K2 ; (BL)=1
MOV CL, LENGTH K3 ; (CL)=20H
MOV DL, LENGTH K4 ; (DL)=1
5. SIZE 运算符
该运算符只能用于变量,SIZE 取值等于 LENGTH 和 TYPE 两个运算符返回值的乘积。
对于上面例子,加上以下指令:
K1 DB 10H DUP(0)
K2 DB 10H, 20H, 30H, 40H
K3 DW 20H DUP(0, 1, 2 DUP(0))
K4 DB ‘ABCDEFGH’
...
MOV AL, SIZE K1 ; (AL)=10H
MOV BL, SIZE K2 ; (BL)=1
MOV CL, SIZE K3 ; (CL)=20H×2=40H
MOV DL, SIZE K4 ; (DL)=1
6. HIGH/LOW 运算符
这两个运算符用来将表达式的值分离出高字节和低字节。
格式:HIGH/LOW 表达式
- 如果表达式为一个常量,则将其分离成高 8 位和低 8 位。
- 如果表达式为一个地址,则分离出它的高字节和低字节。
地址 —— 段地址或段内偏移量。
应用举例:
设 DATA 段的段基址是 0926H 。
DATA SEGMENT
CONST EQU 0ABCDH
DA1 DB 10H DUP(0)
DA2 DW 20H DUP(0)
DATA ENDS
...
MOV AH, HIGH CONST ; MOV AH, 0ABH
MOV AL, LOW CONST ; MOV AL, 0CDH
MOV BH, HIGH (OFFSET DA1) ; MOV BH, 00H
MOV BL, LOW (OFFSET DA2) ; MOV BL, 10H
MOV CH, HIGH (SEG DA1) ; MOV CH, 09H
MOV CL, LOW (SEG DA2) ; MOV CL, 26H
不能用来分离一个变量、寄存器或存储单元的内容。
DA1 DW 1234H
...
MOV AH, HIGH DA1 ; 错误。不知道HIGH哪个地址
MOV BH, LOW AX ; 错误。汇编时不知道寄存器内容
MOV CH, HIGH [SI] ; 错误。汇编时不知道存储器单元内容