DOS API

DOS API最初是86-DOS中的应用程序接口（API），并也被MS-DOS/PC-DOS及其他DOS兼容操作系统使用。大多数对DOS API的调用是使用中斷21h（ 21h）。在调用INT 21h时，在AH 寄存器中带有子函数号，其他寄存器中带有其他参数，从而调用各个DOS服务。DOS服务包括键盘输入、视频输入、磁盘文件访问、执行程序、内存分配及其他事务。在1980年代后期，围绕（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通常从一个（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，但也可使用一个虛擬機器——处理DOS API。NTVDM将DOS程序在虚拟8086模式（Intel 80386及更高处理器上可在保護模式下进行真實模式的仿真）模式下运行。NTVDM支持DOS 5.0 API。面向Linux的使用类似的方法。

DOS使用的中断向量
中断向量描述版本备注终止程序并检查空白空间1.0+在DOS内核中实现Main DOS API1.0+在DOS内核中实现程序终止地址1.0+返回调用程序中的地址Control-C处理器地址1.0+默认处理程序在命令外壳（通常是COMMAND.COM）严重错误处理器地址1.0+默认处理程序在命令外壳（通常是COMMAND.COM）绝对磁盘读取1.0+在DOS内核中实现，在DOS 3.31中增强，最多支持2 GB分区绝对磁盘写入1.0+在DOS内核中实现，在DOS 3.31中增强，最多支持2 GB分区终止并驻留1.0+DOS 1.0中在COMMAND.COM中实现，DOS 2.0+中则在DOS内核Idle callout2.0+等待输入时由DOS内核调用快速控制台输出2.0+由内置的控制台设备驱动程序或替换驱动程序（如ANSI.SYS）实现网络和关键部分3.0+由DOS内核调用，与网络软件交互未使用未使用未使用Reload transient2.0+在COMMAND.COM中实现Multiplex3.0+在DOS内核和各种程序（PRINT、MSCDEX、DOSKEY、APPEND等）中实现，取决于子功能号码

DOS INT 21h服务
描述版本程序终止1.0+字符输入1.0+字符输出1.0+辅助输入1.0+辅助输出1.0+打印机输出1.0+直接控制台I/O1.0+无回显直接控制台输入1.0+无回显控制台输入1.0+显示字符串1.0+缓冲的键盘输入1.0+获取输入状态1.0+刷新输入缓冲区和输入1.0+磁盘重置1.0+设置默认驱动器1.0+打开文件1.0+关闭文件1.0+查找第一个文件1.0+查找下一个文件1.0+删除文件1.0+顺序读1.0+顺序写1.0+创建或截断文件1.0+重命名文件1.0+保留1.0+获取默认驱动器1.0+设置磁盘传输地址1.0+获取默认驱动器的分配信息1.0+获取指定驱动器的分配信息1.0+保留1.0+保留1.0+获取默认驱动器的磁盘参数块1.0+保留1.0+随机读取1.0+随机写入1.0+获取记录中的文件大小1.0+设置随机记录号1.0+设置中断向量1.0+创建PSP1.0+随机块读取1.0+随机块写入1.0+解析文件名1.0+获取日期1.0+设置日期1.0+获取时间1.0+设置时间1.0+设置验证标志1.0+获取磁盘传输地址2.0+获取DOS版本2.0+终止并驻留2.0+获取指定驱动器的磁盘参数块2.0+获取或设置Ctrl-Break2.0+获取InDOS标志指针2.0+获取中断向量2.0+获取可用磁盘空间2.0+获取或设置开关字符2.0+获取或设置国家/地区信息2.0+创建子目录2.0+移除子目录2.0+更改当前目录2.0+创建或截断文件2.0+打开文件2.0+关闭文件2.0+读取文件或设备2.0+写入文件或设备2.0+删除文件2.0+移动文件指针2.0+获取或设置文件属性2.0+设备的I/O控制2.0+复制句柄2.0+重定向句柄2.0+获取当前目录2.0+分配内存2.0+释放内存2.0+重新分配内存2.0+执行程序2.0+用指定返回代码终止2.0+获取程序返回代码2.0+查找第一个文件2.0+查找下一个文件2.0+设置当前PSP2.0+获取当前PSP2.0+获取DOS内部指针（SYSVARS）2.0+创建磁盘参数块2.0+获取验证标志2.0+创建程序PSP2.0+重命名文件2.0+获取或设置文件的日期和时间2.0+获取或设置分配策略2.11+获取扩展错误信息3.0+创建唯一文件3.0+创建新文件3.0+锁定或解锁文件3.0+文件共享功能3.0+网络功能3.0+网络重定向功能3.0+限定文件名3.0+保留3.0+获取当前PSP3.0+获取DBCS引导字节表指针3.0+设置等待外部事件标志3.2+获取扩展的国家信息3.3+获取或设置代码页3.3+设置句柄数3.3+提交文件3.3+获取或设置ID4.0+提交文件4.0+保留4.0+扩展的打开/创建文件4.0+

支持MS-DOS API的操作系统
 MS-DOS - 最广泛的化身
 PC DOS - MS-DOS的IBM OEM版本
 DR-DOS - 数字研究DOS系列，包括DR-DOS、DR-DOS, DR-DOS等。 
  - PhysTechSoft和Paragon 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的程序
 （仅3.1）的 – 基于CP/M-86的Digital Research操作系统，使用可选的PC DOS模拟器
  – 内置PC DOS模拟器的Digital Research CDOS家族
  – Concurrent PC DOS 4.1–5.0的一个简化的单用户变种
  – Digital Research/Novell MDOS家族，包含、等。
 用于Windows NT的
 用于Linux的
 DOSBox

参见
 BIOS中斷呼叫



 DOS MZ可执行文件
 COMMAND.COM

参考资料

 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

 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 ().

Category:DOS技术
Category:操作系统API
Category:X86架構
Category:中断