DOS API
此條目翻譯自其他語言維基百科,需要相關領域的編者協助校對翻譯。 |
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 - 最廣泛的化身
- PC DOS - MS-DOS的IBM OEM版本
- DR-DOS - 數字研究DOS系列,包括DR-DOS、DR-DOS, DR-DOS等。 Template:Needfix
- 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
參見
編輯參考資料
編輯- ^ 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]).