;***************************************************************
;电话号码查询子程序
;author:野渡无人
;create date:2007-12-20
;***************************************************************
data segment
No_of_name dw 15
No_of_phone dw 12
total dw 27
cnt_name db 5 ;count of input name
inbuf label byte
maxlen db 27
buff_len db ?
buffer db 27 dup(20)
tel_tab db 'Yeduwuren 13424301234 '
db 'Merry 13728875678 '
db 'Bob 13754781234 '
db 'Smith 13874784789 '
db 'Green 13779875678 '
message1 db 'please input name:','$'
message3 db ' NAME',10 dup(20h),' TEL.',13,10,'$'
message7 db 'Sorry!There is not such a name!',13,10,'$'
crlf db 13,10,'$'
search_flag db ? ;=1 stands for search succeed
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
search_rotate:
call input_name ;input a name into buffer
call name_search ;search the name and his telephone
jmp search_rotate
ret
main endp
;---------------------------------------------------------
input_name proc near
push ax
push dx
lea dx,message1 ;prompt,input name:
mov ah,09
int 21h
mov ah,0ah
lea dx,inbuf
int 21h
mov ah,09
lea dx,crlf
int 21h
mov bh,0
mov bl,buff_len
mov cx,No_of_name
sub cx,bx
input_loop:
mov buffer[bx],20h
inc bx
loop input_loop
pop dx
pop ax
ret
input_name endp
;------------------------------------------------------------
name_search proc near
push ax
push bx
push cx
mov search_flag,0
mov cx,No_of_name
mov bh,cnt_name
name_search_rotate:
mov ax,total
cmp bh,0
jbe name_search_judge
dec bh
mov si,0
mov di,0
mul bh
add di,ax
name_search_continue:
mov bl,tel_tab[di]
cmp bl,buffer[si]
jne name_search_rotate
inc di
inc si
loop name_search_continue
mov search_flag,1
name_search_judge:
cmp search_flag,1
jne name_search_failed
mov ah,09
lea dx,message3
int 21h
mov cx,total
mov ax,total
mov di,0
mul bh
add di,ax
name_search_print:
mov ah,02
mov dl,tel_tab[di]
int 21h
inc di
loop name_search_print
mov ah,09
lea dx,crlf
int 21h
jmp name_search_exit
name_search_failed:
mov ah,09
lea dx,message7
int 21h
name_search_exit:
pop cx
pop bx
pop ax
ret
name_search endp
;---------------------------------------------------------
prog ends
;**********************************************************
end start