DOS API 最初是86-DOS 中的应用程序接口 (API),并也被MS-DOS /PC-DOS 及其他DOS 兼容操作系统使用。大多数对DOS API的调用是使用中斷 21h(INT 21h)。在调用INT 21h时,在AH 寄存器 中带有子函数号,其他寄存器中带有其他参数,从而调用各个DOS服务。DOS服务包括键盘输入、视频输入、磁盘文件访问、执行程序、内存分配及其他事务。在1980年代后期,围绕DOS保护模式接口 (DPMI)的DOS扩展器 允许程序在16位元或32位元的保护模式下运行,并仍可访问DOS API。
DOS API的历史
在86-DOS和MS-DOS 1.0中的原始DOS API在设计上与CP/M 兼容。文件访问使用文件控制块 (FCB)。在MS-DOS 2.0中的DOS API大大扩展了数个Unix概念,包括使用文件描述符 、分层目录 和设备I/O控制的文件访问。[ 1] DOS 3.1中添加了网络重定向器 的支持。MS-DOS 3.31中,INT 25h/26h函数被增强以支持大于32MB的硬盘。MS-DOS 5添加了使用高端内存块 (UMB)的支持。在MS-DOS 5之后,连续、独立发布的DOS没有改变DOS API。
DOS API与Windows
在Windows 9x ,DOS通常作为引导加载程序加载受保护模式的操作系统和图形外壳。DOS通常从一个DOS虚拟机 (VDM)访问,但也可以不加载Windows而直接启动到真实模式的MS-DOS 7.0。DOS API已增强国际化和长文件名 支持,尽管长文件名支持仅在VDM中可用。随着Windows 95 OSR2,DOS被更新到7.1,添加了FAT32 及对其DOS API的支持。Windows 98 和Windows Me 也实现了MS-DOS 7.1 API,尽管Windows ME本身自称为MS-DOS 8.0。
Windows NT 及基于它的系统(例如Windows XP 和Windows Vista )不是基于MS-DOS,但也可使用一个虛擬機器 ——NTVDM 处理DOS API。NTVDM将DOS程序在虚拟8086模式 (Intel 80386 及更高处理器上可在保護模式 下进行真實模式 的仿真)模式下运行。NTVDM支持DOS 5.0 API。面向Linux 的DOSEMU 使用类似的方法。
DOS使用的中断向量
中断向量
描述
版本
备注
20h
终止程序并检查空白空间
1.0+
在DOS内核中实现
21h
Main DOS API
1.0+
在DOS内核中实现
22h
程序终止地址
1.0+
返回调用程序中的地址
23h
Control-C处理器地址
1.0+
默认处理程序在命令外壳(通常是COMMAND.COM)
24h
严重错误处理器地址
1.0+
默认处理程序在命令外壳(通常是COMMAND.COM)
25h
绝对磁盘读取
1.0+
在DOS内核中实现,在DOS 3.31中增强,最多支持2 GB分区
26h
绝对磁盘写入
1.0+
在DOS内核中实现,在DOS 3.31中增强,最多支持2 GB分区
27h
终止并驻留
1.0+
DOS 1.0中在COMMAND.COM中实现,DOS 2.0+中则在DOS内核
28h
Idle callout
2.0+
等待输入时由DOS内核调用
29h
快速控制台输出
2.0+
由内置的控制台设备驱动程序或替换驱动程序(如ANSI.SYS)实现
2Ah
网络和关键部分
3.0+
由DOS内核调用,与网络软件交互
2Bh
未使用
2Ch
未使用
2Dh
未使用
2Eh
Reload transient
2.0+
在COMMAND.COM中实现
2Fh
Multiplex
3.0+
在DOS内核和各种程序(PRINT、MSCDEX、DOSKEY、APPEND等)中实现,取决于子功能号码
DOS INT 21h服务
AH
描述
版本
00h
程序终止
1.0+
01h
字符输入
1.0+
02h
字符输出
1.0+
03h
辅助输入
1.0+
04h
辅助输出
1.0+
05h
打印机输出
1.0+
06h
直接控制台I/O
1.0+
07h
无回显直接控制台输入
1.0+
08h
无回显控制台输入
1.0+
09h
显示字符串
1.0+
0Ah
缓冲的键盘输入
1.0+
0Bh
获取输入状态
1.0+
0Ch
刷新输入缓冲区和输入
1.0+
0Dh
磁盘重置
1.0+
0Eh
设置默认驱动器
1.0+
0Fh
打开文件
1.0+
10h
关闭文件
1.0+
11h
查找第一个文件
1.0+
12h
查找下一个文件
1.0+
13h
删除文件
1.0+
14h
顺序读
1.0+
15h
顺序写
1.0+
16h
创建或截断文件
1.0+
17h
重命名文件
1.0+
18h
保留
1.0+
19h
获取默认驱动器
1.0+
1Ah
设置磁盘传输地址
1.0+
1Bh
获取默认驱动器的分配信息
1.0+
1Ch
获取指定驱动器的分配信息
1.0+
1Dh
保留
1.0+
1Eh
保留
1.0+
1Fh
获取默认驱动器的磁盘参数块
1.0+
20h
保留
1.0+
21h
随机读取
1.0+
22h
随机写入
1.0+
23h
获取记录中的文件大小
1.0+
24h
设置随机记录号
1.0+
25h
设置中断向量
1.0+
26h
创建PSP
1.0+
27h
随机块读取
1.0+
28h
随机块写入
1.0+
29h
解析文件名
1.0+
2Ah
获取日期
1.0+
2Bh
设置日期
1.0+
2Ch
获取时间
1.0+
2Dh
设置时间
1.0+
2Eh
设置验证标志
1.0+
2Fh
获取磁盘传输地址
2.0+
30h
获取DOS版本
2.0+
31h
终止并驻留
2.0+
32h
获取指定驱动器的磁盘参数块
2.0+
33h
获取或设置Ctrl-Break
2.0+
34h
获取InDOS标志指针
2.0+
35h
获取中断向量
2.0+
36h
获取可用磁盘空间
2.0+
37h
获取或设置开关字符
2.0+
38h
获取或设置国家/地区信息
2.0+
39h
创建子目录
2.0+
3Ah
移除子目录
2.0+
3Bh
更改当前目录
2.0+
3Ch
创建或截断文件
2.0+
3Dh
打开文件
2.0+
3Eh
关闭文件
2.0+
3Fh
读取文件或设备
2.0+
40h
写入文件或设备
2.0+
41h
删除文件
2.0+
42h
移动文件指针
2.0+
43h
获取或设置文件属性
2.0+
44h
设备的I/O控制
2.0+
45h
复制句柄
2.0+
46h
重定向句柄
2.0+
47h
获取当前目录
2.0+
48h
分配内存
2.0+
49h
释放内存
2.0+
4Ah
重新分配内存
2.0+
4Bh
执行程序
2.0+
4Ch
用指定返回代码终止
2.0+
4Dh
获取程序返回代码
2.0+
4Eh
查找第一个文件
2.0+
4Fh
查找下一个文件
2.0+
50h
设置当前PSP
2.0+
51h
获取当前PSP
2.0+
52h
获取DOS内部指针(SYSVARS)
2.0+
53h
创建磁盘参数块
2.0+
54h
获取验证标志
2.0+
55h
创建程序PSP
2.0+
56h
重命名文件
2.0+
57h
获取或设置文件的日期和时间
2.0+
58h
获取或设置分配策略
2.11+
59h
获取扩展错误信息
3.0+
5Ah
创建唯一文件
3.0+
5Bh
创建新文件
3.0+
5Ch
锁定或解锁文件
3.0+
5Dh
文件共享功能
3.0+
5Eh
网络功能
3.0+
5Fh
网络重定向功能
3.0+
60h
限定文件名
3.0+
61h
保留
3.0+
62h
获取当前PSP
3.0+
63h
获取DBCS引导字节表指针
3.0+
64h
设置等待外部事件标志
3.2+
65h
获取扩展的国家信息
3.3+
66h
获取或设置代码页
3.3+
67h
设置句柄数
3.3+
68h
提交文件
3.3+
69h
获取或设置ID
4.0+
6Ah
提交文件
4.0+
6Bh
保留
4.0+
6Ch
扩展的打开/创建文件
4.0+
支持MS-DOS API的操作系统
支持MS-DOS API的程序
参见
参考资料
^ Ray Duncan. Advanced MS-DOS Programming: The Microsoft Guide for Assembly Language and C Programmers. Microsoft Press. 1988. ISBN 0914845772 .
The x86 Interrupt List (页面存档备份 ,存于互联网档案馆 ) (a.k.a. RBIL, Ralf Brown's Interrupt List)
ctyme.com - INT Calls by function (页面存档备份 ,存于互联网档案馆 )
wustl.edu - Description of MS-DOS services
Microsoft MS-DOS Programmer's Reference - The Official Technical Reference to MS-DOS , Microsoft Press, 1993 ISBN 1556155468
The MS-DOS Encyclopedia , Microsoft Press, 1988, ISBN 1556151748
Ray Duncan. Advanced MS-DOS Programming: The Microsoft Guide for Assembly Language and C Programmers. Microsoft Press. 1988. ISBN 0914845772 .
The Programmer's PC Sourcebook by Thom Hogan, Microsoft Press, 1991 ISBN 155615321X
The New Peter Norton Programmer's Guide to the IBM PC & PS/2 by Peter Norton and Richard Wilton, Microsoft Press, 1987 ISBN 1-55615-131-4 .
IBM PC DOS 7 Technical Update
Caldera, Inc. (1997). OpenDOS Developer's Reference Series — OpenDOS Programmer's Guide — System and Programmer's Guide . Printed in the UK, August 1997. Caldera Part No. 200-DOPG-003 ([1] ).