0

我目前正在编写一个程序,它输入一个字符串,将其存储在内存中,然后输出回屏幕。但我无法解决这个任务。

我的源代码:

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

4

2 回答 2

0

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

于 2011-10-22T19:38:48.627 回答
0

您想使用INT 21Hfunction 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

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

于 2011-10-22T20:53:32.490 回答