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

Assembly TASM汇编程序代码中的无限循环错误,assembly,tasm,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 21

我现在正在写一个程序,它输入一个字符串,存储在内存中,然后输出回屏幕。但是我在解决这个问题上遇到了困难

我的源代码:

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
当我用上面显示的源代码运行程序时,它不工作。它进入一个无限循环

为什么我的程序不打印我之前键入的字符


顺便说一句,我是用TASM写的。

虽然我现在无法编译和测试您的代码,但我相信int 21h/06h不会等待按键,它只是返回0表示无键(或扩展键)。如果是这种情况,您的程序将非常非常快地丢弃内存。我认为,如果键盘缓冲区中不存在任何字符,则需要21h/07h等待按键。

您需要使用
INT 21h
函数
01
,该函数从标准输入中读取字符并进行回显。所以不是

mov ah, 06h
mov dl, 0ffh
int 21h
你想要:

mov ah, 01h
int 21h
功能
01h
为“煮熟”控制台输入。它输入字符和回声。它还检查control-C和control-break,如果您按下其中一个键,它将终止您的程序。它也可能解释诸如翻页等扩展字符。我不记得了

功能
07h
是“原始”控制台输入。它不检查control-C或执行任何其他预处理。它提供了输入的确切内容

您的问题是,您应该在用户按Enter键后输出字符串,但我没有看到任何代码输出您存储在
Begging
的字符串


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

对于一个合理提出的问题来说,这个标题似乎很糟糕……:)请提供您试图从中复制此程序的URL或其他资源。我也记不起来了,但是说
dl=0ffh
有特殊行为。并不是说我们应该在2011年调试这种问题,而是这样:)好的,我试着使用07h,这次无限循环没有发生,它甚至显示了我的输入。但是为什么我的程序不打印我输入的字符呢?试着用ah as 06打印字符。我不记得是否需要将stdio输出设置为使用02