我已经为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
我不明白为什么我们必须给字符串的有效地址为str + 2来打印输入的字符串?如果只是lea dx,则使用str2,不显示任何字符串。
提前致谢。
答案 0 :(得分:0)
STR2的第一个字节应包含要读取的最大字符数。第二个字节应包含已存在的字符数。因为您使用50'$'字符初始化STR2并且'$'的ASCII值为36,所以您有效地要求DOS允许输入已经存在的36个字符!
更好的代码str2 db 50,0,50 dup (0)
在“缓冲STDIN输入”结束时,第二个字节将包含读取的字符数。我希望你现在看到为什么你需要lea dx,str2+2
。这是角色所在的地址
请注意,50输入的第一个字节限制为49个字符,因为DOS附加一个终止'$'字符(不包括在第二个字节中)。