DOS API

DOS API最初是86-DOS中的应用程序接口（API），并也被MS-DOS/PC-DOS及其他DOS兼容操作系统使用。大多数对DOS API的调用是使用中断21h（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控制的文件访问。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 - 最广泛的化身
- PC DOS - MS-DOS的IBM OEM版本
- DR-DOS - 数字研究DOS系列，包括DR-DOS、DR-DOS, DR-DOS等。
- PTS-DOS - PhysTechSoft和Paragon DOS克隆，包括S/DOS
- ROM-DOS - Datalight ROM DOS版本
- FreeDOS - 自由、开源的DOS克隆
- ReactOS（IA-32和X86-64版本）
- Windows 95 - 包含MS-DOS 7.0
- Windows 98 - 包含MS-DOS 7.1
- Windows 98 - 包含MS-DOS 7.1
- Windows Me - 包含MS-DOS 8.0
- Windows NT（64位版本外的所有版本）

## 支持MS-DOS API的程序

- Concurrent CP/M-86（仅3.1）的PCMODE – 基于CP/M-86的Digital Research操作系统，使用可选的PC DOS模拟器
- Concurrent DOS – 内置PC DOS模拟器的Digital Research CDOS家族
- DOS Plus – Concurrent PC DOS 4.1–5.0的一个简化的单用户变种
- 多用户DOS – Digital Research/Novell MDOS家族，包含Datapac System Manager、IMS REAL/32等。
- 用于Windows NT的NTVDM.EXE
- 用于Linux的DOSEMU
- DOSBox