如何在8086中将键盘输入加载到数组中?

时间:2015-10-12 09:29:54

标签: string assembly io x86-16

我正在使用汇编语言 - 8086环境练习输入和输出字符串。我遇到了以下代码:

 org 100h

 .DATA

 SNAME DB 21,0,22 DUP('$')
 .CODE

 MOV AH, 0AH
 LEA DX, SNAME  

 INT 21H
 MOV AH, 9H
 LEA DX, SNAME +2;
 INT 21H
 ret

我知道程序会从键盘接受输入作为字符串并将其显示在屏幕上。 但是,我在这里遗漏了两件事

  1. 我们如何判断用户输入是否在变量SNAME存储?指令LEA是否使程序知道了?我问过这个问题是因为在高级语言中我们可以说SNAME=someUserInput; - 这里我没有看到MOV SMANE,someUserInput;

  2. 为什么我们在此实例2中添加LEA DX,SNAME +2

1 个答案:

答案 0 :(得分:2)

  

我们如何判断用户输入是否存储在变量SNAME中?

因为你的程序使用DOS输入函数0Ah,它需要你设置一个缓冲区来接收输入的字符。偏移0处的字节必须指定从偏移量2开始可用的字节数。指定 21 意味着您将能够输入 20 字符。额外的字节将用回车符(ASCII 13)填充。

  

为什么我们在这个实例LEA DX,SNAME +2中添加2?

DOS输入函数将输入的字符从偏移量2开始存储在您指定的缓冲区中。在偏移1处,您将找到一个包含输入字符数的字节。在这些输入字符后面,DOS添加回车符(ASCII 13)。这意味着以您的方式打印将不可避免地将光标留在行的开头。