汇编程序 - 如何使用 ENTER 结束输入密码

问题描述

我正在为汇编编程做作业,但我无法解决这个问题。 任务是编写一个程序,其中用户键入密码,控制台显示“*”而不是键入的字母。输入所述密码后,用户按 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