题目
编写一个子程序嵌套结构的程序模块,分别从键盘输入姓名及8个字符的电话号码,并以一定的格式显示出来
思路
主程序 TELIST:
(1) 显示提示符INPUT_NAME:
(2) 调用子程序INPUT_NAME输入姓名
(3) 显示提示符INPUT A TELEPHONE NUMBER:
(4) 调用子程序INPHONE输入电话号码
(5) 调用子程序PRINTLINE显示姓名及电话号码
子程序INPUT_NAME:
(1) 调用键盘输入子程序GETCHAR,把输入的姓名存放在INBUF缓冲区中
(1) 把INBUF中的姓名移入输出行OUTNAME
子程序INPHONE:
(1) 调用键盘输入子程序GETCHAR,把输入8位电话号码存放在INBUF缓冲区中
(1) 把INBUF中的电话号码移入输出行OUTPHONE
子程序 PRINTLINE:
显示姓名及电话号码:
NAME TEL
** **
代码
datasg segment
INBUF label byte ;接受电话号码输入
maxplen db 9
actplen db ?
phone db 9 dup(?)
mess1 db 'INPUT_NAME:','$'
mess2 db 'INPUT A TELEPHONE NUMBER:','$'
mess3 db 13,10,'$'
mess4 db 'NAME',8 dup(' '),'TEL',0dh,0ah,'$'
mess5 db ' ','$'
OUTNAME db 8 dup(' '),'$'
OUTPHONE db 8 dup(' '),'$'
datasg ends
;-------------
codesg segment
main proc far
assume ds:datasg,cs:codesg,es:datasg
start:
push ds
xor ax,ax
push ax
mov ax,datasg
mov ds,ax
mov es,ax
;------------
mov ah,09h ;显示提示符mess1
lea dx,mess1
int 21h
call INPUT_NAME
mov ah,09h ;显示提示符mess2
lea dx,mess2
int 21h
call INPHONE
call PRINTLINE
;------------
exit:
ret
main endp
;-----------INPUT_NAME------------
INPUT_NAME proc near
call GETCHAR
full: ;填充空白字符
mov bx,actplen
mov bh,0
mov cx,8
sub cx,bx
cmp cx,0
jz next
i20:
mov phone[bx],20h
inc bx
loop i20
next:
cld
mov si,offset phone
mov di,offset OUTNAME
mov cx,8
rep movsb
ret
INPUT_NAME endp
;-----------------------------------
;-----------GETCHAR-----------------
GETCHAR proc near
mov ah,0ah ;调用0a号中断输入到缓冲区
lea dx,INBUF ;ds:dx 为缓冲区首地址
int 21h
mov ah,02h ;换行
mov dl,0ah
int 21h
ret
GETCHAR endp
;---------------------------------
;----------INPHONE----------------
INPHONE proc near
call GETCHAR
cld
mov si,offset phone
mov di,offset OUTPHONE
mov cx,8
rep movsb
ret
INPHONE endp
;---------------------------------
;--------PRINTLINE----------------
PRINTLINE proc near
mov ah,09h ;显示提示符NAME TEL
lea dx,mess4
int 21h
mov ah,09 ;显示OUTNAME
lea dx,OUTNAME
int 21h
mov ah,09
lea dx,mess5
int 21h
mov ah,09 ;显示OUTNAME
lea dx,OUTPHONE
int 21h
ret
PRINTLINE endp
;---------------------------------
codesg ends
end start