问题描述
我正在为汇编编程做作业,但我无法解决这个问题。 任务是编写一个程序,其中用户键入密码,控制台显示“*”而不是键入的字母。输入所述密码后,用户按 ENTER 键“设置”密码,并要求用户再次输入相同的密码以检查它是否与之前设置的相同。
我让这段代码起作用,它读取击键、保存输入的密码,然后将其写入控制台。但我无法让它在按下 ENTER 时停止。 (现在设置只注册12个字母)
section .text
org 100h
xor si,si
mov dl,'*'
loop:
mov ah,7
int 21h
mov [letters+si],al
mov ah,2
int 21h
inc si
cmp si,12
jnz loop
xor si,si
write:
mov dl,[letters+si]
int 21h
inc si
cmp si,12
jnz write
end:
mov ax,4c00h
int 21h
section .bss
letters resb 12
解决方法
(从书架上拿出一本很旧、满是灰尘的书……)
mov ah,7
int 21h
这将从控制台读取一个字母(没有回声)到 al。之后你将它存储在你的字符串中。在这两行之后,在存储al之前,您必须检查它是否是回车键。在 DOS 中,回车键由两个字符表示,一个回车和一个换行。您只对它们中的任何一个感兴趣,(但您不想存储它们)。回车是 0xd,换行是 0xa。所以你需要像
cmp al,0dh
je endOfLoop; // place label before xor si,si