; FILENAME:
网页链接 .486
.MODEL SMALL
.STACK 100H
.DATA
PASSWORD DB 'secret', 0 ; 预设密码
USER_INPUT DB 7, 0, 7 DUP(0) ; 用户输入缓冲区,7为最大长度,0为实际长度,后面跟实际输入
WELCOME_MSG DB 'Welcome!', 13, 10, '$' ; 欢迎消息
PROMPT_MSG DB 'PASSWORD:', 13, 10, '$' ; 密码提示消息
INCORRECT_MSG DB 'Incorrect password. Try again.', 13, 10, '$' ; 密码错误消息
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
MOV ES, AX
START:
; 显示密码提示消息
MOV AH, 9
LEA DX, PROMPT_MSG
INT 21H
; 获取用户输入的密码
LEA DX, USER_INPUT
MOV AH, 0Ah
INT 21H
; 显示星号代替实际输入
MOV SI, OFFSET USER_INPUT + 1 ; 指向实际输入的长度
MOV CL, [SI] ; 获取实际输入的长度
MOV CH, 0
ADD SI, 2 ; 跳过长度字节
MOV BL, '*'
MOV CX, [SI-1]
DISPLAY_LOOP:
MOV DL, BL
MOV AH, 2
INT 21H
LOOP DISPLAY_LOOP
; 比较用户输入和预设密码
LEA SI, PASSWORD
LEA DI, USER_INPUT + 2 ; 跳过长度字节
MOV CX, [USER_INPUT + 1] ; 用户输入的实际长度
REPE CMPSB ; 逐字节比较直到不相等或CX为0
JNE PASSWORD_INCORRECT ; 如果不匹配,跳转到错误处理
; 密码正确,显示欢迎消息并退出
MOV AH, 9
LEA DX, WELCOME_MSG
INT 21H
MOV AH, 4CH
INT 21H
PASSWORD_INCORRECT:
; 密码错误,显示错误消息并重试
MOV AH, 9
LEA DX, INCORRECT_MSG
INT 21H
JMP START ; 返回开始处重新尝试
MAIN ENDP
END MAIN