我为 8086 微处理器编写了一段代码,用于从键盘获取字符串并显示它,如下所示:
Title Get the string from keyboard and display it
.model small
.stack 100h
.data
str1 db 'Enter String ','$'
str2 db 50 dup('$')
str3 db 0dh, 0ah, '$'
.code
main proc
mov ax,@data
mov ds,ax
mov ah,09h ; for displaying Enter String
lea dx,str1
int 21h
mov ah,0ah ; for taking i/p from keyboard
lea dx,str2
int 21h
mov ah,09h ; for displaying in new line
lea dx,str3
int 21h
mov ah,09h ; for displaying what you have entered
lea dx,str2+2
int 21h
int 21h
mov ah,4ch
int 21h
main endp
end main
我不明白为什么我们必须将字符串的有效地址指定为
str2 + 2
才能打印回输入的字符串?如果仅使用 lea dx, str2
,则不会显示任何字符串。
STR2处的第一个字节应指要读取的最大字节数。第二个字节应包含已存在的字符数。因为您用 50 个“$”字符初始化了 STR2,并且“$”的 ASCII 值为 36,所以您实际上要求 DOS 允许输入已经存在的 36 个字符!
最好写一下:str2 db 50, 0, 50 dup (0)
lea dx, str2 + 2
。那就是字符所在的地址。请注意,第一个字节为 50,输入限制为 49 个字符,因为 DOS 会附加一个终止回车字节(不包括在第二个字节的计数中)。
缓冲输入如何工作以充分了解 DOS 功能 0Ah。