assembly - 如何使用星号来屏蔽密码?
问题描述
我尝试编写一个简单的程序让用户使用_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
解决方案
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:
推荐阅读
- asp.net - 使用 Stripe SDK 时如何检索结帐信息
- r - Exporting R data - column classed as data.frame exports as blank with write_xlsx
- r - 使用 lapply 更改具有不同列名的数据框列表的列名
- python - last regex match in Python
- google-bigquery - Big Query - Concurrency for dashboard design
- android - Android 如何编写“语音辅助功能”
- lua - Lua 打印在同一行
- wso2 - 使用 Kubenetes 部署的后端服务的 WSO2 API 管理器
- python - 将多个 python 程序转换为具有参数传递功能的单个 exe
- regex - lex 的正则表达式词边界替代