.MODEL SMALL
.STACK 100H
.DATA
MSG DB 'Enter password: $'
DISPLAY_MSG DB 0dh, 0ah, 'NAME: display name', 0dh, 0ah, 'ID NUMBER: display number', '$'
ERROR_MSG DB 'Password does not match.!$'
PASSWORD DB '123'
BUFFER DB 4
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
LEA DX, MSG
MOV AH, 9
INT 21H ; print prompt message
MOV AH, 0AH
LEA DX, BUFFER
INT 21H ; read input from user
MOV SI, OFFSET BUFFER+2 ; skip first byte (input length)
MOV DI, OFFSET PASSWORD
MOV CX, 3 ; compare up to 6 characters
CMP_LOOP:
LODSB ; load byte from SI into AL, increment SI
CMP AL, [DI] ; compare with password character
JNE CMP_FAIL ; jump to failure if not equal
INC DI ; move to next password character
LOOP CMP_LOOP ; repeat until CX is zero
JMP SUCCESS
CMP_FAIL:
; passwords don't match, print error message
LEA DX, ERROR_MSG
MOV AH, 9
INT 21H
SUCCESS:
; passwords match, print success message
LEA DX, DISPLAY_MSG
MOV AH, 9
INT 21H
MOV AH, 4CH
INT 21H ; return to DOS
MAIN ENDP
END MAIN
我如何改变它,使用户输入不显示。我尝试使用int 21h ah=08h
,但我似乎不能使它工作。
我尝试使用int 16h ah=00h
,也尝试使用int 21h ah=08h
创建一个循环。它可以工作,但用户输入没有存储在声明的密码db
中。
1条答案
按热度按时间rks48beu1#
声明od
BUFFER DB 4
是不够的,请参阅BUFFERED INPUT,它应该类似于BUFFER DB 4,0,'XXXX'
。但是,如果您不想显示输入的字符,请使用DOS函数CHARACTER INPUT WITHOUT ECHO。在这种情况下,您不必将输入数据存储到内存中,只需将每个获得的字符与PASSWORD模板进行比较。代替
试试这个: