我正在编写一个输入字符串的程序,将其存储在内存中然后输出回屏幕。但是我在解决这个任务时遇到了麻烦。
我的源代码:
IDEAL
MODEL small
STACK 100h
DATASEG
beggining db 100 dup(0)
CODESEG
Start:
mov ax, @data
mov ds, ax
mov bx, offset beggining
myloop:
mov ah, 06h
mov dl, 0ffh
int 21h
mov [bx], al
mov dl, [bx]
mov ah, 02h
int 21h
inc bx
cmp al, 13
je quit
jmp myloop
quit:
mov ax, 4c00h
int 21h
end Start
当我使用上面显示的源代码运行程序时,它不起作用。它进入了一个无限循环。
为什么我的程序不打印我之前输入的字符?
BTW我在TASM写作。
答案 0 :(得分:0)
虽然我现在无法编译和测试你的代码,但我相信int 21h / 06h不等待按下一个键,它只是为无键(或扩展键)返回0。如果是这种情况,您的程序将非常非常快地捣乱记忆。我认为如果键盘缓冲区中没有键,则需要21h / 07h来等待键。
答案 1 :(得分:0)
你想使用INT 21H
函数01
,它从STDIN中读取一个字符并回显它。而不是
mov ah, 06h
mov dl, 0ffh
int 21h
你想:
mov ah, 01h
int 21h
函数01h
是“熟”的控制台输入。它输入字符和回声。它还检查control-C和control-break,如果你按下其中一个键,它将终止你的程序。它也可能会解释像Page Up等扩展字符。我不记得了。
函数07h
是“原始”控制台输入。它不检查control-C或进行任何其他预处理。它为您提供输入的确切内容。
你的问题是你应该在用户按Enter后输出字符串,但是我没有看到任何代码输出你在beggining
存储的字符串。
(顺便说一句,这个词通常拼写为“开头”)