ITEEDU

附录A 21H中断功能调用

AH 功能 调用参数 返回参数
00 终止进程 CS=程序段前缀段地址
01 带回显的键盘输入 AL=输入字符
02 显示一个字符 DL=待输出字符的ASCII码
03 异步通讯输入 AL=输入的数据
04 异步通讯输出 DL=待输出的数据
05 打印机输出 DL=待输出的字符
06 直接控制台I/O DL=0FFH:输入
DL=字符的ASCII码:输出
AL=输入的字符
07 无回显的键盘输入 AL=输入的字符
08 无回显的键盘输入(检测Ctrl-C) AL=输入的字符
09 字符串输出 DS:DX=字符串首
0A 键盘输入至缓冲区 DS:DX=缓冲区首
DS:[DX]=缓冲区最大容量
DS:[DX+1]=输入的字符数
DS:DX+2=字符串首
0B 检测键盘状态 AL=00:有输入
AL=FF:无输入
0C 清除缓冲区并请求指定的输入功能 AL=输入功能的功能号
(1、6、7、8、A)
0D 磁盘复位 清除文件缓冲区
0E 指定当前缺省磁盘驱动器 DL=驱动器号0:A;1:B
0F 打开文件 DS:DX=FCB首地址 AL=00:文件打开
AL=0FFH:出错
10 关闭文件 DS:DX=FCB首地址 AL=00:文件关闭
AL=FF:出错
11 查找第一个目录项 DS:DX=FCB首地址 AL=00:找到
AL=FF:出错
12 查找下一个目录项 DS:DX=FCB首地址
(文件名中带*或?)
AL=00:找到
AL=FF:出错
13 删除文件 DS:DX=FCB首地址 AL=00:成功删除
AL=FF:出错
14 顺序读 DS:DX=FCB首地址 AL=00:读成功
AL=01:文件已到末尾
AL=02:DTA溢出
AL=03:读入部分数据
15 顺序写 DS:DX=FCB首地址 AL=00:写成功
AL=01:磁盘满
AL=02:DTA溢出
16 建立文件 DS:DX=FCB首地址 AL=00:文件成功建立
AL=FF:出错
17 文件改名 DS:DX=特殊的FCB首地址 AL=00:改名成功
AL=FF:出错
19 取当前缺省驱动器名 AL=缺省驱动器号
0:A;1:B;...
1A 置DTA地址 DS:DX=DTA首地址
1B 取缺省驱动器的FAT信息 AL=每簇扇区数
DS:BX=FAT标识字节
CX=物理扇区的大小
DX=缺省驱动器的簇数
1C 取任意驱动器的FAT信息 DL=驱动器号 同1BH功能
21 随机读 DS:DX=FCB首地址 AL=00:读成功
AL=01:文件已到末尾
AL=02:DTA溢出
AL=03:读入部分数据
22 随机写 DS:DX=FCB首地址 AL=00:写成功
AL=01:磁盘满
AL=02:DTA溢出
23 测定文件大小 DS:DX=FCB首地址 AL=00:成功,文件长度写入FCB
AL=FF:失败
24 设置随机记录号 DS:DX=FCB首地址
25 设置中断向量 DS:DX=中断向量
AL=中断号
26 建立程序段前缀 DS:DX=新的程序段前缀
27 随机块读 DS:DX=FCB首地址
CX=读入记录数
AL=00:读成功
AL=01:文件已到末尾
AL=02:DTA溢出
AL=03:读入部分数据
28 随机块写 DS:DX=FCB首地址
CX=写出记录数
AL=00:写成功
AL=01:磁盘满
AL=02:DTA溢出
29 分析文件名 ES:DI=FCB首地址
DS:SI=ASCIIZ串
AL=控制分析标志
AL=00:标准文件
AL=01多义文件
AL=FF:非法盘符
2A 取日期 CX=年
DH:DL=月:日(二进制)
2B 设置日期 CX:DH:DL=年:月:日 AL=00:成功
AL=FF:出错
2C 取时间 CH:CL=时:分
DH:DL=秒:1/100秒
2D 设置时间 CH:CL=时:分
DH:DL=秒:1/100秒
AL=00:成功
AL=FF:出错
2E 置磁盘自动读写标志 AL=00:关闭标志
AL=01:打开标志
2F 取磁盘缓冲区首地址 ES:BX=缓冲区首地址
30 取DOS版本号 AH=发行号;AL=版号
31 结束进程并驻留 AL=返回码
DX=驻留区大小(节)
33 Ctrl-Break检测 AL=00:取状态
AL=01:置状态(DL)
DL=00:关闭检测
DL=01:打开检测
DL=00:关闭Ctrl-Break检测
DL=01:打开Ctrl-Break检测
35 取中断向量 AL=中断号 ES:BX=中断向量
36 取空闲磁盘空间 DL=驱动器号
0:缺省;1:A;2:B;...
成功:AX=每簇扇区数
BX=有效簇数
CX=每扇区字节数
DX=总簇数
失败:AX=FFFF
38 置/取国家信息 DS:DX=信息区首地址 BX=国家码;AX=错误码
39 建立子目录 DS:DX=ASCIIZ串首地址 AX=错误码
3A 删除子目录 DS:DX=ASCIIZ串首地址 AX=错误码
3B 改变当前目录 DS:DX=ASCIIZ串首地址 AX=错误码
3C 建立文件 DS:DX=ASCIIZ串首地址
CX=文件属性
成功:AX=文件句柄
失败:AX=错误码
3D 打开文件 DS:DX=ASCIIZ串首地址
AL=0:读
AL=1:写
AL=2:读/写
成功:AX=文件句柄
失败:AX=错误码
3E 关闭文件 BX=文件句柄 失败:AX=错误码
3F 读文件或设备 BX=文件句柄
DS:DX=缓冲区首
CX=读取的字节数
成功:AX=实际读入的字节数
失败:AX=错误码
40 写文件或设备 BX=文件句柄
DS:DX=缓冲区首
CX=写出的字节数
成功:AX=实际写出的字节数
失败:AX=错误码
41 删除文件 DS:DX=ASCIIZ串首地址 成功:AX=00
失败:AX=错误码
42 移动文件指针 BX=文件句柄
CX:DX=位移量
AL=移动方式(0、1、2)
成功:DX:AX=新指针的位置
失败:AX=错误码
43 置/取文件属性 DS:DX=ASCIIZ串首地址
AL=0:取文件属性
AL=1:置文件属性
CX=文件属性
成功:CX=文件属性
失败:AX=错误码
44 设备文件I/O控制 BX=文件句柄
AL=0:取状态 AL=1:置状态
AL=2:读数据 AL=3:写数据
AL=6:取输入状态
AL=7:取输出状态
DX=设备信息
45 复制文件句柄 BX=文件句柄1 成功:AX=文件句柄2
失败:AX=错误码
46 强制复制文件句柄 BX=文件句柄1
CX=文件句柄2
失败:AX=错误码
47 取当前目录路径名 DL=驱动器号
DS:SI=ASCIIZ串首地址
成功:DS:SI=ASCIIZ串
失败:AX=错误码
48 分配内存空间 BX=申请的内存数量(节) 成功:AX=分到的内存首址
失败:BX=最大可用空间
49 释放内存空间 ES=内存起始段地址 失败:AX=错误码
4A 调整已分配的内存块 ES=原内存起始段地址
BX=调整后的尺寸
失败:AX=错误码
BX=最大可用空间
4B 装入/执行进程 DS:DX=ASCIIZ串首地址
ES:BX=参数区首地址
AL=0:装入执行
AL=3:装入不执行
失败:AX=错误码
4C 带返回码结束 AL=返回码
4D 取返回代码 AX=返回代码
4E 查找第一个匹配文件 DS:DX=ASCIIZ串首地址
CX=文件属性
AX=错误代码
4F 查找下一个匹配文件 DS:DX=ASCIIZ串首地址
(文件名中带*或?)
AX=错误代码
54 取盘自动读写标志 AL=当前标志值
56 文件改名 DS:DX=ASCIIZ串(旧)
ES:DI=ASCIIZ串(新)
AX=错误代码
57 置/取文件日期和时间 BX=文件句柄
AL=0:读取
AL=1:设置(DX:CX)
成功:DX:CX=日期和时间
失败:AX=错误码
58 取/置分配策略码 AL=0:取码
AL=1:置码(BX)
成功:AX=策略码
失败:AX=错误码
59 取扩充错误码 AX=扩充错误码
BH=错误类型
BL=建议的操作
CH=错误场所
5A 建立临时文件 DS:DX=ASCIIZ串首地址
CX=文件属性
成功:AX=文件句柄
失败:AX=错误码
5B 建立新文件 DS:DX=ASCIIZ串首地址
CX=文件属性
成功:AX=文件句柄
失败:AX=错误码
5C 控制文件存取 AL=00:封锁 AL=01:开启
BX=文件句柄
CX:DX=文件位移
SI:DI=文件长度
62 取PSP地址 BX=PSP地址