一、21H号中断类型(INT 21H)的各功能详解。
00H号功能——程序终止
入口参数:AH=0
;功能号
CS已指定
返回值:无。
01H号功能——键盘输入并回显。[检测break(Ctrl+C)]
入口参数:AH=01H
;功能号
返回值:AL=输入的字符。
02H号功能——显示输出。[检测break(Ctrl+C)]
入口参数:AH=02H
;功能号
DL=要显示的字符
返回:光标移动。
03H号功能——异步通讯输入。
入口参数:AH=03H
;功能号
返回值:AL=输入的数值
04H号功能——异步通讯输出。
入口参数:AH=04H
;功能号
DL=要输出的数值
返回值:无
05H号功能——打印机输出。[自动检测打印机]
入口参数:AH=05H
;功能号
DL=要输出的数值
返回值:无
06H号功能——直接控制台I/O(输入/输出)。[[不检测break(Ctrl+C)]]
入口参数1:AH=06H
;功能号
DL=要输出的字符(DL<0FFH)
功能1:输出
返回1:光标移动
入口参数2:AH=06H ;功能号
DL=0FFH
功能2:输入
返回2:AL=输入的字符
07H号功能——键盘输入但不回显。
入口参数:AH=07H
;功能号
返回值:AL=输入的字符。
08H号功能——键盘输入但不回显。[检测break(Ctrl+C)]
入口参数:AH=08H
;功能号
返回值:AL=输入的字符。
说明:
如果返回AL=0,则是扩展ASC码,要再次调用才能取得扩展ASC码。例:
mov ah,8
int 21h
cmp al,0
jnz ----- 是ASC码,去处理ASC码。
mov ah,8
int 21h
;这次AL返回扩展ASC码。
09H号功能——显示字符串。
入口参数:AH=09H
;功能号
DS:DX=串地址。串必须以'$'字符结尾。
返回:光标移动。
0AH号功能——键盘输入字串到缓冲区。
入口参数:AH=0AH
;功能号
DS:DX=缓冲区地址。
缓冲区首字节=缓冲区字节数。
返回:缓冲区第二字节单元中的值为实际输入的字符数。
例子:如果要输入的最多字符个数为10,则缓冲区的结构如下:
db
12
;缓冲区长度(调用前设置)
db
?
;实际输入的字符数(由INT 21H功能自动设置)
db 10 dup(?) ;输入的字符保存在这里
0BH号功能——检测键盘状态。
入口参数:AH=0BH
;功能号
返回:AL=0:
表示有输入;
AL=0FFH: 表示没有输入。
0CH号功能——清除键盘输入缓冲区,并请求指定的输入功能。
入口参数:AH=0CH
;功能号
AL=输入功能号(即上述功能号:01H,06H,07H,08H,0AH)
DS:DX=缓冲区地址(如果不请求0AH号功能,则本参数省略)。
缓冲区首字节=缓冲区字节数。
返回:与请求的功能返回相同。
0DH号功能——磁盘复位。
入口参数:AH=0DH
;功能号
返回:清除磁盘缓冲区。
0EH号功能——指定当前缺省的磁盘驱动器。
入口参数:AH=0EH
;功能号
DL=驱动器编号(0=驱动器A;1=驱动器B;......)
返回:AL=驱动器数。
0FH号功能——打开文件。
入口参数:AH=0FH
;功能号
DS:DX=FCB(文件控制块)首址
返回:AL=0:成功;
AL=0FFH:失败。
10H号功能——关闭文件。
入口参数:AH=10H
;功能号
DS:DX=FCB(文件控制块)首址
返回:AL=0:成功;
AL=0FFH:失败。
11H号功能——查找首个目录。
入口参数:AH=11H
;功能号
DS:DX=FCB(文件控制块)首址
返回:AL=0:成功;
AL=0FFH:失败。
12H号功能——查找下一个目录。
入口参数:AH=12H
;功能号
DS:DX=FCB(文件控制块)首址
返回:AL=0:成功;
AL=0FFH:失败。
13H号功能——删除文件。
入口参数:AH=13H
;功能号
DS:DX=FCB(文件控制块)首址
返回:AL=0:成功;
AL=0FFH:失败。
14H号功能——顺序读文件。
入口参数:AH=14H
;功能号
DS:DX=FCB(文件控制块)首址
返回:AL=0:成功;
AL=1:文件结束,无可读数据;
AL=2:DTA(数据传输区)空间不够;
AL=3:文件结束,记录不完整。
15H号功能——顺序写文件。
入口参数:AH=15H
;功能号
DS:DX=FCB(文件控制块)首址
返回:AL=0:成功;
AL=1:磁盘满;
AL=2:DTA(数据传输区)空间不够。
16H号功能——新建文件。
入口参数:AH=16H
;功能号
DS:DX=FCB(文件控制块)首址
返回:AL=0:成功;
AL=0FFH:无磁盘空间。
17H号功能——文件改名。
入口参数:AH=17H
;功能号
DS:DX=FCB(文件控制块)首址
(DS:DX+1)=旧文件名
(DS:DX+17)=新文件名
返回:AL=0:成功;
AL=0FFH:失败。
19H号功能——取当前缺省驱动器名。
入口参数:AH=19H
;功能号
返回:AL=缺省驱动器编号(0=驱动器A;1=驱动器B;......)
1AH号功能——设置DTA(数据传输区)地址。
入口参数:AH=1AH
;功能号
DS:DX=DTA地址
返回:无
1BH号功能——取缺省驱动器FAT信息。
入口参数:AH=1BH
;功能号
返回:AL=每簇的扇区数;
DS:BX=指向FAT标识字节;
CX=物理扇区的大小;
DX=簇数。
1CH号功能——取指定驱动器FAT信息。
入口参数:AH=1BH
;功能号
DL=驱动器编号(0=驱动器A;1=驱动器B;......)
返回:AL=每簇的扇区数;
DS:BX=指向FAT标识字节;
CX=物理扇区的大小;
DX=簇数。
21H号功能——随机读文件。
入口参数:AH=21H
;功能号
DS:DX=FCB(文件控制块)首址
返回:AL=0:成功;
AL=1:文件结束,无可读数据;
AL=2:DTA(数据传输区)空间不够;
AL=3:文件结束,记录不完整。
22H号功能——随机写文件。
入口参数:AH=22H
;功能号
DS:DX=FCB(文件控制块)首址
返回:AL=0:成功;
AL=1:磁盘满;
AL=2:DTA(数据传输区)空间不够。
23H号功能——测定文件大小。
入口参数:AH=23H
;功能号
DS:DX=FCB(文件控制块)首址
返回:AL=0:成功,文件长度填入FCB;
AL=0FFH:失败。
24H号功能——设置随机记录号。
入口参数:AH=24H
;功能号
DS:DX=FCB(文件控制块)首址
返回:
25H号功能——设置中断向量。
入口参数:AH=25H
;功能号
DS:DX=中断向量
AL=中断类型号
返回:无
26H号功能——建立程序段前缀。
入口参数:AH=26H
;功能号
DX=新的程序段前缀
返回:无
27H号功能——随机分块读文件。
入口参数:AH=27H
;功能号
DS:DX=FCB(文件控制块)首址
CX=记录数
返回:AL=0:成功;
AL=1:文件结束,无可读数据;
AL=2:DTA(数据传输区)空间不够;
AL=3:文件结束,记录不完整。
28H号功能——随机分块写文件。
入口参数:AH=28H
;功能号
DS:DX=FCB(文件控制块)首址
CX=记录数
返回:AL=0:成功;
AL=1:文件结束,无可读数据;
AL=2:DTA(数据传输区)空间不够。
29H号功能——分析文件名。
入口参数:AH=29H
;功能号
ES:DI=FCB(文件控制块)首址
DS:SI=ASCIIZ串
AL=控制块分析标志
返回:AL=0:标准文件;
AL=1:多义文件;
AL=0FFH:非法盘符。
2AH号功能——取计算机当前日期。
入口参数:AH=2AH
;功能号
返回:CX=年份;
DH=月份
DL=日期
AL=星期(0—6:分别对应星期日、星期一、......)。
2BH号功能——设置计算机日期。
入口参数:AH=2BH
;功能号
CX=年份;
DH=月份
DL=日期
返回:AL=0:成功;
AL=0FFH:无效。
2CH号功能——取计算机当前时间。
入口参数:AH=2CH
;功能号
返回:CH=时;
CL=分;
DH=秒;
DL=1/100秒。
2DH号功能——设置计算机时间。
入口参数:AH=2DH
;功能号
CH=时;
CL=分;
DH=秒;
DL=1/100秒。
返回:AL=0:成功;
AL=0FFH:无效。
2EH号功能——设置磁盘自动读写标志。
入口参数:AH=2EH
;功能号
AL=0为关闭;AL=1为打开
返回:
2FH号功能——取磁盘缓冲区(DTA)地址。
入口参数:AH=2FH
;功能号
返回:ES:BX=缓冲区地址。
注意:该地址是用1AH号功能设置的。
30H号功能——取DOS版本号。
入口参数:AH=30H
;功能号
返回:AH=发行号;
AL=版号。
31H号功能——程序结束并驻留。
入口参数:AH=31H
;功能号
AL=返回码;
DX=驻留区大小(从PSP开始计算)
返回:AH=发行号;
AL=版号。
33H号功能——Ctrl-Break检测。
入口参数:AH=33H
;功能号
AL=0为取状态值;AL=1为置状态值;
DL=0为关闭检测;DL=1为打开检测。
返回:DL=0:关闭Ctrl-Break检测;
DL=1:打开Ctrl-Break检测。
35H号功能——取中断向量。
入口参数:AH=35H
;功能号
AL=中断类型
DL=0为关闭检测;DL=1为打开检测。
返回:DL=0:关闭Ctrl-Break检测;
DL=1:打开Ctrl-Break检测。
36H号功能——取空闲磁盘空间。
入口参数:AH=36H
;功能号
DL=驱动器号(0=缺省驱动器,1=A,2=B,...)
返回:AX=0FFFFH时为失败,否则为成功。成功时:
AX=每簇扇区数;
BX=有效簇数;
CX=每扇区字节数;
DX=总簇数。
38H号功能——取或置国家信息。
入口参数:AH=38H
;功能号
DS:DX=信息区地址
返回:BX=国家码(国际电话前缀码)
AX=错误码。
39H号功能——建立子目录(MKDIR)。
入口参数:AH=39H
;功能号
DS:DX=ASCIIZ串地址
返回:AX=错误码。
3AH号功能——删除子目录(RMDIR)。
入口参数:AH=3AH
;功能号
DS:DX=ASCIIZ串地址
返回:AX=错误码。
3BH号功能——改变当前目录。
入口参数:AH=3BH
;功能号
DS:DX=ASCIIZ串地址
返回:AX=错误码。
3CH号功能——建立文件。
入口参数:AH=3CH
;功能号
DS:DX=ASCIIZ串地址
CX=文件属性(CX=0为普通文件)
返回:CF=0:成功,AX=文件代号;
CF=1:失败,AX=错误码。
3DH号功能——打开文件。
入口参数:AH=3DH
;功能号
DS:DX=ASCIIZ串地址
AL=0:以只读方式打开
AL=1:以只写方式打开
AL=2:可读/写
返回:CF=0:成功,AX=文件代号;
CF=1:失败,AX=错误码。
3EH号功能——关闭文件。
入口参数:AH=3EH
;功能号
BX=文件代号(3CH、3DH功能返回的文件代号)
返回:CF=0:成功;
CF=1:失败,AX=错误码。
3FH号功能——读文件或设备。
入口参数:AH=3FH
;功能号
DS:DX=数据缓冲区地址
BX=文件代号(3CH、3DH功能返回的文件代号)
CX=要读取的字节数
返回:CF=0:成功,AX=实际读入的字节数;
CF=1:失败,AX=错误码。
40H号功能——写文件或设备。
入口参数:AH=40H
;功能号
DS:DX=数据缓冲区地址
BX=文件代号(3CH、3DH功能返回的文件代号)
CX=要写入的字节数
返回:CF=0:成功,AX=实际写入的字节数;
CF=1:失败,AX=错误码。
41H号功能——删除文件。
入口参数:AH=41H
;功能号
DS:DX=ASCIIZ串地址
返回:CF=0:成功,AX=0;
CF=1:失败,AX=错误码(2、5)。
42H号功能——移动文件指针。
入口参数:AH=42H
;功能号
BX=文件代号(3CH、3DH功能返回的文件代号)
CX=移动字节数的高16位值
DX=移动字节数的低16位值
AL=移动方式:
AL=0:绝对位置(即从文件首开始)
AL=1:相对位置(即从当前文件指针开始)
AL=2:绝对倒移(即从文件尾开始)
注:DXCX移动量为补码形式(即符号数)。
返回:CF=0:成功,DXAX=新的文件指针位置;
CF=1:失败,AX=错误码。
43H号功能——取或置文件属性。
入口参数:AH=43H
;功能号
DS:DX=ASCIIZ串地址
AL=0为取文件属性
AL=1为置文件属性,CX=文件属性。
返回:CF=0:成功,CX=文件属性;
CF=1:失败,AX=错误码。
44H号功能——设备文件I/O控制。
入口参数:AH=44H
;功能号
BX=文件代码;
AL=0为取状态;
AL=1为置状态,DX=状态信息;
AL=2为读数据;
AL=3为写数据;
AL=6为取输入状态;
AL=7为取输出状态。
返回:DX=设备信息。
45H号功能——复制文件。
入口参数:AH=45H
;功能号
BX=文件代号1(3CH、3DH功能返回的文件代号)
返回:CF=0:成功,AX=文件代码2;
CF=1:失败,AX=错误码。
46H号功能——人工复制文件代号。
入口参数:AH=46H
;功能号
BX=文件代号1
CX=文件代号2
返回:CF=1:失败,AX=错误码。
47H号功能——取当前目录路径名。
入口参数:AH=47H
;功能号
DL=驱动器号(0=缺省驱动器,1=A,2=B,...)
DS:SI=接收缓冲区地址
返回:CF=1:失败,AX=错误码。
CF=0:成功,ASCIIZ串存入接收缓冲区。
48H号功能——分配内存空间。
入口参数:AH=48H
;功能号
BX=申请内存容量
返回:CF=0:成功,AX=分配的内存首地址;
CF=1:失败,AX=错误码,BX=最大可用空间。
49H号功能——释放内存空间。
入口参数:AH=49H
;功能号
ES=内存起始段址
返回:CF=1:失败,AX=错误码。
CF=0:成功。
4AH号功能——调整已分配的内存空间。
入口参数:AH=4AH
;功能号
ES=原内存起始段址
BX=再申请的容量
返回:CF=0:成功,AX=分配的内存首地址;
CF=1:失败,AX=错误码,BX=最大可用空间。
4BH号功能——装载/执行程序。
入口参数:AH=4BH
;功能号
DS:DX=程序名ASCIIZ串地址
ES:BX=参数区地址
AL=0:装入并运行
AL=3:装入不运行
返回:CF=0:成功;
CF=1:失败,AX=错误码。
4CH号功能——带返回码结束程序。
入口参数:AH=4CH
;功能号
AL=返回码
4DH号功能——取子进程的返回码。
入口参数:AH=4DH
;功能号
返回:AX=返回码。
4EH号功能——查找第一个匹配文件。
入口参数:AH=4EH
;功能号
DS:DX=文件名ASCIIZ串地址
CX=文件属性(CX=0:普通文件)
返回:CF=1:失败,AX=错误码(2、18)。
4FH号功能——查找下一个匹配文件。
入口参数:AH=4FH
;功能号
DS:DX=文件名ASCIIZ串地址
返回:CF=1:失败,AX=错误码(18)。
54H号功能——取盘的自动读写标志。
入口参数:AH=54H
;功能号
返回:AL=当前标志值。
56H号功能——修改文件名。
入口参数:AH=56H
;功能号
DS:DX=原文件名ASCIIZ串地址
ES:DI=新文件名ASCIIZ串地址
返回:CF=1:失败,AX=错误码(3、5、17)。
注意:如果新文件名已经存在,则不会删除。
57H号功能——置/取文件日期时间。
入口参数:AH=57H
;功能号
BX=文件代号;
AL=0:取;
AL=1:置,DXCX=日期时间值。
返回:CF=1:失败,AX=错误码;
CF=0:成功,DXCX=日期时间值。
58H号功能——置/取分配策略码。
入口参数:AH=58H
;功能号
AL=0:取;
AL=1:置,BX=策略码。
返回:CF=1:失败,AX=错误码;
CF=0:成功,AX=策略码。
59H号功能——取扩充错误码。
入口参数:AH=59H
;功能号
返回:AX=扩充错误码;
BH=错误类型;
BL=建议的操作;
CH=错误场所。
5AH号功能——建立临时文件。
入口参数:AH=5AH
;功能号
DS:DX=文件名ASCIIZ串地址
CX=文件属性(CX=0:普通文件)
返回:CF=1:失败,AX=错误码;
CF=0:成功,AX=文件代号。
5BH号功能——建立新文件。
入口参数:AH=5BH
;功能号
DS:DX=文件名ASCIIZ串地址
CX=文件属性(CX=0:普通文件)
返回:CF=1:失败,AX=错误码;
CF=0:成功,AX=文件代号。
5CH号功能——控制文件存取。
入口参数:AH=5CH
;功能号
BX=文件代号
CXDX=文件位移量
SIDI=文件长度
AL=0:封锁
AL=1:开启
返回:CF=1:失败,AX=错误码;
CF=0:成功。
62H号功能——取程序段前缀地址。
入口参数:AH=62H
;功能号
返回:BX=PSP段址(偏址=0000H)
加载中,请稍候......