bios中断调用

发表于:2007-07-04来源:作者:点击数: 标签:
转载子水木社区 ;┌─────────────────────────────────┐ ;│BIOS呼叫INT10H,AH=00H│ ;│設定螢幕影相模式│ ;│?(AL)=模式碼(正常為03h)│ ;│模式碼:解析度顏色數目頁數位址│ ;│文00H:40*2516色8頁B8000H~B87CFH│ ;
转载子"水木社区"

;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 10H,AH=00H │
;│設定螢幕影相模式 │
;│? (AL) <= 模式碼 (正常為 03h) │
;│模式碼: 解析度 顏色數目 頁數 位址 │
;│ 文 00H: 40*25 16 色 8 頁 B8000H~B87CFH │
;│ 字 01H: 80*25 16 色 8 頁 B8000H~B87CFH │
;│ 模 02H: 80*25 16 色 8 頁 B8000H~B8F9FH │
;│ 式 03H: 80*25 16 色 8 頁 B8000H~B8F9FH │
;│ 07H: 80*25 2 色 8 頁 B8000H~B8F9FH │
;│ 解析度 顏色數目 頁數 位址 │
;│ 繪 04H: 320*200 4 色 1 頁 B8000H~BBF3FH │
;│ 圖 05H: 320*200 4 色 1 頁 B8000H~BBF3FH │
;│ 模 06H: 640*200 2 色 1 頁 B8000H~BBF3FH │
;│ 式 0DH: 320*200 16 色 8 頁 A0000H~A1F3FH │
;│ 0EH: 640*200 16 色 4 頁 A0000H~A3E7FH │
;│ 0FH: 640*350 2 色 2 頁 A0000H~A6D5FH │
;│ 10H: 640*350 16 色 2 頁 A0000H~A6D5FH │
;│ 11H: 640*480 2 色 1 頁 A0000H~A95FFH │
;│ 12H: 640*480 16 色 1 頁 A0000H~A95FFH │
;│ 13H: 320*200 256 色 1 頁 A0000H~AF9FFH │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 10H,AH=01H │
;│設定游標形狀 ┌──┐ │
;│? (CH) <= 游標的啟始線 (0~15) │ │<---- 啟始線 │
;│? (CL) <= 游標的終止線 (0~15) │ │ │
;│註:正常: CH=0DH,CL=0EH │ │<---- 終止線 │
;│ 消失: CH=0FFH,CL=0FFH └──┘ │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 10H,AH=02H │
;│設定游標位置 │
;│? (DH) <= 游標的 列 數 (0~24) │
;│? (DL) <= 游標的 行 數 (0~79) │
;│? (BH) <= 頁碼 │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 10H,AH=03H │
;│取得游標位置 │
;│? (BH) <= 頁碼 ┌──┐ │
;│游標的 列 數 => (DH) │ │<---- 啟始線 │
;│游標的 行 數 => (DL) │ │ │
;│游標的啟始線 => (CH) │ │<---- 終止線 │
;│游標的終止線 => (CL) └──┘ │
;│註:正常: CH=0DH,CL=0EH │
;│ 消失: CH=0FFH,CL=0FFH │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 10H,AH=05H │
;│畫面頁區的號擇 │
;│? (AL) <= 頁碼 │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│INT 10h,AH=06H │
;│把指定的視窗範圍上捲 │
;│? (AL) <= 捲動的列數,若為 0 則清除螢幕 │
;│? (BH) <= 捲動後空出位置放入的屬性 │
;│? (CH) <= 捲動範圍的左上座標 列 │
;│? (CL) <= 捲動範圍的左上座標 行 │
;│? (DH) <= 捲動範圍的右下座標 列 │
;│? (DL) <= 捲動範圍的右下座標 行 │
;│ ┌─┬─┬─┬─┬─┬─┬─┬─┐ │
;│顏色屬性: bh =│b7│b6│b5│b4│b3│b2│b1│b0│ │
;│ └─┴─┴─┴─┴─┴─┴─┴─┘ │
;│bit0~2 :字體顏色 (0:黑,1:藍,2:綠,3:青,4:紅,5:紫,6:綜,7:白) │
;│bit3 :字體亮度 (0:字體正常,1:字體高亮度) │
;│bit4~6 :背景顏色 (0:黑,1:藍,2:綠,3:青,4:紅,5:紫,6:綜,7:白) │
;│bit7 :字體閃爍 (0:不閃爍,1:字體閃爍) │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│INT 10h,AH=07H │
;│把指定的視窗範圍下捲 │
;│? (AL) <= 捲動的列數,若為 0 則清除螢幕 │
;│? (BH) <= 捲動後空出位置放入的屬性 │
;│? (CH) <= 捲動範圍的左上座標 列 │
;│? (CL) <= 捲動範圍的左上座標 行 │
;│? (DH) <= 捲動範圍的右下座標 列 │
;│? (DL) <= 捲動範圍的右下座標 行 │
;│ ┌─┬─┬─┬─┬─┬─┬─┬─┐ │
;│顏色屬性: bh =│b7│b6│b5│b4│b3│b2│b1│b0│ │
;│ └─┴─┴─┴─┴─┴─┴─┴─┘ │
;│bit0~2 :字體顏色 (0:黑,1:藍,2:綠,3:青,4:紅,5:紫,6:綜,7:白) │
;│bit3 :字體亮度 (0:字體正常,1:字體高亮度) │
;│bit4~6 :背景顏色 (0:黑,1:藍,2:綠,3:青,4:紅,5:紫,6:綜,7:白) │
;│bit7 :字體閃爍 (0:不閃爍,1:字體閃爍) │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 10H,AH=08H │
;│讀取游標所在位置的字元及屬性 │
;│? (BH) <= 頁碼 │
;│字元 ascii => (AL) │
;│字元的屬性 => (AH) │
;│ ┌─┬─┬─┬─┬─┬─┬─┬─┐ │
;│顏色屬性: ah =│b7│b6│b5│b4│b3│b2│b1│b0│ │
;│ └─┴─┴─┴─┴─┴─┴─┴─┘ │
;│bit0~2 :字體顏色 (0:黑,1:藍,2:綠,3:青,4:紅,5:紫,6:綜,7:白) │
;│bit3 :字體亮度 (0:字體正常,1:字體高亮度) │
;│bit4~6 :背景顏色 (0:黑,1:藍,2:綠,3:青,4:紅,5:紫,6:綜,7:白) │
;│bit7 :字體閃爍 (0:不閃爍,1:字體閃爍) │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 10H,AH=09H │
;│寫入字元及屬性在游標所在位置,游標不動 (繪圖模式亦能使用) │
;│? (AL) <= 欲寫入的字元 ascii │
;│? (BL) <= 欲寫入之字元的屬性 │
;│? (CX word) <= 欲顯示的次數 │
;│? (BH) <= 頁碼 │
;│ ┌─┬─┬─┬─┬─┬─┬─┬─┐ │
;│顏色屬性: bl =│b7│b6│b5│b4│b3│b2│b1│b0│ │
;│ └─┴─┴─┴─┴─┴─┴─┴─┘ │
;│bit0~2 :字體顏色 (0:黑,1:藍,2:綠,3:青,4:紅,5:紫,6:綜,7:白) │
;│bit3 :字體亮度 (0:字體正常,1:字體高亮度) │
;│bit4~6 :背景顏色 (0:黑,1:藍,2:綠,3:青,4:紅,5:紫,6:綜,7:白) │
;│bit7 :字體閃爍 (0:不閃爍,1:字體閃爍) │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 10H,AH=0AH │
;│寫入字元在游標所在位置,游標不動,屬性不變 (繪圖模式亦能使用) │
;│? (AL) <= 欲寫入的字元 ascii │
;│? (CX word) <= 欲顯示的次數 │
;│? (BH) <= 頁碼 │
;│? (BL) <= 前景顏色 (繪圖模式時) │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 10H,AH=0BH │
;│設定文字模式(0~3)的邊框顏色 或 繪圖模式(4、5)的背景顏色 │
;│? (BL) <= 顏色屬性 │
;│ (1)文字模式(0~3):邊框顏色,只用到 低4bit,共16色 │
;│ (2)繪圖模式(4、5、6):背景顏色,只用到 低4bit,共16色 │
;│ bit0~2 :顏色 (0:黑,1:藍,2:綠,3:青,4:紅,5:紫,6:綜,7:白)│
;│ bit3 :為亮度 (1:高亮度,0:正常) │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 10H,AH=0BH │
;│設定繪圖模式(4、5)的調色盤 │
;│? (BL) <= 調色盤 (以 0 bit 決定) │
;│bit0 = 0 (黑、綠、紅、黃) │
;│ = 1 (黑、青、紫、白) │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 10H,AH=0CH │
;│在繪圖模式下畫一點 │
;│? (AL) <= 像點的顏色值 │
;│? (CX word) <= 座標 X 軸 │
;│? (DX word) <= 座標 Y 軸 │
;│? (BH) <= 頁碼 │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 10H,AH=0DH │
;│在繪圖模式下讀點像值 │
;│? (CX word) <= 座標 X 軸 │
;│? (DX word) <= 座標 Y 軸 │
;│像點的顏色值 => (AL) │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 10H,AH=0EH │
;│在文字模式 或 繪圖模式下顯示一字元,游標則右移一格 │
;│? (AL) <= 字元 ascii │
;│? (BH) <= 頁碼 │
;│? (BL) <= 前景顏色碼 (繪圖模式時) │
;│註:所謂 TTY 就是類似打字機輸出方式,每顯示一字元,游標則右移一格,│
;│ 當移到最後一行時,游標則至跳下一列的最左邊開始,當移到最後一列 │
;│ 時,螢幕則上捲一列 │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 10H,AH=0FH │
;│取得螢幕影相模式 │
;│每行字數 => (AH) │
;│模式號碼 => (AL) │
;│使用頁碼 => (BH) │
;│模式碼: 解析度 顏色數目 頁數 位址 │
;│ 文 00H: 40*25 16 色 8 頁 B8000H~B87CFH │
;│ 字 01H: 80*25 16 色 8 頁 B8000H~B87CFH │
;│ 模 02H: 80*25 16 色 8 頁 B8000H~B8F9FH │
;│ 式 03H: 80*25 16 色 8 頁 B8000H~B8F9FH │
;│ 07H: 80*25 2 色 8 頁 B8000H~B8F9FH │
;│ 解析度 顏色數目 頁數 位址 │
;│ 繪 04H: 320*200 4 色 1 頁 B8000H~BBF3FH │
;│ 圖 05H: 320*200 4 色 1 頁 B8000H~BBF3FH │
;│ 模 06H: 640*200 2 色 1 頁 B8000H~BBF3FH │
;│ 式 0DH: 320*200 16 色 8 頁 A0000H~A1F3FH │
;│ 0EH: 640*200 16 色 4 頁 A0000H~A3E7FH │
;│ 0FH: 640*350 2 色 2 頁 A0000H~A6D5FH │
;│ 10H: 640*350 16 色 2 頁 A0000H~A6D5FH │
;│ 11H: 640*480 2 色 1 頁 A0000H~A95FFH │
;│ 12H: 640*480 16 色 1 頁 A0000H~A95FFH │
;│ 13H: 320*200 256 色 1 頁 A0000H~AF9FFH │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 10H,AX=1130H │
;│讀取 VGA BIOS 中有關字形的資訊 │
;│? (BH) <= 所要取的位址模式 │
;│取出的位址 => (ES:BP) │
;│目前字形的高度 => (CX) │
;│目前字形下螢幕列數-1 => (DL) │
;│位址模式:00H:中斷 1FH 的位址 │
;│ 01H:中斷 43H 的位址 │
;│ 02H:8*14 字形表的位址 │
;│ 03H:8*8 字形表的位址 │
;│ 04H:8*8 ascii 值大於 127 的字形表位址 │
;│ 05H:9*14 字形表的位址 │
;│ 06H:8*16 字形表的位址 │
;│ 07H:9*16 字形表的位址 │
;│註:中斷向量 1fh 的值亦是指向 ascii 值大於 127 的字形表位址 │
;│ 中斷向量 43h 的值則是指向目前螢幕模式所使用的字形表位址 │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 10H,AH=13H │
;│顯示一列字串 │
;│? (AL) <= 寫入模式 │
;│? (BL) <= 字元之屬性 │
;│? (CX word) <= 字串的長度 │
;│? (DH) <= 游標的座標 列 數 │
;│? (DL) <= 游標的座標 行 數 │
;│? (ES:BP) <= 存字串內容的記憶體變數 │
;│? (BH) <= 頁碼 │
;│寫入 AL=00H:字串的屬性由 BL 決定,所以 CX 所指的長度以 byte 為單位│
;│模式 AL=01H:同 AL=00H,但游標會移到字串尾端,未顯示字元的位置 │
;│ AL=02H:字串屬性由每字元的後面一個byte指定,故 CX 單位為 word │
;│ AL=03H:同 AL=02H,但游標會移到字串尾端,未顯示字元的位置 │
;│ ┌─┬─┬─┬─┬─┬─┬─┬─┐ │
;│顏色屬性: bl =│b7│b6│b5│b4│b3│b2│b1│b0│ │
;│ └─┴─┴─┴─┴─┴─┴─┴─┘ │
;│bit0~2 :字體顏色 (0:黑,1:藍,2:綠,3:青,4:紅,5:紫,6:綜,7:白) │
;│bit3 :字體亮度 (0:字體正常,1:字體高亮度) │
;│bit4~6 :背景顏色 (0:黑,1:藍,2:綠,3:青,4:紅,5:紫,6:綜,7:白) │
;│bit7 :字體閃爍 (0:不閃爍,1:字體閃爍) │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 10H,AH=80H │
;│倚天中文的控制 │
;│? (AL) <= 控制碼,限輸入數值,如下 │
;│控 51H:釋放中文 30H:內碼輸入法 74H:透通模式切換 │
;│制 71H:釋放中文 31H:倉頡輸入法 4CH:條列模式(L) │
;│碼 41H:切換為英文模式 32H:簡易輸入法 6CH:條列模式切換 │
;│ 61H:中英文模式切換 33H:注音輸入法 48H:顯示內碼(H) │
;│ 6EH:切換為中文模式 34H:三角輸入法 68H:顯示內碼切換 │
;│ 43H:切換為中文輸入 35H:簡捷輸入法 47H:圖形捲動(G) │
;│ 63H:中英文輸入切換 37H:行列輸入法 67H:圖形捲動切換 │
;│ 46H:全形輸入 39H:電信輸入法 4DH:隱藏狀態列 │
;│ 66H:全形、半形切換 54H:透通模式(T) 6DH:狀態列切換 │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 10H,AH=91H │
;│檢查是否有載入倚天中文 │
;│載入狀態 => (AH != 91H 表有載入,AH = 91H 表未載入) │
;│目前模式 => (DH),(bit7=0 表中文模式,bit7=1 表英文模式) │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 13H,AH=00H │
;│重設磁碟機,準備下一次I/O │
;│? (DL) <= 磁碟機代號 (A:00H,B:01H,C:80H,D:81H) │
;│成功 => (C=0),(失敗 C=1,示誤碼如下) │
;│ AH=00H:成功 AH=80H:floppy disk drive 未備妥 │
;│ AH=05H:硬碟重置錯誤 AH=AAH:hard disk drive 未備妥 │
;│ AH=20H:磁碟控制器失誤 AH=BBH:所指定的磁碟機找不到 │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 13H,AH=01H │
;│讀取磁碟機狀態 │
;│? (DL) <= 磁碟機代號 (A:00H,B:01H,C:80H,D:81H) │
;│成功 => (C=0),(失敗 C=1,示誤碼如下) │
;│ AH=00H:成功 AH=0AH:硬碟的磁區損壞 │
;│ AH=01H:不合法的磁碟機命令 AH=0BH:硬碟的磁軌損壞 │
;│ AH=02H:磁區損壞或位址欄有誤 AH=0CH:存取不存在的磁軌 │
;│ AH=03H:防寫貼紙未撕 AH=10H:CRC/ECC錯誤 │
;│ AH=04H:找不到指定的磁區 AH=11H:資料讀取錯誤,使用ECC校正│
;│ AH=05H:硬碟重置錯誤 AH=20H:磁碟控制器失誤 │
;│ AH=06H:不是原來的磁片 AH=40H:尋找磁軌錯誤 │
;│ AH=07H:硬碟參數錯誤 AH=80H:floppy disk drive 未備妥 │
;│ AH=08HMA 忙碌中 AH=AAH:hard disk drive 未備妥 │
;│ AH=09HMA搬動記憶區越過64K AH=BBH:所指定的磁碟機找不到 │
;│註:CRC為循環重複檢查檢,用來偵測磁碟上資料是否有誤 │
;│ ECC為錯誤校正碼,是用來偵測並校正磁碟上的資料是否有誤,ECC具有 │
;│ 自動校正錯誤功能,而且只有硬碟才有ECC │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 13H,AH=02H │
;│讀取磁區資料 │
;│? (DL) <= 磁碟機代號 (A:00H,B:01H,C:80H,D:81H) │
;│? (AL) <= 欲讀取的磁區數 │
;│? (CH) <= 磁軌號碼,從 0 開始,高 2 bit 可存於 cl 的 b6、b7 │
;│? (CL) <= 起始磁區編號,從 1 開始 │
;│? (DH) <= 磁頭號碼,從 0 開始 │
;│? (ES:BX) <= 欲儲存資料的緩衝區記憶體變數 │
;│成功 => (C=0),(AL=真正讀到的磁區數) │
;│ AH=00H:成功 AH=0AH:硬碟的磁區損壞 │
;│ AH=01H:不合法的磁碟機命令 AH=0BH:硬碟的磁軌損壞 │
;│ AH=02H:磁區損壞或位址欄有誤 AH=0CH:存取不存在的磁軌 │
;│ AH=03H:防寫貼紙未撕 AH=10H:CRC/ECC錯誤 │
;│ AH=04H:找不到指定的磁區 AH=11H:資料讀取錯誤,使用ECC校正│
;│ AH=05H:硬碟重置錯誤 AH=20H:磁碟控制器失誤 │
;│ AH=06H:不是原來的磁片 AH=40H:尋找磁軌錯誤 │
;│ AH=07H:硬碟參數錯誤 AH=80H:floppy disk drive 未備妥 │
;│ AH=08H  忙碌中 AH=AAH:hard disk drive 未備妥 │
;│ AH=09H  搬動記憶區越過64K AH=BBH:所指定的磁碟機找不到 │
;│註:CRC為循環重複檢查檢,用來偵測磁碟上資料是否有誤 │
;│ ECC為錯誤校正碼,是用來偵測並校正磁碟上的資料是否有誤,ECC具有 │
;│ 自動校正錯誤功能,而且只有硬碟才有ECC │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 13H,AH=03H │
;│寫資料到磁區內 │
;│? (DL) <= 磁碟機代號 (A:00H,B:01H,C:80H,D:81H) │
;│? (AL) <= 欲寫入的磁區數 │
;│? (CH) <= 磁軌號碼,從 0 開始,高 2 bit 可存於 cl 的 b6、b7 │
;│? (CL) <= 起始磁區編號,從 1 開始 │
;│? (DH) <= 磁頭號碼,從 0 開始 │
;│? (ES:BX) <= 已儲存資料的緩衝區記憶體變數 │
;│成功 => (C=0),(AL=真正寫入的磁區數) │
;│ AH=00H:成功 AH=0AH:硬碟的磁區損壞 │
;│ AH=01H:不合法的磁碟機命令 AH=0BH:硬碟的磁軌損壞 │
;│ AH=02H:磁區損壞或位址欄有誤 AH=0CH:存取不存在的磁軌 │
;│ AH=03H:防寫貼紙未撕 AH=10H:CRC/ECC錯誤 │
;│ AH=04H:找不到指定的磁區 AH=11H:資料讀取錯誤,使用ECC校正│
;│ AH=05H:硬碟重置錯誤 AH=20H:磁碟控制器失誤 │
;│ AH=06H:不是原來的磁片 AH=40H:尋找磁軌錯誤 │
;│ AH=07H:硬碟參數錯誤 AH=80H:floppy disk drive 未備妥 │
;│ AH=08H 忙碌中 AH=AAH:hard disk drive 未備妥 │
;│ AH=09H 搬動記憶區越過64K AH=BBH:所指定的磁碟機找不到 │
;│註:CRC為循環重複檢查檢,用來偵測磁碟上資料是否有誤 │
;│ ECC為錯誤校正碼,是用來偵測並校正磁碟上的資料是否有誤,ECC具有 │
;│ 自動校正錯誤功能,而且只有硬碟才有ECC │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 13H,AH=04H │
;│檢查磁區結構是否完好 │
;│? (DL) <= 磁碟機代號 (A:00H,B:01H,C:80H,D:81H) │
;│? (AL) <= 欲檢查的磁區數 │
;│? (CH) <= 磁軌號碼,從 0 開始,高 2 bit 可存於 cl 的 b6、b7 │
;│? (CL) <= 起始磁區編號,從 1 開始 │
;│? (DH) <= 磁頭號碼,從 0 開始 │
;│成功 => (C=0),(失敗 C=1,示誤碼如下) │
;│ AH=00H:成功 AH=0AH:硬碟的磁區損壞 │
;│ AH=01H:不合法的磁碟機命令 AH=0BH:硬碟的磁軌損壞 │
;│ AH=02H:磁區損壞或位址欄有誤 AH=0CH:存取不存在的磁軌 │
;│ AH=03H:防寫貼紙未撕 AH=10H:CRC/ECC錯誤 │
;│ AH=04H:找不到指定的磁區 AH=11H:資料讀取錯誤,使用ECC校正│
;│ AH=05H:硬碟重置錯誤 AH=20H:磁碟控制器失誤 │
;│ AH=06H:不是原來的磁片 AH=40H:尋找磁軌錯誤 │
;│ AH=07H:硬碟參數錯誤 AH=80H:floppy disk drive 未備妥 │
;│ AH=08HMA 忙碌中 AH=AAH:hard disk drive 未備妥 │
;│ AH=09HMA搬動記憶區越過64K AH=BBH:所指定的磁碟機找不到 │
;│註:CRC為循環重複檢查檢,用來偵測磁碟上資料是否有誤 │
;│ ECC為錯誤校正碼,是用來偵測並校正磁碟上的資料是否有誤,ECC具有 │
;│ 自動校正錯誤功能,而且只有硬碟才有ECC │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 13H,AH=05H │
;│將指定的磁區格式化,以軌為單位 │
;│? (DL) <= 磁碟機代號 (A:00H,B:01H,C:80H,D:81H) │
;│? (CH) <= 磁軌號碼,從 0 開始,高 2 bit 可存於 cl 的 b6、b7 │
;│? (DH) <= 磁頭號碼,從 0 開始 │
;│? (ES:BX) <= 指向磁區參數表的記憶體變數,共四 byte,即 CHRN │
;│磁區參數表:C:磁柱編號(cylinder) R:磁區編號(Record) │
;│ H:磁頭編號(head) N:每磁區的byte數(0:128,1:256 │
;│ 2:512,3:1024) │
;│成功 => (C=0),(失敗 C=1,示誤碼如下) │
;│ AH=00H:成功 AH=0AH:硬碟的磁區損壞 │
;│ AH=01H:不合法的磁碟機命令 AH=0BH:硬碟的磁軌損壞 │
;│ AH=02H:磁區損壞或位址欄有誤 AH=0CH:存取不存在的磁軌 │
;│ AH=03H:防寫貼紙未撕 AH=10H:CRC/ECC錯誤 │
;│ AH=04H:找不到指定的磁區 AH=11H:資料讀取錯誤,使用ECC校正│
;│ AH=05H:硬碟重置錯誤 AH=20H:磁碟控制器失誤 │
;│ AH=06H:不是原來的磁片 AH=40H:尋找磁軌錯誤 │
;│ AH=07H:硬碟參數錯誤 AH=80H:floppy disk drive 未備妥 │
;│ AH=08HMA 忙碌中 AH=AAH:hard disk drive 未備妥 │
;│ AH=09HMA搬動記憶區越過64K AH=BBH:所指定的磁碟機找不到 │
;│註:CRC為循環重複檢查檢,用來偵測磁碟上資料是否有誤 │
;│ ECC為錯誤校正碼,是用來偵測並校正磁碟上的資料是否有誤,ECC具有 │
;│ 自動校正錯誤功能,而且只有硬碟才有ECC │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 13H,AH=06H │
;│將指定的磁軌格式化,並設定損壞磁碟 │
;│? (DL) <= 磁碟機代號 (A:00H,B:01H,C:80H,D:81H) │
;│? (CH) <= 磁軌號碼,從 0 開始,高 2 bit 可存於 cl 的 b6、b7 │
;│? (CL) <= 起始磁區編號,從 1 開始 │
;│? (DH) <= 磁頭號碼,從 0 開始 │
;│成功 => (C=0),(失敗 C=1,示誤碼如下) │
;│ AH=00H:成功 AH=0AH:硬碟的磁區損壞 │
;│ AH=01H:不合法的磁碟機命令 AH=0BH:硬碟的磁軌損壞 │
;│ AH=02H:磁區損壞或位址欄有誤 AH=0CH:存取不存在的磁軌 │
;│ AH=03H:防寫貼紙未撕 AH=10H:CRC/ECC錯誤 │
;│ AH=04H:找不到指定的磁區 AH=11H:資料讀取錯誤,使用ECC校正│
;│ AH=05H:硬碟重置錯誤 AH=20H:磁碟控制器失誤 │
;│ AH=06H:不是原來的磁片 AH=40H:尋找磁軌錯誤 │
;│ AH=07H:硬碟參數錯誤 AH=80H:floppy disk drive 未備妥 │
;│ AH=08HMA 忙碌中 AH=AAH:hard disk drive 未備妥 │
;│ AH=09HMA搬動記憶區越過64K AH=BBH:所指定的磁碟機找不到 │
;│註:CRC為循環重複檢查檢,用來偵測磁碟上資料是否有誤 │
;│ ECC為錯誤校正碼,是用來偵測並校正磁碟上的資料是否有誤,ECC具有 │
;│ 自動校正錯誤功能,而且只有硬碟才有ECC │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 13H,AH=07H │
;│從指定的磁軌位置,格式化磁片 │
;│? (DL) <= 磁碟機代號 (A:00H,B:01H,C:80H,D:81H) │
;│? (CH) <= 磁軌號碼,從 0 開始,高 2 bit 可存於 cl 的 b6、b7 │
;│? (CL) <= 起始磁區編號,從 1 開始 │
;│? (DH) <= 磁頭號碼,從 0 開始 │
;│成功 => (C=0),(失敗 C=1,示誤碼如下) │
;│ AH=00H:成功 AH=0AH:硬碟的磁區損壞 │
;│ AH=01H:不合法的磁碟機命令 AH=0BH:硬碟的磁軌損壞 │
;│ AH=02H:磁區損壞或位址欄有誤 AH=0CH:存取不存在的磁軌 │
;│ AH=03H:防寫貼紙未撕 AH=10H:CRC/ECC錯誤 │
;│ AH=04H:找不到指定的磁區 AH=11H:資料讀取錯誤,使用ECC校正│
;│ AH=05H:硬碟重置錯誤 AH=20H:磁碟控制器失誤 │
;│ AH=06H:不是原來的磁片 AH=40H:尋找磁軌錯誤 │
;│ AH=07H:硬碟參數錯誤 AH=80H:floppy disk drive 未備妥 │
;│ AH=08HMA 忙碌中 AH=AAH:hard disk drive 未備妥 │
;│ AH=09HMA搬動記憶區越過64K AH=BBH:所指定的磁碟機找不到 │
;│註:CRC為循環重複檢查檢,用來偵測磁碟上資料是否有誤 │
;│ ECC為錯誤校正碼,是用來偵測並校正磁碟上的資料是否有誤,ECC具有 │
;│ 自動校正錯誤功能,而且只有硬碟才有ECC │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 13H,AH=08H │
;│取得磁碟機的磁軌參數 │
;│? (DL) <= 磁碟機代號 (A:00H,B:01H,C:80H,D:81H) │
;│磁面的磁軌數減 1 => (CH) 及 (CL 的 bit6、bit7) │
;│磁軌的磁區數 => (CL 的 bit0 ~ bit5) │
;│磁面數減 1 => (DH) │
;│磁碟機數量 => (DL) │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 13H,AH=17H │
;│設定磁碟機型式 │
;│? (DL) <= 磁碟機代號 (A:00H,B:01H) │
;│? (AL) <= 磁碟機型式 │
;│磁碟機型式:AL=01H:使用 360K 磁碟機,工作 360K 的磁片 │
;│ AL=02H:使用 1.2M 磁碟機,工作 360K 的磁片 │
;│ AL=03H:使用 1.2M 磁碟機,工作 1.2M 的磁片 │
;│ AL=04H:使用 720K 磁碟機,工作 720K 的磁片 │
;│ AL=05H:使用 1.44M 磁碟機,工作 1.44M 的磁片 │
;│成功 => (C=0),(失敗 C=1,示誤碼如下) │
;│ AH=00H:成功 AH=0AH:硬碟的磁區損壞 │
;│ AH=01H:不合法的磁碟機命令 AH=0BH:硬碟的磁軌損壞 │
;│ AH=02H:磁區損壞或位址欄有誤 AH=0CH:存取不存在的磁軌 │
;│ AH=03H:防寫貼紙未撕 AH=10H:CRC/ECC錯誤 │
;│ AH=04H:找不到指定的磁區 AH=11H:資料讀取錯誤,使用ECC校正│
;│ AH=05H:硬碟重置錯誤 AH=20H:磁碟控制器失誤 │
;│ AH=06H:不是原來的磁片 AH=40H:尋找磁軌錯誤 │
;│ AH=07H:硬碟參數錯誤 AH=80H:floppy disk drive 未備妥 │
;│ AH=08HMA 忙碌中 AH=AAH:hard disk drive 未備妥 │
;│ AH=09HMA搬動記憶區越過64K AH=BBH:所指定的磁碟機找不到 │
;│註:CRC為循環重複檢查檢,用來偵測磁碟上資料是否有誤 │
;│ ECC為錯誤校正碼,是用來偵測並校正磁碟上的資料是否有誤,ECC具有 │
;│ 自動校正錯誤功能,而且只有硬碟才有ECC │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 16H,AH=00H │
;│由鍵盤讀取按鍵,即由鍵盤緩衝區讀取按鍵,會等待 │
;│按鍵的 ascii 碼 => (AL) │
;│按鍵的 scan 碼 => (AH),(AH bit7=0 表按鍵中) 46h Scroll │
;│ 01h Esc 19h P 28h ' " 37h Print 47h 7 Home │
;│ 2~Bh 1~9,0 1Ah [ { 29h ` ~ 38h R Ctrl 48h 8 Up │
;│ 0Ch - _ 1Bh ] } 2Ah L Shift 39h Space 49h 9 PgUp │
;│ 0Dh = + 1Ch Enter 2Bh \ | 3Ah Caps 4Ah - │
;│ 0Eh 1Dh Ctrl 2Ch Z 3Bh F1 4Bh 4 Left │
;│ 0Fh Tab 1Eh A 2Dh X 3Ch F2 4Ch 5 │
;│ 10h Q 1Fh S 2Eh C 3Dh F3 4Dh 6 Right │
;│ 11h W 20h D 2Fh V 3Eh F4 4Eh + │
;│ 12h E 21h F 30h B 3Fh F5 4Fh 1 End │
;│ 13h R 22h G 31h N 40h F6 50h 2 Down │
;│ 14h T 23h H 32h M 41h F7 51h 3 PgDn │
;│ 15h Y 24h J 33h , < 42h F8 52h 0 Ins │
;│ 16h U 25h K 34h . > 43h F9 53h . Del │
;│ 17h I 26h L 35h / ? 44h F10 57h F11 │
;│ 18h O 27h : 36h R Shift 45h Num 58h F12 │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 16H,AH=01H │
;│檢查鍵盤緩衝區是否有字元可讀 │
;│讀取狀況 => (Z=0,有字元可讀),(Z=1,緩衝區是空的) │
;│按鍵的 ascii 碼 => (AL) │
;│按鍵的 scan 碼 => (AH),(AL bit7=0 表按鍵中) 46h Scroll │
;│ 01h Esc 19h P 28h ' " 37h Print 47h 7 Home │
;│ 2~Bh 1~9,0 1Ah [ { 29h ` ~ 38h R Ctrl 48h 8 Up │
;│ 0Ch - _ 1Bh ] } 2Ah L Shift 39h Space 49h 9 PgUp │
;│ 0Dh = + 1Ch Enter 2Bh \ | 3Ah Caps 4Ah - │
;│ 0Eh 1Dh Ctrl 2Ch Z 3Bh F1 4Bh 4 Left │
;│ 0Fh Tab 1Eh A 2Dh X 3Ch F2 4Ch 5 │
;│ 10h Q 1Fh S 2Eh C 3Dh F3 4Dh 6 Right │
;│ 11h W 20h D 2Fh V 3Eh F4 4Eh + │
;│ 12h E 21h F 30h B 3Fh F5 4Fh 1 End │
;│ 13h R 22h G 31h N 40h F6 50h 2 Down │
;│ 14h T 23h H 32h M 41h F7 51h 3 PgDn │
;│ 15h Y 24h J 33h , < 42h F8 52h 0 Ins │
;│ 16h U 25h K 34h . > 43h F9 53h . Del │
;│ 17h I 26h L 35h / ? 44h F10 57h F11 │
;│ 18h O 27h : 36h R Shift 45h Num 58h F12 │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 16H,AH=02H │
;│取得鍵盤設定狀態 │
;│鍵盤狀態值 => (AL),如下 │
;│ ┌─┬─┬─┬─┬─┬─┬─┬─┐ │
;│ al = │b7│b6│b5│b4│b3│b2│b1│b0│ │
;│ └─┴─┴─┴─┴─┴─┴─┴─┘ │
;│ insert ─┘ │ │ │ │ │ │ └─ right shift │
;│ caps lock ───┘ │ │ │ │ └─── left shift │
;│ num lock ─────┘ │ │ └───── ctrl │
;│ scroll lock ───────┘ └─────── alt │
;│ bit = 0 表 off │
;│ bit = 1 表 on │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 16H,AH=0DAH │
;│設定大易輸入法的切換摸式,或取得載入狀況 │
;│? (AL) <= 0:退出大易輸入模式,1:切換為大易輸入模式,2:為內部使用 │
;│載入狀態 => (AL=55AAH 表有載入) │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 17H,AH=00H │
;│顯示一個字元至印表機 │
;│? (AL) <= 字元 ascii │
;│? (DX word) <= 印表機編號 │
;│印表機狀態值 => (AH),如下 │
;│ ┌─┬─┬─┬─┬─┬─┬─┬─┐ │
;│ ah = │b7│b6│b5│b4│b3│b2│b1│b0│ │
;│ └─┴─┴─┴─┴─┴─┴─┴─┘ │
;│ 印表機忙碌? ─┘ │ │ │ │ │ │ └─ 久候不應? │
;│ 取得回應? ───┘ │ │ │ │ └─── 保留 │
;│ 紙用盡? ─────┘ │ │ └───── 保留 │
;│ 所選印表機編號 ───────┘ └─────── I/O error? │
;│ (0:LPT1,1:LPT2) bit = 0 表 否 │
;│ bit = 1 表 是 │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 17H,AH=01H │
;│印表機初始化 │
;│? (DX word) <= 印表機編號 │
;│印表機狀態值 => (AH),如下 │
;│ ┌─┬─┬─┬─┬─┬─┬─┬─┐ │
;│ ah = │b7│b6│b5│b4│b3│b2│b1│b0│ │
;│ └─┴─┴─┴─┴─┴─┴─┴─┘ │
;│ 印表機忙碌? ─┘ │ │ │ │ │ │ └─ 久候不應? │
;│ 取得回應? ───┘ │ │ │ │ └─── 保留 │
;│ 紙用盡? ─────┘ │ │ └───── 保留 │
;│ 所選印表機編號 ───────┘ └─────── I/O error? │
;│ (0:LPT1,1:LPT2) bit = 0 表 否 │
;│ bit = 1 表 是 │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 17H,AH=02H │
;│讀取印表機狀態 │
;│? (DX word) <= 印表機編號 │
;│印表機狀態值 => (AH),如下 │
;│ ┌─┬─┬─┬─┬─┬─┬─┬─┐ │
;│ ah = │b7│b6│b5│b4│b3│b2│b1│b0│ │
;│ └─┴─┴─┴─┴─┴─┴─┴─┘ │
;│ 印表機忙碌? ─┘ │ │ │ │ │ │ └─ 久候不應? │
;│ 取得回應? ───┘ │ │ │ │ └─── 保留 │
;│ 紙用盡? ─────┘ │ │ └───── 保留 │
;│ 所選印表機編號 ───────┘ └─────── I/O error? │
;│ (0:LPT1,1:LPT2) bit = 0 表 否 │
;│ bit = 1 表 是 │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 1AH,AH=00H │
;│取得目前時脈計數 │
;│時脈的 高 word => (CX) │
;│時脈的 低 word => (DX) │
;│註:將取得的單位除以 18.2065 即可換算成秒 │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 1AH,AH=01H │
;│設定目前時脈計數 │
;│? (CX word) <= 時脈 高 word │
;│? (DX word) <= 時脈 低 word │
;│註:將計算出的秒數乘以 18.2065 即可換算成時脈計數單位 │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 1AH,AH=02H │
;│取得系統時間,以 packed BCD 表示 │
;│時 => (CH) │
;│分 => (CL) │
;│秒 => (DH) │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 1AH,AH=03H │
;│設定系統時間,以 packed BCD 表示 │
;│? (CH) <= 時 │
;│? (CL) <= 分 │
;│? (DH) <= 秒 │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 1AH,AH=04H │
;│取得系統日期,以 packed BCD 表示 │
;│年 => (CX) │
;│月 => (DH) │
;│日 => (DL) │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 1AH,AH=05H │
;│設定系統日期,以 packed BCD 表示 │
;│? (CX word) <= 年 │
;│? (DH) <= 月 │
;│? (DL) <= 日 │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 1AH,AH=06H │
;│設定系統鬧鐘,以 packed BCD 表示 │
;│? (CH) <= 時 │
;│? (CL) <= 分 │
;│? (DH) <= 秒 │
;│註:鬧鐘(設定:過了多久後),便會執行 (INT 4AH) │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 1AH,AH=07H │
;│關掉系統鬧鐘 (disable) │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 1AH,AH=08H │
;│取出系統鬧鐘,以 packed BCD 表示 │
;│時 => (CH) │
;│分 => (CL) 
;│秒 => (DH) │
;│開關 => (DL),(0:disable,1:enable、power off,2:enable、power on)│
;│註:鬧鐘(設定:過了多久後),便會執行 (INT 4AH) │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 1AH,AH=0AH │
;│取得日期數量 │
;│天數 => (CX) │
;│註:自 1980/01/01,到現在到底經過多少天 │
;└─────────────────────────────────┘
;┌─────────────────────────────────┐
;│BIOS 呼叫 INT 1AH,AH=0BH │
;│設定日期數量 │
;│? (CX word) <= 天數 │
;│註:自 1980/01/01,到現在到底經過多少天 

原文转自:http://www.ltesting.net