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