如何使用星号来屏蔽(隐藏)密码?

问题描述 投票:0回答:1

我正在尝试编写一个简单的程序,让用户使用键盘输入的

_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

这是我需要做的:

”用汇编语言编写汇编代码以从键盘读取密码。
显示消息“输入密码:”并回显用户输入的每个字符作为星号 (*)。
如果用户键入退格字符(输入数字 8),则通过显示一个退格键、一个空格和另一个退格键来擦除最后键入的字符。您不应删除密码开头以外的内容,因此您需要记录屏幕上星号的数量。”

assembly input passwords x86-16
1个回答
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:
    
© www.soinside.com 2019 - 2024. All rights reserved.