先来看数据段的声明缓冲区的三行代码:
buf db 8
db ?
db 8 dup(?)
再来看代码段执行键盘输入的三行代码:
lea dx,buf
mov ah,10
int 21h
分析:
1.对于缓冲区声明代码中,如果我们把第一行去掉,将标签buf加在第二行或第三行前面会是什么结果呢?答案是,编译能通过,链接也能通过,但是运行时会出现错误提示如下:
造成这个错误的原因是什么呢?废话,当然是我们将第一行去掉造成的!可是,为什么呢?真正的原因是,第一行为我们的缓冲区指定了最大可接收的字符长度。它的作用有两个:1.决定了该缓冲区可接收的最大字符数,且最后一个为回车(本例中最多接收8个);2.决定了我们整个缓冲区实际占用内存大小(Byte),为最大可接收字符长度加上2(本例中为10个Byte,至于为什么后面解释)。
对于第一个作用,反映在本例中就是,我们在终端输入到第7个字符(不含enter键)时就无法再继续输入了,只能按enter键结束输入。
对于第二个作用&