来看看21H中断

来源:百度知道 编辑:UC知道 时间:2024/09/20 14:39:07
assume cs:code
data segment
db 100 dup(?)
data ends
code segment
start:mov ax,data
mov ds,ax
xor dx,dx
mov AH,0AH
int 21H
mov ax,4c00H
int 21H
code ends
end start

mov AH,0AH
int 21H
我调用了中断 ,为什么不能输入字符串呢?

调用这个字符串输入中断之前要对相应的寄存器和内存单元赋值,就像高级语言的函数的实参一样
这个是那个中断的简单的解释:
===========================================================
(8)、功能0AH
功能描述:从标准输入设备上读入一个字节字符串,遇到“回车键”结束输入(输入的字符在标准的输出设备上有回显)。如果该输入操作被重定向,那么,将无法判断文件是否已到文件尾
入口参数:AH=0AH
DS:DX=存放输入字符的起始地址
接受输入字符串缓冲区的定义说明:
1、第一个字节为缓冲区的最大容量,可认为是入口参数;
2、第二个字节为实际输入的字符数(不包括回车键),可看作出口参数;
3、从第三个字节开始存放实际输入的字符串;
4、字符串以回车键结束,回车符是接受的最后一个字符;
5、若输入的字符数超过缓冲区的最大容量,则多出的部分被丢弃,系统并发出响铃,直到输入“回车”键才结束输入。
例如:
BUFF 80, ?, 80 DUP(?) ;最多接受80个字符
出口参数:无
===========================================================
在<IBM-PC 汇编语言程序设计>这本书里有更详细的解释

你的错误关键是没有对字符串缓冲区进行赋值
应该把缓冲区的第一个字节设置成允许输入的最大字符数
把data段改成这样就行了,允许输入100个字符
data segment
db 100,?,100 dup(?)
data ends