用汇编怎样实现从键盘输入一串字符至内存(利用DOS功能调用)?

写了一个小程序,想用键盘输入一串字符至内存NUMBERS:
DAT SEGMENT
NUMBERS DB 100 DUP(0)
DAT ENDS
STA SEGMENT STACK
DW 50 DUP(?)
STA ENDS
COD SEGMENT
ASSUME CS:COD,DS:DAT
START: MOV AX,DAT
MOV DS,AX
MOV AH,0AH
MOV DX,OFFSET NUMBERS ;取得存放数据的内存偏移地址,从键盘中输入
INT 21H
MOV AX,4C00H
INT 21H
COD ENDS
END START
在用DOS调试时,没有错误但无法完成功能,求大牛解释。谢谢啦。

你的缓存区设置有误的,没有设置最大输入的字符数,默认为0,那当然不行。
0AH功能调用的时候要求将DS:DX指向缓冲区的第一个字节,并设置缓冲区的第一个字节以便指出所能容纳的最大字符的最大个数。正确如下~~~
DAT SEGMENT
NUMBERS DB 100 ;能存最大字符数,这里一定要设置
DB ? ;你输入的字符数,由计算机自动填写
DB 100 DUP(?) ;开始存放字符的段
DAT ENDS
STA SEGMENT STACK
DW 50 DUP(?)
STA ENDS
COD SEGMENT
ASSUME CS:COD,DS:DAT
START: MOV AX,DAT
MOV DS,AX
MOV AH,0AH
MOV DX,OFFSET NUMBERS ;取得存放数据的内存偏移地址,从键盘中输入
INT 21H
MOV AX,4C00H
INT 21H
COD ENDS
END START
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-06-05
利用DOS功能调用,用汇编语言编程实现从键盘输入一串字符存至内存,请参考如下程序(输入字符数最多200字符,用回车符表示输入结束):
data segment
str db 200 dup (0)
data ends

code segment
assume cs:code,ds:data
main proc far
start:
mov ax,data
mov ds,ax
lea si,str
inpstr: mov ah,06h;DOS功能调用,读取从键盘输入的字符
int 21h
jnz inpstr;无字符可读
mov [si],a1;保存读取的字符
inc si;增量指针指向下一单元
xor al,0dh;判断是否回车符
jz endinp;是则输入结束
jmp inpstr;不是回车符继续等待输入

endinp: mov ah,4ch;终止当前进程
int 21h
ret
main endp
code ends
end start
相似回答