汇编程序 - 如何使用 ENTER 结束写入密码
Assembler - How to end writing a password with 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 中,回车键由两个字符表示,一个回车 return 和一个换行符。您只对其中一个感兴趣,(但您不想存储它们)。回车return为0xd,换行为0xa。所以你需要像
这样的东西
cmp al, 0dh
je endOfLoop; // place label before xor si, si
我正在做一个汇编编程作业,我无法通过这个问题。 任务是编写一个程序,用户在其中键入密码,控制台显示“*”而不是键入的字母。输入上述密码后,用户按“设置”密码的 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 中,回车键由两个字符表示,一个回车 return 和一个换行符。您只对其中一个感兴趣,(但您不想存储它们)。回车return为0xd,换行为0xa。所以你需要像
这样的东西cmp al, 0dh
je endOfLoop; // place label before xor si, si