变量定义伪指令:
定义:变量定义伪指令用来为数据分配内存单元,建立变量与储存单元之间的联系。
语句格式:[变量名] 变量定义伪指令 操作数1(,操作数2,操作数3.....)
变量定义伪指令:DB(字节)、DW(字)、DD(双字)、DQ(4字)、DT(5字)
个人理解:将变量定义伪指令理解为C语言中的数据的类型(int、float...),即定义数据类型
DUP语句格式:
变量名 变量定义伪指令 重复次数 DUP(被重复的内容)
注:若被重复的内容为问号(?)表示:重复的内容不定
offset语句格式:
offset 变量名 解释:取变量名的偏移地址(也就是有效地址)
DATA SEGMENT
INBUF DB 6 ;INBUF为变量名,DB为变量定义的伪指令,6为元素个数;
DB ? ;问号(?)表示预留空间,内容不定
;注:上诉定义INBUF的元素个数为6,但最多只能输入5个,因为最后一个元素用于存放回车键,因为字符串要以回车键结尾
INATV DB 6 DUP(?) ;重复的次数为6,重复的内容为不定
DB '$' ;此语句将'$'定义为DB类型,字符串要以'$'结尾
SHI DW 10 ;定义SHI为DW类型且最多含有10个元素
MESS DB 'please inter data:','$' ;定义一串字符串并将其存入MESS中,字符串的定义要以'$'的定义结尾
DATA ENDS
;从第一句话到此,都是在定义数据断代码段
;以下都是对代码段的定义
CODE SEGMENT
ASSUME CS:CODE,DS:DATA ;相比之前的代码读多了DS:DATA,DS为数据段寄存器,存放当前数据段(DATA)的起始地址,
MAIN PROC FAR
START:
MOV AX,DATA ;将数据段的数据放到AX寄存器中
MOV DS,AX ;将AX中的数据存放到DS寄存器中
;注:数据段中的数据无法直接移动到DS中,只能从AX寄存器中到DS
mov dx,offset MESS ;将MESS的有效地址存入dx中
mov ah,09h
int 21h ;这两条语句表示输出字符串
MOV DX,OFFSET INBUF ;将INBUF的有效地址存入DX中
MOV AH,0AH
INT 21H ;这两句代码表示等待你输入字符串
MOV DL,0AH
MOV AH,2
INT 21H ;前三行代码表示输出'换行'
MOV DL,0DH
MOV AH,2
INT 21H ;前三行表示输出'回车'
MOV CL,INBUF+1 ;INBUF的地址+1,指向INBUF的第二个元素,第二个元素表示实际输入字符个数
MOV CH,0 ;将0赋值给CH
PUSH CX ;将CX中的值推进栈(入栈)
MOV BX,OFFSET INATV ;将INATV的有效地址存入BX中
MOV SI,4
DISC:
MOV DL,[BX][SI] ;将BX赋值给DL
MOV AH,2
INT 21H ;输出DL的值
DEC SI ;SI的地址-1
LOOP DISC ;跳到DISC
MOV DL,0AH
MOV AH,2
INT 21H ;输出'换行'
MOV DL,0DH
MOV AH,2
INT 21H ;输出'回车'
MOV DL,INBUF+1
ADD DL,30H
INT 21H ;输出实际输入字符个数
MOV AH,4CH
INT 21H ;终止程序
MAIN ENDP
CODE ENDS
END START