【发布时间】:2015-10-12 09:29:53
【问题描述】:
我正在用汇编语言练习字符串的输入和输出 - 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;我们为什么要在这个instaruction
LEA DX,SNAME +2中添加2?
【问题讨论】:
-
如果你看看缓冲输入是如何完成的,你会发现 DX 包含 int 21h / ah = 0ah_ 的缓冲区地址. SNAME+2 是在使用 int 21h / ah = 09h_ 打印缓冲区时。输入命令返回的实际字符串前面有两个需要跳过的字节。有关 dos 输入命令的信息,请参阅:spike.scu.edu.au/~barry/interrupts.html#ah0a