来看看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
我调用了中断 ,为什么不能输入字符串呢?
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