突然发现好像很久没有写过博客了……
正好最近在上微机课,稍微学了一点汇编,实验课做了个小程序,就正好来水一篇文章(
代码和逻辑还是比较简单的,也加了很多注释,应该可以看懂我就不细讲了(
.486
DATA SEGMENT USE16
password DB 'B18020511$'
password_len=$-password
user DB 'Sinon$'
user_len=$-user
buffer DB 29
DB ?
DB 30 DUP(?)
msg1 DB 'Please enter your user name:$'
msg2 DB 'Please enter your password:$'
msg3 DB 'Sinon,Welcome!'
DB 0AH
DB ' ________ ___ ________ ________ ________ '
DB 0AH
DB '|\ ____\|\ \|\ ___ \|\ __ \|\ ___ \ '
DB 0AH
DB '\ \ \___|\ \ \ \ \\ \ \ \ \|\ \ \ \\ \ \ '
DB 0AH
DB ' \ \_____ \ \ \ \ \\ \ \ \ \\\ \ \ \\ \ \ '
DB 0AH
DB ' \|____|\ \ \ \ \ \\ \ \ \ \\\ \ \ \\ \ \ '
DB 0AH
DB ' ____\_\ \ \__\ \__\\ \__\ \_______\ \__\\ \__\'
DB 0AH
DB ' |\_________\|__|\|__| \|__|\|_______|\|__| \|__|'
DB 0AH
DB ' \|_________| '
DB 0AH,'$'
msg4 DB 'Invalid user name!'
DB 0AH,'$'
msg5 DB 'Password is incorrect!'
DB 0AH,'$'
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA,ES:DATA
BEG:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
;提示输入用户名
NAME_LOOP:
MOV AH,09H
MOV DX,OFFSET msg1
INT 21H
;输入用户名
MOV AH,0AH
MOV DX,OFFSET buffer
INT 21H
MOV AH,02H ;换行
MOV DL,0AH
INT 21H
MOV BL,buffer+1
MOV BH,0
MOV DI,OFFSET buffer+2
MOV BYTE PTR [DI+BX],'$'
;比较是否相等
MOV DI,OFFSET user
MOV SI,OFFSET buffer+2
MOV CX,user_len
CLD
REPE CMPSB
JZ NAME_EXIT
;输入错误
MOV AH,09H
MOV DX,OFFSET msg4
INT 21H
JMP NAME_LOOP
NAME_EXIT:
;提示输入密码
MOV AH,09H
MOV DX,OFFSET msg2
INT 21H
;输入密码
MOV DI,OFFSET buffer+2
MOV CX,20
PASS_IN:
MOV AH,08H
INT 21H
CMP AL,0DH
JE PASS_CMP
MOV [DI],AL
INC DI
LOOP PASS_IN
PASS_CMP:
MOV AH,02H ;换行
MOV DL,0AH
INT 21H
MOV [DI],BYTE PTR'$'
;比较是否相等
MOV DI,OFFSET password
MOV SI,OFFSET buffer+2
MOV CX,password_len
CLD
REPE CMPSB
JZ PASS_EXIT
;输入错误
MOV AH,09H
MOV DX,OFFSET msg5
INT 21H
JMP NAME_EXIT
PASS_EXIT:
;登录后欢迎信息
MOV AH,09H
MOV DX,OFFSET msg3
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END BEG
发表评论