第二十一节
地址表达式
变址寻址:
MOV AX,VARW+4 等价于
MOV AX,VARW[4]
基址加变址寻址方式:
VARW[BX][DI]
[VARW+BX+DI]
VARW[BX+DI] 均等价
1,变量和标号的属性
都代表存储单元。
变量表示存储单元中存放数值
标号表示存储单元中存放的是机器指令代码
都具有如下三种属性
(1)段值
(2)偏移
(3)类型 DB,DW,DD NEAR,FAR
数据定义语句
VARB DB 3
WARW DW -1234
BUFF DB 100,3+4,5*6
(1)定义字节数据项
COUNT DB 100
DB 0DH,0AH,'$'
TABLE DB 0,1,4,9,16
(2)定义字数据项
FLAG DW 2FCDH,100,-1
VECT DW 0
DW 100
(3)定义双字节数据项
VECTOR DD 4
FARPTR DD 12345678H,0
(4)定义没有初值的数据项
BUFF DB 5,?,?
(5)定义字符串
MESS1 DB 'HELLO!'
MESS1 DB 'H','E','L','L','O','!' 和上面相同
MESS DB 'AB'
MESS DW 'AB' 两个存储不一样 41H42H 第二个:42H41H
(6)第一其他类型数据项
DT 0 定义十个字节
DQ ? 定义八个字节
重复操作符DUP
有时需要定义数组,有时还需要定义数据缓冲区
BUFFER DB 8DUP(0) 重复8次
BUFFER1 DB 0,0,0,0,0,0,0,0
COUNT:重复次数 DUP (表达式)
可以嵌套使用
第二十二节
2,析值操作符也称数值回送操作符
SEG 变量名或标号(返回段值)
TYPE 变量名或标号(返回类型)
SIZE 变量名
OFFSET 变量名或标号
LENGTH 变量名
VARW DW 1234H,5678H
VARB DB 3,4
MOV AX,SEG VARW
MOV DS,AX
MOV BX,OFFSET VARW+2
操作符TYPE返回变量或标号的类型,类型用数值表示,常见类型
字节变量 1 字变量 2
双字变量 4 近(NEAR) -1
远(FAR) -2
ADD SI,TYPE VARW
操作符LENGTH返回利用DUP定义的数组中元素的个数
如果没有使用DUP,则返回1
嵌套使用DUP,则只返回最外层的重复数
MOV CX,LENGTH VARW
操作符SIZE返回用DUP定义的数组占用的字节数
SIZE 变量 = (LENGTH变量)*(TYPE变量)
3,属性操作符
操作符PTR
MOV [SI],1
MOV WORD PTR [SI],1 ;送字类型的0001H
MOV BYTE PTR [SI],1 ;送字节类型01H
BYTE WORD DWORD NEAR FAR
JMP FAR PTR OK ;OK是标号
JMP DWORD PTR OLDVECT;OLDVECT 是变量
---------------------------------------------------------------------------------
varw dw 34h
mov cx,size varw
da1 db 32 dup(2,3,10 dup(4),7)
da2 dw 'ts','du','ne','st'
da2 dw 'students'
第二十三节
1,常用伪指令语句和源程序组织
(1)符号定义语句
等价语句 EQU
符号名 EQU 表达式
COUNT EQU 100
MOVE EQU MOV
COUNT EQU CX ;COUNT相当于CX
符号名不能重新定义。只能定义一次
(2)等号语句
XX=10
ABCD=1
可重复定义
(3)定义符号名语句
符号名 LABEL 类型
相当于指针
BUFFER LABEL WORD
BUFF DB 100 DUP(0)
QUIT LABEL FAR
EXIT: MOV AH,4CH
QUIT 和 EXIT都可以作为 MOV的标号
(4)段定义语句
缓冲 放到附加段
段开始和结束语句
段名 SEGMENT [定位类型][组合类型][‘类型’]
。。。。。
段名 ENDS
数据段 DSEG
代码段 CSEG
CSEG SEGMENT
MOV AX,DSEG
MOV DS,AX
MOV DX,OFFSET MESS
CSEG ENDS
2,段使用设定语句
ASSUME 段寄存器名
dseg1 segment
varw dw 12
dseg1 ends
dseg2 segment
xxx dw 0
yyy dw 0
dseg2 ends
cseg segment
assume cs:cseg,ds:dseg1,es:dseg2
mov ax,dseg1
mov ds,ax
mov ax,dseg2
mov es,ax
mov ax,varw
mov es:xxx,ax
assume ds:dseg2,es:nothing
mov ax,dseg2
mov ds,ax
mov ax,xxx
mov yyy,ax
cseg ends
3,ORG语句
ORG 数值表达式 设置执行地址为数值表达式
$ 地址计数器当前值
ORG $+8 跳过八个字节执行
ARRAY DW 1,2,$,$+1,$+4,$+4 ;后两个值不一样,都是当前地址+4