题目:程序执行后,给出操作提示,请用户输入用户名和密码;用户在输入密码时,程序不回显输入字符;只有当用户名输入的用户名、密码字符串和程序内定的字符串相同时,才显示欢迎界面,并返回DOS。界面颜色自定(彩色或黑白)。
程序清单:
DATA SEGMENT USE16
MESG1 DB 0DH,0AH
DB 'Please enter your username:$'
LL EQU $-MESG1
BUF DB 30
DB ?
DB 30 DUP(?)
BUF1 DB 6 DUP(?)
MIMA DB '666666'
WA DB 'Wrong Answer!$'
AC DB 'Welcome!$'
USER DB 'wonz'
WU DB 'Wrong Username$'
PASSWORD DB 'Please enter your password:$'
BUF2 DB 4 DUP(?)
COUNT DB 3
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA,ES:DATA ;ES附加段也要,待显示字符放进ES
BEG:
MOV AX,DATA
MOV DS,AX
MOV ES,AX ;AX传给ES
MOV AX,0003H
INT 10H
AGAIN1:
;MOV AX,0003H
;INT 10H
;MOV DH,12
;MOV DL,(80-LL)/2
MOV AH,09H
MOV DX,OFFSET MESG1 ;取偏移地址
INT 21H
MOV AX,1301H
MOV BL,01001111B
MOV CX,LL
MOV DH,12
MOV DL,(80-LL)/2
MOV BX,OFFSET BUF2
MOV CX,4
;判断用户名是否正确
LAST1:
MOV AH,01H ;输入4位用户名
INT 21H
MOV [BX],AL ;低位传给BX
INC BX ;BX后移一位,一共移4次
LOOP LAST1
MOV DI,OFFSET BUF2
MOV SI,OFFSET USER
CLD
MOV CX,4 ;比较4次
REPE CMPSB ;字符串比较,包括CX-1
JZ AGAIN2 ;ZF=1,表示一样,跳到AGAIN2
MOV AH,2
MOV DL,0AH ;换行
INT 21H
MOV AH,09H
MOV DX,OFFSET WU
INT 21H
DEC COUNT
JZ EXIT
JMP AGAIN1 ;再输入一次用户名
AGAIN2:
MOV AH,2
MOV DL,0AH
INT 21H
MOV AH,09H
MOV DX,OFFSET PASSWORD
INT 21H
MOV BX,OFFSET BUF1
MOV CX,6
MOV COUNT,3
;判断密码是否错误
LAST2:
MOV AH,07H ;不回显字符
INT 21H ;光标下移一行
MOV [BX],AL ;低位传给BX
MOV AH,02H ;显示字符
MOV DL,'*'
INT 21H
INC BX ;BX后移一位,一共移6次
LOOP LAST2
MOV DI,OFFSET BUF1
MOV SI,OFFSET MIMA
CLD
MOV CX,6 ;比较6次
REPE CMPSB ;字符串比较
JZ RIGHT ;ZF=1,表示一样,跳到RIGHT
MOV AH,2
MOV DL,0AH
INT 21H
MOV AH,09H
MOV DX,OFFSET WA
INT 21H
DEC COUNT ;计数,输错三次密码就退出
JZ EXIT
JMP AGAIN2
RIGHT:
MOV AH,2
MOV DL,0AH
INT 21H
MOV AH,09H
MOV DX,OFFSET AC
INT 21H
EXIT:
MOV AH,4CH
INT 21H ;返回 DOS
CODE ENDS
END BEG
实验结果:
程序内设置的用户名为wonz,密码为666666。
测试时,输入用户名为wwww,显示用户名错误以及Please enter your username:
再输入wonz,显示Please enter your password:
输入密码,第一次输入123456,密码错误,再输入,111111,还是错误,第三次输入666666,密码正确,进入欢迎界面。
版权声明:本文为博主原创文章,未经博主允许不得转载。