主题:谁能帮小弟遍个电子密码锁的程序啊
dragontjl
[专家分:0] 发布于 2006-01-12 11:51:00
[em18]要求不多,就能检查密码正确,3次错误退出,能修改密码就可以了
板凳
hm1024 [专家分:220] 发布于 2006-01-12 16:56:00
;你看看这个适合你不,我调试过了,可以运行。
count equ 6
number equ 3
data segment
assume ds:data
message db 0dh,0ah,'Do you want to modify the password (Y/N):',24h
string1 db 0dh,0ah,'Modify Password:',24h
string2 db 0dh,0ah,'Confirm Password:',24h
string3 db 0dh,0ah,'Not match !!! Press any key to exit.',0dh,0ah,24h
string4 db 0dh,0ah,'Input Password:',24h
string5 db 0dh,0ah,'Password is right! Press any key to exit.',0dh,0ah,24h
string6 db 0dh,0ah,'Password is wrong! Pleas input again.',0ah,0dh,24h
keyword db 31,32,33,34,35,36
keybak db 32 dup (0)
buffer db 32 dup (0)
times db number
data ends
code segment
assume cs:code
main proc far
mov ax,data
mov ds,ax
mov es,ax
waiting:mov ah,09h ;显示字符串
mov dx,offset message
int 21h
mov ah,0 ;等待输入
int 16h
cmp al,79h ;如果输入的是Y/y那么就转到修改秘码
je modify
cmp al,59h
je modify
cmp al,6eh ;如果输入的是N/n那么就转到输入秘码
je input
cmp al,4eh
je input
cmp al,1bh ;如果输入的是Esc那么就退出程序
je exit
jmp waiting
modify: mov ah,09h ;显示字符串modify Password:
mov dx,offset string1
int 21h
mov bx,offset keyword ;输入秘码
call getkeys ;获得输入秘码,保存到keyword
mov ah,09h ;显示字符串Confirm Password:
mov dx,offset string2
int 21h
mov bx,offset keybak ;请再次输入秘码
call getkeys ;再次获得输入秘码,保存到keybak
mov cx,count ;比较两次输入的秘码是不是一样
cmpkey1:mov si,offset keyword
mov di,offset keybak
repz cmpsb
jz waiting ;两次输入的不一样则按任意键就会结束程序
mov ah,09h ;Not match and press any key to exit.
mov dx,offset string3
int 21h
mov ah,00h
int 16h
jmp exit
mov ah,00h
int 16h
input: mov ah,09h ;显示字符串Input Password:
mov dx,offset string4
int 21h
mov bx,offset buffer ;输入秘码
call getkeys ;获得输入秘码,保存到buffer
mov cx,count ;是否输入了正确的秘码
cmpkey2:mov si,offset keyword
mov di,offset buffer
repz cmpsb
jz inputok ;两次输入的不一样则按任意键就会结束程序
dec times
cmp times,0
jz exit
mov ah,09h ;显示字符串Password is wrong!,Pleas input again.
mov dx,offset string6
int 21h
jmp input
inputok:mov ah,09h ;显示字符串Password is right! Press any key to exit.
mov dx,offset string5
int 21h
mov ah,0
int 16h
exit: mov ah,4ch
int 21h
main endp
getkeys proc near
mov cx,count ;设置循环计数为6,能够保存六个秘码
getkey: mov ah,00h ;等待输入秘码
int 16h
mov byte ptr [bx],al ;将输入的秘码保存到Bx指向的地址处
mov ah,02h ;在当前光标位置显示*
mov dl,'*'
int 21h
inc bx
loop getkey
ret
getkeys endp
code ends
end main