|
|
#2
菜鸟上路2006-12-30 18:01
你的telist写错了位置,以下是加了注释的,数据段定义没加注释
![]() data segment yy1 db 'input name:','$' yy2 db 'input a telephone number:','$' yy3 db 'name',26 dup(' '),'tel.','$' inbuf db 20,?,20 dup(?) outname db 20 dup(?) outphone db 9 dup(?) data ends code segment assume cs:code,ds:data,es:data begin:mov ax,data mov ds,ax mov es,ax telist proc far lea dx,yy1 mov ah,09h int 21h ;输出'input name:' call input_name ;调用input_name mov dl,0dh ; mov ah,2 ; int 21h ; mov dl,0ah ; mov ah,2h ; int 21h ;换行 lea dx,yy2 ; mov ah,09h ; int 21h ;输出'input a telephone number:' call inphone ;调用inphone call crlf ;调用crlf call printline ;调用printline call crlf ;换行 telist endp input_name proc near ;完成名字的操作 call getchar ;调用getchar lea si, inbuf ;取inbuf的有效地址 lea di,outname ;取outname的有效地址 mov cl,[inbuf+1] ;inbuf的长度作为rep movsb的次数 mov ch,0 add si,2 ;从ds:[si+2]开始移 cld ;清方向标志位为0 rep movsb ;相当于mov es:[di],ds:[si],不过要初始化si和di,上面已经初始化 xor bh,bh mov bl,[inbuf+1] ;取inbuf长度 mov al,24h ;ax='$' mov [outname+bx],al ;字符串以'$'结束 ret input_name endp crlf proc near ;功能:换行 mov dl,0dh mov ah,2 int 21h mov dl,0ah mov ah,2 int 21h ret crlf endp getchar proc near ;功能:输入字符串 mov ah,0ah mov dx,offset inbuf int 21h ret getchar endp inphone proc near ;功能:完成电话号码的操作(这里不注释了,同input_name) call getchar lea di,outphone lea si,inbuf add si,2 mov cl,[inbuf+1] sub ch,ch cld rep movsb mov al,24h mov [outphone+8],al ret inphone endp showchar proc near mov ah,09h int 21h ret showchar endp printline proc near ;功能:完成输出操作 lea dx,yy3 call showchar ;输出字符串'name tel.' call crlf ;换行 lea dx,outname call showchar ;输出名字 mov ah,2h ; mov bl,0 ; mov dl,30 ; mov dh,3 ; int 10h ;这几句加上后,显示效果更不好,可以去掉,加上输出26个空格的语句 lea dx,outphone call showchar ;输出号码 ret printline endp code ends end begin [此贴子已经被作者于2006-12-30 18:03:03编辑过] |
自学好不容易啊,大哥大姐们帮小弟一把吧。不胜感激!!!!!
data segment
yy1 db 'input name:','$'
yy2 db 'input a telephone number:','$'
yy3 db 'name',26 dup(' '),'tel.','$'
inbuf db 20,?,20 dup(?)
outname db 20 dup(?)
outphone db 9 dup(?)
data ends
code segment
telist proc far
assume cs:code,ds:data,es:data
begin:mov ax,data
mov ds,ax
mov es,ax
lea dx,yy1
mov ah,09h
int 21h
call input_name
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2h
int 21h
lea dx,yy2
mov ah,09h
int 21h
call inphone
call crlf
call printline
call crlf
telist endp
input_name proc near
call getchar
lea si, inbuf
lea di,outname
mov cl,[inbuf+1]
mov ch,0
add si,2
cld
rep movsb
xor bh,bh
mov bl,[inbuf+1]
mov al,24h
mov [outname+bx],al
ret
input_name endp
crlf proc near
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
ret
crlf endp
getchar proc near
mov ah,0ah
mov dx,offset inbuf
int 21h
ret
getchar endp
inphone proc near
call getchar
lea di,outphone
lea si,inbuf
add si,2
mov cl,[inbuf+1]
sub ch,ch
cld
rep movsb
mov al,24h
mov [outphone+8],al
ret
inphone endp
showchar proc near
mov ah,09h
int 21h
ret
showchar endp
printline proc near
lea dx,yy3
call showchar
call crlf
lea dx,outname
call showchar
mov ah,2h
mov bl,0
mov dl,30
mov dh,3
int 10h
lea dx,outphone
call showchar
ret
printline endp
code ends
end begin


