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

How to load input from keyboard into an array in 8086?

我正在练习汇编语言中字符串的输入和输出 - 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

How do we tell that the user input is to be stored in variable SNAME?

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

填充

Why are we adding 2 in this instaruction LEA DX,SNAME +2?

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