【发布时间】:2021-04-20 13:58:44
【问题描述】:
我尝试编写一个简单的程序让用户使用_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
【问题讨论】:
-
这不可能是你的整个程序,因为它缺少数据部分和宏定义。无论如何,您不应该在
:之后为GetDec提供一些东西吗?例如。EXTRN GetDec:PROC. -
csee.umbc.edu/courses/undergraduate/CMSC211/fall01/burt/… 是您正在使用的
PCMAC.INC文件吗? -
“它不起作用”没有多大帮助。你可以说得更详细点吗?它有什么作用,而您希望它做什么?你试图调查什么 - 例如。使用调试器单步执行?如果没有,是什么阻止了你?
-
add al, '*'似乎不太可能是您想要的,因为它会将 ASCII 代码添加在一起。例如,如果用户键入j(ASCII 152),它会添加*(ASCII 42),并输出代码为152+42=194的字符,这是一些扩展图形字符。你可能只是想写mov al, '*'来打印一个星号而不是原来的字符? -
这是我需要做的“用汇编语言编写汇编代码以从键盘读取密码。显示消息“输入密码:”并将用户键入的每个字符回显为星号( *). 如果用户输入了一个退格字符(输入数字 8),通过显示一个退格符来擦除最后一个输入的字符。一个空格和另一个退格符。您不应该擦除超出密码开头的字符,因此您需要计算屏幕上的星号。”