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

String 如何将键盘输入加载到8086中的数组中?,string,assembly,io,x86-16,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 我知道该程序接受来自键盘的字符串输入,并将其显示在屏幕上然而,我在这里遗漏了两件事: 我们如何判断用户输入将存储在变量SNAME中?指令LEA是

我正在用汇编语言--
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
我知道该程序接受来自键盘的字符串输入,并将其显示在屏幕上然而,我在这里遗漏了两件事

  • 我们如何判断用户输入将存储在变量
    SNAME
    中?指令
    LEA
    是否让程序知道这一点?我问这个问题是因为在高级语言中,我们可以说
    SNAME=someUserInput-这里我没有看到
    movsmane,someUserInput

  • 为什么我们要在本安装中添加
    2
    LEA DX,SNAME+2

  • 我们如何判断用户输入将存储在变量SNAME中

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

    为什么我们要在这个安装中添加2 LEA DX,SNAME+2


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

    如果查看缓冲输入是如何完成的,您将看到DX包含int 21h/ah=0ah的缓冲区地址。SNAME+2是在打印int 21h/ah=09h_的缓冲区时出现的。输入命令返回的实际字符串前面有两个需要跳过的字节。有关dos输入命令的信息,请参阅:好的,这是直截了当的-现在我明白了,谢谢。