这是我们学汇编时,要求做的一个小实验,感觉挺有趣的,就想发到博客上来的。初学汇编语言的同学,也可以借鉴参考一下。
实验要求:
程序执行后,给出操作提示,请用户键入用户名和密码;用户在键入密码时,程序不回显键入字符,只有当用户键入的用户名、密码字符串和程序内定的字符串相同时,显示欢迎界面,并返回DOS。
代码里面有比较详细的注释,感兴趣的同学可以看看。
代码:
;FILENAME: EXERCISE2.ASM
.486
DATA SEGMENT USE16
MESG1 DB 0DH,0AH,'Please input username:$'
MESG2 DB 0DH,0AH,'Please input password:$'
MESG3 DB 0DH,0AH,'LOGIN INCORRECT!$'
USERNAME DB 'B12040331$'
PASSWORD DB '123456789$'
FLAG DB ?
BUF DB 30
DB ?
DB 30 DUP(?)
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA
BEG: MOV AX,DATA
MOV DS,AX
MOV ES,AX
AGA: MOV FLAG,0
MOV AH,9 ;显示提示信息(用户名)
MOV DX,OFFSET MESG1
INT 21H
MOV AH,0AH ;输入用户名
MOV DX,OFFSET BUF
INT 21H
MOV BL,BUF+1
MOV BH,0
MOV SI,OFFSET BUF+2
MOV BYTE PTR [BX+SI],'$'
MOV SI,OFFSET BUF+2 ;验证用户名是否正确
MOV DI,OFFSET USERNAME
MOV CX,9
CLD
REPE CMPSB
MOV FLAG,CL
MOV AH,9 ;显示提示信息(密码)
MOV DX,OFFSET MESG2
INT 21H
MOV SI,OFFSET BUF+2 ;处理输入密码
INPUT: MOV AH,0CH ;清除键盘缓冲区
INT 21H
MOV AH,8
INT 21H
CMP AL,13
JZ NEXT
MOV [SI],AL
INC SI
MOV AH,2
MOV DL,2AH
INT 21H
JMP INPUT
NEXT: CMP FLAG,0
JNZ LERROR
MOV SI,OFFSET BUF+2 ;验证密码是否正确
MOV DI,OFFSET PASSWORD
MOV CX,9
CLD
REPE CMPSB
JNZ LERROR
MOV AH,4CH
INT 21H
LERROR: MOV AH,9
MOV DX,OFFSET MESG3
INT 21H
JMP AGA
CODE ENDS
END BEG
运行效果如下: