我有这个汇编代码,它读取一个 120 字节的字符串。如果我尝试通过按一个键直到它停止写入来填充缓冲区,则输入键不起作用。我数了一下字数,发现写了121个字。
这是正常的吗?有没有办法避免它?也许是另一个中断?
代码:
.model small
.stack 100h
.386
.data
MSG DB "Please give me the string (max 120 chars): ", 10, 13, "$"
Sentence1 DB 121,?,121 dup(0)
.code
start:
mov ax, @data
mov ds, ax
mov ah,09h
lea dx,A
int 21h
xor ax,ax
mov dx, offset Sentence1
mov ah, 0Ah
int 21h
xor bx,bx
mov bl, Sentence1[1]
mov Sentence1[bx+2], '$'
mov ah, 4ch
int 21h
end start
一个例子(假设是一个 11 字节的缓冲区,而不是 121 字节,为简洁起见):
Please give me the string (max 10 chars):
AAAAAAAAAAA
\_________/
|
11 As
如果我此时按 Enter 它不起作用,但是如果我删除 A 并按 Enter,则它起作用。
我使用 Tasm 和 Tlink 进行编译。
问候。
[编辑] 一个错字。