汇编小实验汇总
读写文件
DATAS SEGMENT
;此处输入数据段代码
;直接调用dos的10号功能,前一个数字为长度
buf1 db 100,?,100 dup(?);存放文本内容
file1 db 'abc.txt',0
file1h dw ?
file2 db 'def.txt',0
file2h dw ?
buf2 db 100 dup(?)
error_meg db 0dh,0ah,'error','$'
success_meg db 0dh,0ah,'success','$'
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
dw 20h dup(?)
top label word
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
main proc far
MOV AX,DATAS
MOV DS,AX
mov ax,stacks
mov ss,ax
lea sp,top
;此处输入代码段代码
;创建文件
lea dx,file1
mov cx,0
mov ah,3ch
int 21h
jc error
mov file1h,ax
;buf1
lea dx,buf1
mov ah,0ah
int 21h
;得到buf1的长度
xor ch,ch
mov cl,[buf1+1]
;将内容写入buf1
lea dx,buf1+2
mov bx,file1h
mov ah,40h
int 21h
jc error
;创建文件file2
lea dx,file2
mov cx,0
mov ah,3ch
int 21h
jc error
mov file2h,ax
xor cx,cx
xor dx,dx
mov bx,file1h
mov al,0
mov ah,42h
int 21h
jc error
;读取file1的内容
lea dx,buf2
mov bx,file1h
xor ch,0
mov cx,10;读取前10个字符
mov cl,[buf1+1]
mov ah,3fh
int 21h
jc error
;显示内容
xor ch,0
mov cx,10;显示前10个字符
mov cl,[buf1+1]
lea si,buf2
q1: mov dl,[si]
inc si
mov ah,02h
int 21h
loop q1
;将内容写入file2
lea dx,file2
mov bx,file2h
mov ch,0
mov cx,10
mov cl,[buf1+1]
mov ah,40h
int 21h
jc error
jmp exit
error:
lea dx,error_meg
mov ah,09h
int 21h
exit:
lea dx,success_meg
mov ah,09h
int 21h
MOV AH,4CH
INT 21H
main endp
CODES ENDS
END main
二分查找
DATAS SEGMENT
;此处输入数据段代码
VALUME DW 42H
LOW_IDX DW ?
HIGH_IDX DW ?
DATAS ENDS
ESEG SEGMENT
;此处输入附加段代码
;数组第一个元素存放数组长度
LIST DW 10,11H,34H,42H,66H,78H,98H,111H,222H,777H,999H
ESEG ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,ES:ESEG
;此处输入代码段代码
B_SEARCH PROC NEAR
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATAS
MOV DS,AX
MOV AX,ESEG
MOV ES,AX
LEA DI,LIST
MOV AX,VALUME
CMP AX,ES:[DI+2]
JA CHK_LAST
CLC
LEA SI,ES:[DI+2]
JE EXIT
STC ;如果VALUME<第一个数组元素,置CF=1
JMP EXIT
CHK_LAST:
MOV SI,ES:[DI]
SHL SI,1
ADD SI,DI
CMP AX,ES:[SI]
JB SEARCH
CLC
JE EXIT
STC ;如果VALUME>最后一个数组元素,置CF=1
JMP EXIT
SEARCH:
MOV LOW_IDX,1
MOV BX,ES:[DI]
MOV HIGH_IDX,BX
MOV BX,DI
MID:
MOV CX,LOW_IDX
MOV DX,HIGH_IDX
CMP CX,DX
JA NO_MATCH
ADD CX,DX
SHR CX,1
MOV SI,CX
SHL SI,1
COMPARE:
CMP AX,ES:[BX+SI]
JE EXIT
JA HIGHER
DEC CX
MOV HIGH_IDX,CX
JMP MID
HIGHER:
INC CX
MOV LOW_IDX,CX
JMP MID
NO_MATCH:
STC
EXIT:RET
B_SEARCH ENDP
CODES ENDS
END B_SEARCH
计算3!+4!+5!
DATA SEGMENT
N DB 5
RESULT DW 0
DATA ENDS
STACK SEGMENT
DW 20H DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
BEGIN:
MOV AX,DATA
MOV DS,AX
MOV AL,N
CALL FACT;调用阶乘子程序计算5!
MOV RESULT,DX
DEC N
MOV AL,N
CALL FACT;调用阶乘子程序计算4!
ADD RESULT,DX
DEC N
MOV AL,N
CALL FACT;调用阶乘子程序计算3!
ADD RESULT,DX
MOV AH,4CH
INT 21H
FACT PROC NEAR;阶乘子程序
MOV DX,1
CMP AL,0
JZ DONE
PUSH AX
DEC AL
CALL FACT
POP AX
MUL DL
MOV DX,AX
DONE: RET
FACT ENDP
CODE ENDS
END BEGIN
将abc.txt的前10个字符复制到def.txt
DATAS SEGMENT
;此处输入数据段代码
pathname1 db 'abc.txt',0
pathname2 db 'def.txt',0
opnmsg db 'open error$'
opnok db 'open finish',0dh,0ah,'$'
wrtmsg db 'write error$'
wrtok db 'write finish',0dh,0ah,'$'
cpymsg db 'write error$'
cpyok db 'copy finish',0dh,0ah,'$'
clsok db 'close finish',0dh,0ah,'$'
str1 db 'Input the content of abc.txt:$'
errcde db 0 ;错误码
handle dw ? ;公用文件号
handle1 dw ? ;abc文件号
handle2 dw ? ;def文件号
content db 100 dup(?),'$'
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
main proc far
ASSUME CS:CODES,DS:DATAS,SS:STACKS
MOV AX,DATAS
MOV DS,AX
;新建文件abc
mov ax,0
lea dx,pathname1
call newfile
cmp errcde,0
jz contin1
jmp exit
contin1:
;新建完成提示
lea dx,opnok
mov ah,09h
int 21h
mov bx,handle
mov handle1,bx
mov bx,0
;输入文件内容
call proch
cmp errcde,0
jz contin2
jmp exit
contin2:
;输入完成提示
mov dx,offset wrtok
mov ah,09h
int 21h
;新建文件def
lea dx,pathname2
call newfile
cmp errcde,0
jz contin3
jmp exit
contin3:
;新建完成提示
lea dx,opnok
mov ah,09h
int 21h
mov bx,handle
mov handle2,bx
mov bx,0
;复制文件
call copy
cmp errcde,0
jz contin4
jmp exit
contin4:
;复制完成提示
lea dx,cpyok
mov ah,09h
int 21h
;关闭文件
mov bx,handle1
call clseh
mov bx,handle2
call clseh
;关闭文件完成提示
lea dx,clsok
mov ah,09h
int 21h
exit:
MOV AH,4CH
INT 21H
main endp
;creat file
newfile proc near
mov ah,3ch
mov cx,0
int 21h
jc a1
mov handle ,ax
ret
a1: mov dx,offset opnmsg ;error
MOV AH,09H
INT 21H
call errm
ret
newfile endp
;input
proch proc near
mov ah,09h
mov dx,offset str1
int 21h
mov di,0
b1:
;输入
mov ah,01
int 21h
;判断回车
cmp al,0dh
je b2
;存入inpuf
mov content[di],al
inc di
jmp b1
b2:
;输入完成,写入文件
mov ah,40h
mov bx,handle1
mov cx,di
lea dx,content
int 21h
jc b3
cmp ax,di
jne b3
ret
b3:
mov dx,offset wrtmsg ;error
MOV AH,09H
INT 21H
call errm
ret
proch endp
copy proc near
mov ah,40h
mov bx,handle2
mov cx,10;复制前10个字符
lea dx,content
int 21h
jc c1
cmp ax,10
jne c1
ret
c1:
mov dx,offset cpymsg ;error
MOV AH,09H
INT 21H
call errm
ret
copy endp
clseh proc near
mov ah,3eh
int 21h
ret
clseh endp
;error
errm proc near
mov errcde,01
ret
errm endp
CODES ENDS
END main
将AX分4组分别放入AL_BL_CL_DL
DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
DB 90H DUP(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
MOV AX,1234H
MOV BX,AX
MOV CX,AX
MOV DX,AX
AND AL,0FH;AL=04
MOV CL,4
SHR BL,CL;BL=03
AND CH,0FH;CH=2
MOV CL,4
SHR DH,CL
MOV DL,DH;DL=01
MOV CL,CH;CL=2
MOV AH,4CH
INT 21H
CODES ENDS
END START
将小写转换成大写
DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
DB 90H DUP(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
INPUT:
MOV AH,1H
INT 21H
CMP AL,0DH
JZ EXIT
CMP AL,'a'
JB INPUT
CMP AL,'z'
JA INPUT
SUB AL,20H
MOV DL,AL
MOV AH,02H
INT 21H
JMP INPUT
EXIT:
MOV AH,4CH
INT 21H
CODES ENDS
END START
逆序输出
DATAS SEGMENT
;此处输入数据段代码
STRING DB 300 DUP(?)
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
DW 10 DUP(?)
TOP LABEL WORD
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC FAR
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
MOV AX,STACKS
MOV SS,AX
LEA SP,TOP
LEA SI,STRING
MOV CX,0
L1:
MOV AH,1 ;注意字符串长度超过253不能用0AH号调用
INT 21H
CMP AL,0DH ;回车结束输入
JE L2 ;ZF=0跳转
MOV [SI],AL
INC CX
INC SI
JMP L1
L2:
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
LEA SI,STRING
ADD SI,CX
DEC SI
STD ;DF=1,地址从高到低
L3:
LODSB ;把SI指向的存储单元读入累加器,LODSB就读入AL
MOV DL,AL
MOV AH,2
INT 21H
LOOP L3
MOV AH,4CH
INT 21H
MAIN ENDP
CODES ENDS
END MAIN
冒泡排序
完整的实验报告戳冒泡排序实验报告
DATAS SEGMENT
;此处输入数据段代码
STR1 DB 'How many data to input? (less than or enqual to 100)$'
STR2 DB 'Input $'
STR3 DB ' datas,press [Enter] after input each data.$'
STR4 DB 'Before sorting:$'
STR5 DB 'After sorted:$'
num DW ? ;存放需排序num个数
buf DW 100 dup(?) ;存放输入的数据
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
;主函数main
main proc near
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
MOV BX,0
MOV SI,10
MOV cx,0
;---------------初始界面
CALL init
;---------------输入需排序num个数
CALL inputNum
MOV DL,0AH ;回车换行
MOV AH,02H
INT 21H
;---------------输出提示语
CALL lead
;---------------输入数据
CALL inputData
;---------------输出未排序的数据
CALL outputUnsortedData
;---------------输出排好序的数据
CALL outputSortedData
MOV AH,4CH ;注意其位置在main内
INT 21H
main endp
;初始界面:显示提示语STR1
init proc near
LEA DX,STR1 ;等价于MOV DX,OFFSET STR1
MOV AH,09H
INT 21H ;不可漏写INT 21H,否则输出内容会一闪而过
MOV AH,02H
MOV DL,0AH ;回车换行
INT 21H
RET
init endp
;输入num
inputNum proc near
MOV BX,0
L0: MOV AH,01H
INT 21H
SUB AL,30H ;AL中的值-0的ASCII码得到数字
CMP AL,0
JL back ;JUMP LESS <0跳转
CMP AL,9
JG back ;JUMP GREAT >9跳转
CBW ;AL扩展成AX AL表示的范围比较小
XCHG AX,BX ;倘若不扩展XCHG和ADD指令的AX,BX改成AL,BL
MUL SI ;按输入顺序将(0-9)*10^n移到相应的位子上
XCHG AX,BX
ADD BX,AX ;BX存放num的值
JMP L0
back:RET
inputNum endp
;输出提示语STR2和STR3
lead proc near
LEA DX,STR2
MOV AH,09H
INT 21H
MOV num,BX ;num=用户输入的个数
CALL outputNum ;输出num
LEA DX,str3
MOV AH,09H
INT 21H
RET
lead endp
;输出num
outputNum proc near
MOV AX,BX
L1:
XOR DX,DX
DIV SI ;DIV SI与输入时MUL SI相对
PUSH DX
INC CX
CMP AX,0
JNZ L1 ;JUMP NOT ZORO
L2:
POP DX
MOV AH,02H
ADD DL,30H ;+0的ASCII码恢复十进制输出
INT 21H
LOOP L2
RET
outputNum endp
;输入数据
inputData proc near
MOV DL,0AH ;回车换行
MOV AH,02H
INT 21H
MOV CX,num ;num的值作为循环次数
MOV DI,0
L3: CALL inputNum
MOV DL,0AH ;回车换行
MOV AH,02H
INT 21H
MOV buf[di],BX ;将输入的数据存入数组buf中
ADD DI,2
LOOP L3
RET
inputData endp
;输出数据
outputData proc near
MOV BP,num ;用CX和LOOP会乱码,改用BP和JNZ实现循环
MOV DI,0
L4: MOV BX,buf[DI]
CALL outputNum
MOV DL,20H
MOV AH,02H
INT 21H ;数据间空格分离
ADD DI,2
DEC BP
JNZ L4 ;JUMP IF NOT ZORO
RET
outputData endp
;输出排序前的数组
outputUnsortedData proc near
LEA DX,STR4
MOV AH,09H
INT 21H
CALL outputData
MOV DX,0AH ;回车换行
MOV AH,02H
INT 21H
RET
outputUnsortedData endp
;输出排序后的数组
outputSortedData proc near
LEA DX,STR5
MOV AH,09H
INT 21H
CALL bubbleSort
CALL outputData
RET
outputSortedData endp
;冒泡排序
bubbleSort proc near
MOV CX,num
DEC CX ;[0,num-1]
loop1:
MOV DI,CX
MOV BX,0
loop2:
MOV AX,buf[BX]
CMP AX,buf[BX+2]
JNG continue ;JUMP IF buf[BX]<=buf[BX+2]
XCHG AX,buf[BX+2]
MOV buf[BX],AX
continue:
ADD BX,2
LOOP loop2
MOV CX,DI
LOOP loop1
RET
bubbleSort endp
CODES ENDS
END main
输入输出有符号数
DATA SEGMENT
str1 db 'please input a signed number: $'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
;------------------------主程序
main proc near
MOV AX,DATA
MOV DS,AX
lea dx,str1
mov ah,9
int 21h
call inputData
call outputData
MOV AH,4CH
INT 21H
main endp
;------------------------输入数据
inputData proc near
push bx
push cx
push dx
xor bx,bx ;BX保存结果,bx=0
xor cx,cx ;CX表正负,初始化为0,0为正,-1为负
mov ah,1
int 21h
cmp al,'+'
jz input1
cmp al,'-'
jnz input2
mov cx,-1
input1:
mov ah,1
int 21h
input2:
cmp al,'0' ;输入数据<0或>9结束输入
jb endInput
cmp al,'9'
ja endInput
sub al,30h
xor ah,ah
shl bx,1
mov dx,bx
shl bx,1
shl bx,1
add bx,dx
add bx,ax
jmp input1
endInput:
cmp cx,0
jz exitInput
neg bx ;cx为0即bx为正数,cx=-1即bx为负数需要求补
exitInput:
mov ax,bx
pop dx
pop cx
pop bx
ret
inputData endp
;------------------------输出数据
outputData proc near
push ax
push bx
push dx
test ax,ax ;判断数据是零、正数或负数
jnz output1
mov dl,'0' ;数据是零,显示“0”后退出
mov ah,2
int 21h
jmp exitOutput
output1:
jns output2 ;数据是负数,显示“-”
mov bx,ax
mov dl,'-'
mov ah,2
int 21h
mov ax,bx
neg ax ;数据求补
output2:
mov bx,10
push bx ;10压入堆栈,作为退出标志
output3:
cmp ax,0
jz output
xor dx,dx
div bx
add dl,30h ;余数(0~9)转换为ASCII码
push dx ;数据各位先低位后高位压入堆栈
jmp output3
output:
pop dx
cmp dl,10
je exitOutput
mov ah,2
int 21h
jmp output
exitOutput:
pop dx
pop bx
pop ax
ret
outputData endp
CODE ENDS
END main
输入姓名和8个字符的电话号码
DATAS SEGMENT
;此处输入数据段代码
a_name db 20
a_phone db 8
message1 db 'input name: $'
message2 db 'input a telephone number:','$'
message3 db 'NAME',16 dup(20h),'TEL',13,10,'$'
error_message1 db 'Please input 8 numbers',13,10,'$'
error_message2 db 'Please input a right number',13,10,'$'
inbuf db 20 dup(?)
outname db 20 dup(?),'$'
outphone db 8 dup(?),'$'
flag db ?
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
;-----------------------------主程序
main proc far
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
mov flag,0
lea dx,message1 ;显示提示符INPUT NAME:
mov ah,09h
int 21h
call input_name ;调用子程序INPUT_NAME输入姓名:
call crlf
lea dx,message2 ;显示提示符INPUT A TELEPHONE NUMBER
mov ah,09h
int 21h
call inphone ;调用子程序INPHONE输入电话号码
call crlf
cmp flag,1
je exit
call printline
exit:
ret
main endp
;-----------------------------子程序INPUT_NAME输入姓名
input_name proc near
push ax
push dx
push cx
mov cx,0
mov cl,a_name
call getchar
mov ax,0
mov al,a_name
sub ax,cx ;ax = 输入的名字长度
mov cx,ax
mov si,0
next1:
mov al,inbuf[si]
mov outname[si],al
inc si
loop next1
pop cx
pop dx
pop ax
ret
input_name endp
;-------------------------------子程序回车换行
crlf proc near
push ax
push dx
mov dl,13
mov ah,02h
int 21h
mov dl,10
mov ah,02h
int 21h
pop dx
pop ax
ret
crlf endp
;-----------------------------子程序getchar把输入的内容存放在INBUF缓冲区中
getchar proc near
push ax
push dx
mov di,0
rotate:
mov ah,01h
int 21h
cmp al,13
je exit1
mov inbuf[di],al
inc di
loop rotate
exit1:
pop dx
pop ax
ret
getchar endp
;-----------------------------子程序inphone输入电话号码
inphone proc near
push ax
push dx
mov cx,0
mov cl,a_phone
call getchar
cmp cx,0
jnz error1
mov cl,a_phone
mov si,0
next2:
mov al,inbuf[si]
cmp al,30h
jl error2
cmp al,39h
ja error2
mov outphone[si],al
inc si
loop next2
jmp exit2
error1:
call crlf
lea dx,error_message1;输入错误1:电话号码长度不是8位
mov ah,09h
int 21h
mov flag,1
jmp exit2
error2:
call crlf
lea dx,error_message2;输入错误2:电话号码不是数字
mov ah,09h
int 21h
mov flag,1
jmp exit2
exit2:
pop dx
pop ax
ret
inphone endp
;-----------------------------子程序PRINTLINE显示姓名和电话号码
printline proc near
push ax
push dx
lea dx,message3
mov ah,09h
int 21h
lea dx,outname
mov ah,09h
int 21h
lea dx,outphone
mov ah,09h
int 21h
pop dx
pop ax
ret
printline endp
CODES ENDS
END main
字符串匹配
DATA SEGMENT
;此处输入数据段代码
STRING1 DB 'abcDEF'
STRING2 DB 'abcDEF'
LEN1 DW $ - STRING1
LEN2 DW $ - STRING2
STRING3 DB 'MATCH$'
STRING4 DB 'NO MATCH$'
DATA ENDS
STACK SEGMENT stack
;此处输入堆栈段代码
DW 5 DUP(?)
TOP LABEL WORD
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
MAIN PROC FAR ;DOS内核与主程序不在同一个段地址内用far(near)
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
MOV AX,DATA
MOV DS,AX
;此处输入代码段代码
MOV ES,AX
MOV CX,LEN1
CMP CX,LEN2
JNE L1 ;Jump if not equal
LEA SI,STRING1
LEA DI,STRING2
CLD
REPE CMPSB
JNZ L1 ;Jump if not zero/equal
LEA DX,STRING3 ;取偏移地址
JMP L2 ;无条件跳转到L2
L1:LEA DX,STRING4
L2:MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
MAIN ENDP
CODE ENDS
END MAIN
子程序嵌套程序
完整的实验报告戳子程序嵌套程序实验报告
data segment
No_of_name db 20
No_of_phone db 8
inbuf db 20 dup(?)?
outname db 20 dup(?),'$'
outphone db 8 dup(?),'$'
message1 db 'please input name:','$'
message2 db 'please input a telephone number:','$'
message3 db 'NAME',16 dup(20h),'TEL.',13,10,'$'
errormessage1 db 'you should input 8 numbers!',13,10,'$'
errormessage2 db 'you input a wrong number!',13,10,'$'
flag db ?
data ends
;**************************************************************
prog segment
;--------------------------------------------------------------
main proc far
assume cs:prog,ds:data
start:
push ds
sub ax,ax
push ax
?
mov ax,data
mov ds,ax
mov flag,0
lea dx,message1
mov ah,09
int 21h
call input_name
call crlf
lea dx,message2
mov ah,09
int 21h
call inphone
call crlf
cmp flag,1
je exit
call printline
exit:
ret
main endp
;------------------------------------------------------------
input_name proc near
push ax
push dx
push cx
mov cx,0
mov cl,No_of_name
call getchar
??????
mov ax,0
mov al,No_of_name
sub ax,cx
mov cx,ax
mov si,0
next1:??????
mov al,inbuf[si]
mov outname[si],al
inc si
??????
loop next1
pop cx
pop dx
pop ax
ret
input_name endp
;-------------------------------------------------------------
inphone proc near
push ax
push dx
??????
mov cx,0
mov cl,No_of_phone
call getchar
cmp cx,0
jnz error1
mov cl,No_of_phone??
mov si,0
??????
next2:??????
mov al,inbuf[si]
??????
cmp al,30h
jl error2
cmp al,39h
ja error2
mov outphone[si],al
inc si
??????
loop next2
jmp exit2
error1:
call crlf
lea dx,errormessage1
mov ah,09
int 21h
mov flag,1
jmp exit2
error2:
call crlf
lea dx,errormessage2
mov ah,09
int 21h
mov flag,1
jmp exit2
exit2:
pop dx
pop ax
ret
inphone endp
;---------------------------------------------------------
getchar proc near
push ax
push dx
mov di,0
rotate:
mov ah,01
int 21h
cmp al,0dh
je exit1
mov inbuf[di],al
inc di
loop rotate
exit1:
pop dx
pop ax
ret
getchar endp
;----------------------------------------------------------
crlf proc near
push ax
push dx
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
?
pop dx
pop ax
ret
crlf endp
;---------------------------------------------------------
printline proc near
push ax
push dx
lea dx,message3
mov ah,09
int 21h
????????
lea dx,outname
mov ah,09
int 21h
lea dx,outphone
mov ah,09
int 21h
pop dx
pop ax
ret
printline endp
;---------------------------------------------------------
prog ends
;*********************************************************
end main