我正在使用汇编语言 - 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;
- 这里我没有看到MOV SMANE,someUserInput;
为什么我们在此实例2
中添加LEA DX,SNAME +2
?
答案 0 :(得分:2)
我们如何判断用户输入是否存储在变量SNAME中?
因为你的程序使用DOS输入函数0Ah,它需要你设置一个缓冲区来接收输入的字符。偏移0处的字节必须指定从偏移量2开始可用的字节数。指定 21 意味着您将能够输入 20 字符。额外的字节将用回车符(ASCII 13)填充。
为什么我们在这个实例LEA DX,SNAME +2中添加2?
DOS输入函数将输入的字符从偏移量2开始存储在您指定的缓冲区中。在偏移1处,您将找到一个包含输入字符数的字节。在这些输入字符后面,DOS添加回车符(ASCII 13)。这意味着以您的方式打印将不可避免地将光标留在行的开头。