$运算符:
当前位置与变量首地址的字节数
BUF DB 'AAAAA'
LL EQU $-BUF;LL=5
SEG运算符:计算段基址
MOV AX,SEG DATA
MOV DS,AX
例:在定义了代码段后,必须写这两行
MOV AX,DATA;DATA 段标号相当于段基址
MOV DS,AX
例:设n型中断服务子程序的名字是SERVICE,将中断变量写入中断向量表
CLI
PUSH DS
PUSHA
MOV AX,SEG SERVICE
MOV DS, AX;必须写成两行
MOV DX,OFFSET SERVICE
MOV AH,25H
MOV AL,n
INT 21H
POPA
POP DS
STI
OFFSET运算符:算出逻辑段某个变量或标号名相对于段首的偏移地址
例:把1~5一次赋给AL
NUM DB 1,2,3,4,5
MOV CX,5
MOV SI,OFFSET NUM
AGA: MOV AL, [SI]
INC SI
LOOP AGA
MOV BX,OFFSET BUF
等价于
LEA BX,BUF
PTR操作符:
(1)必须要用PTR的情况
MOV [],立即数
因为存储器是线性的,立即数前面可以加任意个0,如果不加PTR可以有无数种情况,所以在立即数或[]加PTR
单操作数指令:
INC [],必须加PTR
直接寻址中使用变量和使用寄存器寻址操作数长度都是确定的。
(2)不加PTR的情况
MOV [],寄存器;取寄存器的数放入存储单元
MOV 寄存器,[];去存储单元的数放入寄存器
(3)考虑加PTR的情况:
MOV 寄存器,变量
如果变量和寄存器长度一样,不加PTR
BUF DB 11,22,33,44
MOV AL,BUF ;AL=11
如果变量和寄存器长度不一样,加PTR
BUF DB 11,22,33,44
MOV AX, WORD PTR BUF;AH=22,AL=11
题: