1:
汇编语言中缓冲区的定义:https://blog.csdn.net/u010470455/article/details/42490989
不能直接定义 DB 20, DUP (?),这样子无法接受输入的字符串
2:
关于输入输出问题,在dos中输出字符串必须以$结尾,不然就会出现问题
如:下面的代码,是做一个输入字符串然后输出该字符串,缓冲区定义为(?),当我输入123时,dos并没有输出123
DATA SEGMENT
STR DB 'Please input a string:$'
DATA1_BUF DB 50H ;键入缓冲区总长
DB ? ;实际键入数
DB 50H DUP(?)
DATA1 DB '$'
DATA_NEXT DB 0AH,0DH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA DX,STR
MOV AH,09H
INT 21H
MOV AH,0AH
LEA DX,DATA1_BUF
INT 21H
LEA DX,DATA_NEXT
MOV AH,09H
INT 21H
LEA DX,DATA1_BUF+2
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
而当我把(?)改成(24H)时,就会正常,真实。这里很玄学,因为假如我没有改这个,而只是单纯在缓冲区结尾加上$,结果也是不正常的。