DOS功能呼叫表 int 21h

2022-12-20 19:12:07 字數 3876 閱讀 4818

ah功能00010203040506070809

程式終止(同int 20h)鍵盤輸入並回顯顯示輸出非同步通迅輸入非同步通迅輸出印表機輸出直接控制台i/o鍵盤輸入(無回顯)鍵盤輸入(無回顯)檢測ctrl-break顯示字串

呼叫引數cs=程式段字首

返回引數

al=輸入字元

al=輸入資料

dl=輸出字元

dl=輸出資料dl=輸出字元dl=ff(輸入)dl=字元(輸出)

al=輸入字元al=輸入字元al=輸入字元

ds:dx=串位址'$'結束字串ds:dx=緩衝區首位址(ds:dx)=緩衝區最大字元數

0a鍵盤輸入到緩衝區0b檢驗鍵盤狀態0c

(ds:dx+1)=實際輸入的字元數al=00有輸入al=ff無輸入

al=輸入功能號(1,6,7,8,a)

0d磁碟復位0e0f1011121314

=01檔案結束,記錄中無資料=02 dta空間不夠=03檔案結束,記錄不完整al=00寫成功=01盤滿

=02 dta空間不夠al=00建立成功=ff無磁碟空間

dl=驅動器號0=a,1=b,...ds:dx=fcb首位址ds:

dx=fcb首位址ds:dx=fcb首位址ds:dx=fcb首位址(檔案中帶有*或?

)ds:dx=fcb首位址ds:dx=fcb首位址

15順序寫

ds:dx=fcb首位址

16建檔案ds:dx=fcb首位址

17檔案改名

ds:dx=fcb首位址(ds:dx+1)=舊檔名(ds:dx+17)=新檔名

al=00成功al=ff未成功al=預設的驅動器號0=a,1=b,2=c,...

19取當前預設磁碟驅動器

1a置dta位址1b

取預設驅動器fat資訊

ds:dx=dta位址

al=每簇的扇區數

ds:bx=fat標識位元組cx=物理扇區大小dx=預設驅動器的簇數同上al=00讀成功=01檔案結束=02緩衝區溢位=03緩衝區不滿al=00寫成功=01盤滿=02緩衝區溢位

al=00成功(檔案長度填入fcb)al=ff未找到

1c取任一驅動器fat資訊21

隨機讀dl=驅動器號ds:dx=fcb首位址

22隨機寫

ds:dx=fcb首位址

2324252627

測定檔案大小設定隨機記錄號設定中斷向量建立程式段字首隨機分塊讀

ds:dx=fcb首位址ds:dx=fcb首位址ds:dx=中斷向量al=中斷型別號dx=新的程式段字首ds:dx=fcb首位址cx=記錄數

al=00讀成功=01檔案結束

=02緩衝區太小,傳輸結束=03緩衝區不滿al=00寫成功=01盤滿=02緩衝區溢位al=00標準檔案=01多義檔案=02非法碟符cx=年

dh:dl=月:日(二進位制)al=00成功=ff無效ch:cl=時:分dh:dl=秒:1/100秒al=00成功=ff無效

28隨機分塊寫

ds:dx=fcb首位址cx=記錄數es:di=fcb首位址ds:si=asciiz串al=控制分析標誌

29分析檔名

2a取日期2b設定日期2c取時間2d設定時間

cx:dh:dl=年:月:日

ch:cl=時:分dh:dl=秒:1/100秒

2e2f303133

置磁碟自動讀寫標誌取磁碟緩衝區的首址取dos版本號結束並駐留ctrl-break檢測

al=00關閉標誌al=01開啟標誌

es:bx=緩衝區首址ah=發行號,al=版本

al=返回碼dx=駐留區大小al=00取狀態=01置狀態(dl)dl=00關閉檢測=01開啟檢測al=中斷型別dl=驅動器號0=預設,1=a,2=b,...

dl=00關閉ctrl-break檢測=01開啟ctrl-break檢測

3536

取中斷向量取空閒磁碟空間

es:bx=中斷向量成功:ax=每簇扇區數bx=有效簇數cx=每扇區位元組數dx=總簇數失敗:ax=ffff

bx=國家碼(國際**字首碼)ax=錯誤碼ax=錯誤碼ax=錯誤碼ax=錯誤碼成功:ax=檔案代號錯誤:ax=錯誤碼成功:ax=檔案代號錯誤:ax=錯誤碼

3839

置/取國家資訊建立子目錄(mkdir)

ds:dx=資訊區首位址ds:dx=asciiz串位址ds:

dx=asciiz串位址ds:dx=asciiz串位址ds:dx=asciiz串位址cx=檔案屬性ds:

dx=asciiz串位址al=0讀=1寫=3讀/寫bx=檔案代號ds:dx=資料緩衝區位址bx=檔案代號cx=讀取的位元組數ds:dx=資料緩衝區位址bx=檔案代號cx=寫入的位元組數

3a刪除子目錄(rmdir)3b改變當前目錄(chdir)3c建立檔案3d

開啟檔案

3e3f

關閉檔案讀檔案或裝置

失敗:ax=錯誤碼讀成功:

ax=實際讀入的位元組數ax=0已到檔案尾讀出錯:ax=錯誤碼寫成功:

ax=實際寫入的位元組數寫出錯:ax=錯誤碼成功:ax=00

出錯:ax=錯誤碼(2,5)成功:dx:ax=新檔案指標位置出錯:ax=錯誤碼

40寫檔案或裝置

4142

刪除檔案移動檔案指標

ds:dx=asciiz串位址bx=檔案代號cx:dx=位移量

移,1:從當前位置相對移動,2:從檔案尾絕對位移)

al=移動方式(0:從檔案頭絕對位

43置/取檔案屬性

ds:dx=asciiz串位址al=0取檔案屬性al=1置檔案屬性cx=檔案屬性bx=檔案代號al=0取狀態=1置狀態dx=2讀資料=3寫資料=6取輸入狀態=7取輸出狀態bx=檔案代號1bx=檔案代號1cx=檔案代號2dl=驅動器號

ds:si=asciiz串位址bx=申請記憶體容量es=記憶體起始段位址es=原記憶體起始位址bx=再申請的容量ds:dx=asciiz串位址es:

bx=引數區首位址al=0裝入執行al=3裝入不執行al=返回碼

dx=裝置資訊

成功:cx=檔案屬性失敗:cx=錯誤碼

44裝置檔案i/o控制

4546474849

複製檔案代號人工複製檔案代號取當前目錄路徑名分配記憶體空間釋放內容空間

成功:ax=檔案代號2失敗:ax=錯誤碼失敗:

ax=錯誤碼(ds:si)=asciiz串失敗:ax=出錯碼成功:

ax=分配記憶體首地失敗:bx=最大可用記憶體失敗:ax=錯誤碼失敗:

bx=最大可用空間ax=錯誤碼失敗:ax=錯誤碼

4a調整已分配的儲存塊4b

裝配/執行程式

4c帶返回碼結束4d取返回**4e4f5456

查詢第乙個匹配檔案查詢下乙個匹配檔案取盤自動讀寫標誌檔案改名

置/取檔案日期和時間

ax=返回**ax=出錯**(02,18)ax=出錯**(18)al=當前標誌值ax=出錯碼(03,05,17)dx:cx=日期和時間失敗:ax=錯誤碼成功:

ax=策略碼失敗:ax=錯誤碼ax=擴充錯誤碼bh=錯誤型別

ds:dx=asciiz串位址cx=屬性

ds:dx=asciiz串位址(檔名中帶有?或*)

ds:dx=asciiz串(舊)es:di=asciiz串(新)bx=檔案代號al=0讀取al=1設定(dx:cx)al=0取碼al=1置碼(bx)

575859

取/置分配策略碼取擴充錯誤碼

5a建立臨時檔案

cx=檔案屬性

ds:dx=asciiz串位址cx=檔案屬性

ds:dx=asciiz串位址al=00封鎖=01開啟bx=檔案代號cx:dx=檔案位移si:di=檔案長度

bl=建議的操作ch=錯誤場所成功:ax=檔案代號失敗:ax=錯誤碼成功:ax=檔案代號失敗:ax=錯誤碼失敗:ax=錯誤碼

5b建立新檔案5c

控制檔案訪問

62取程式段字首

bx=psp位址

DOS功能呼叫大全

一 21h號中斷型別 int 21h 的各功能詳解。00h號功能 程式終止 入口引數 ah 0 功能號 cs已指定 返回值 無。01h號功能 鍵盤輸入並回顯。檢測break ctrl c 入口引數 ah 01h 功能號 返回值 al 輸入的字元。02h號功能 顯示輸出。檢測break ctrl c ...

DOS下對登錄檔的程式設計

有了以上這些知識,結合在 對登錄檔進行程式設計的 捷徑 裡講過的關於匯入或匯出的登錄檔檔案 reg 我們就可以在dos方式下對登錄檔進行程式設計了。我們還是以更改 txt 檔案的預設開啟方式 記事本 為 寫字板 為例。首先在ms dos提示符下匯出 hkey classes root txtfile...

硬碟DOS分割槽表引數的推算方法

湛江陳文慶 1992 10 16 一 硬碟基本引數的確定 我們知道,硬碟的邏輯0扇區存放有硬碟的i o參數列,從i o參數列可以確定有關硬碟的基本引數,其所在相對位置為0bh 1dh,共19個位元組,各位元組的含義如下 0b 0ch 每扇區位元組數。0dh 每簇扇區數。0e 0fh 保留扇區數。10...