TASM汇编程序代码中的无限循环错误

时间:2011-10-22 19:31:34

标签: assembly tasm

我正在编写一个输入字符串的程序,将其存储在内存中然后输出回屏幕。但是我在解决这个任务时遇到了麻烦。

我的源代码:

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写作。

2 个答案:

答案 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存储的字符串。

(顺便说一句,这个词通常拼写为“开头”)

相关问题