;设计内容要求:
;1、菜单
;内容包括:①输入密码(字符串);②密码校验;③退出。
;2、输入字符串
;选择该项后,可以输入一个字符串。该字符串作为密码校验中的已;知密码。
;3、密码校验
;输入字符串,若所输入的字符串与密码不一致则提示:Password ;error!,并重新提示输入密码,当错误输入三次时;
退出软件返回;DOS。若所输入的字符串与密码一致则提示:Password correct!;,并返回主菜单。
;4、在主菜单中选择退出项,则结束程序返回DOS。
;用MASM5.0编译通过,以下是运行结果
;E:\masm>MENU
;
;1.Set Password 2.Input Password 3.Exit
;Set Password: 12333
;1.Set Password 2.Input Password 3.Exit
;Input Password: 11111
;Password error!
;
;1.Set Password 2.Input Password 3.Exit
;Input Password: 12334
;Password error!
;
;1.Set Password 2.Input Password 3.Exit
;Input Password: 12333
;Password correct!
;
;1.Set Password 2.Input Password 3.Exit
;E:\masm>
;
data segment
s0 db 0dh,0ah,'1.Set Password 2.Input Password 3.Exit $'
s1 db 0dh,0ah,'Set Password: $'
s2 db 0dh,0ah,'Input Password: $'
buff1 db 255,255 dup(0)
buff2 db 255,255 dup(0)
next_h db 0dh,0ah
s3 db 0dh,0ah,'Password error!',0dh,0ah,'$'
s4 db 0dh,0ah,'Password correct!',0dh,0ah,'$'
ERR_N DB 0
data ends
code segment
assume cs:code, ds:data
main proc far
start:
push ds
xor ax,ax
push ax
mov ax,data
mov ds,ax
PUSH DS
POP ES
;-------------------------
menu:
mov ah,09
mov dx ,offset s0
int 21h
again:
mov ah,08
int 21h
cmp al,'1'
je set_p
cmp al,'2'
je in_p
cmp al,'3'
je exit_dos1
jmp again
exit_dos1:
ret
set_p:
mov ah,09
mov dx,offset s1
int 21h
mov ah,0ah
mov dx ,offset buff1
int 21h
MOV AL,0
MOV ERR_N,AL ;错误次数清零
jmp menu
in_p:
mov ah,09
mov dx,offset s2
int 21h
mov ah,0ah
mov dx ,offset buff2
int 21h
mov bx ,offset buff1+1
mov al,[bx]
mov bx ,offset buff2+1
mov ah,[bx]
xor ah,al ;设定的与输入的字符串长度相等吗?
jnz err ;不相等
MOV CH,0
MOV CL,AL
MOV SI,OFFSET BUFF1+2
MOV DI,OFFSET BUFF2+2
CLD
REPE CMPSB
JNZ ERR
MOV AH,09
MOV DX,OFFSET S4
INT 21H
JMP MENU
ERR:
MOV AH,09
MOV DX,OFFSET S3
INT 21H
INC ERR_N
MOV AL,ERR_N
CMP AL,3
JE EXIT_DOS
JMP MENU
;-------------------------
EXIT_DOS:
ret
main endp
code ends
end start来自:求助得到的回答
温馨提示:答案为网友推荐,仅供参考