我尝试编写一个简单的程序让用户使用_GetCh函数输入密码来获取键盘输入,然后当用户输入a到z时使用比较函数将被屏蔽为*,但它不起作用 任何人都可以帮助我我错了哪一部分?
这是我的代码,谢谢
.model small
.586
.stack 100h
INCLUDE PCMAC.INC
.DATA
MSG DB 'Enter Password: $'
PWD DB 'abcd'
.CODE
PASSWORD PROC
mov ax, @DATA
mov ds, ax
mov dx, offset pwd
GetLoop:
_Begin
_PutStr msg
_GetCh noEcho
cmp al, 13
je DONE
cmp al, 'a'
jnae al, EchoIt
cmp al, 'z'
jnbe al, EchoIt
add al, '*'
EchoIt:
_PutCh al
jmp GetLoop
DONE:
_Exit 0
PASWORD ENDP
END PASSWORD
答案 0 :(得分:0)
jnae al, EchoIt
jnbe al, EchoIt
你正在使用什么汇编程序来允许这种特殊的语法?此外,尝试使用更简单的指令形式。 jnae
与 jb
相同,后者更具可读性。
要用星号替换从 'a' 到 'z' 的字符,您可以使用以下命令:
; here you would insert AL in buffer
; and increment the counter
cmp al, 'a'
jb EchoIt
cmp al, 'z'
ja EchoIt
mov al, '*'
EchoIt:
_PutCh al
对于您的任务,您必须将最初输入的字符保存在缓冲区中。您还希望如何验证密码?您必须在进行此星号替换之前插入。
您不想为密码的每个字符显示消息!将您的 GetLoop 标签放在别处:
_Begin
_PutStr msg
GetLoop:
_GetCh noEcho
cmp al, 13
je DONE
cmp al, 8
jne Character
Backspace:
...
Character:
; buffer and counter++
cmp al, 'a'
jb EchoIt
cmp al, 'z'
ja EchoIt
mov al, '*'
EchoIt:
_PutCh al
jmp GetLoop
DONE: