BIOS中斷呼叫(英語:BIOS interrupt calls)是一組功能,為DOS程式與一些軟件提供使用IBM PC相容機上BIOS的功能。許多現代作業系統(如Windows、Linux)的啟動程式會使用BIOS中斷呼叫載入內核,然後由內核將處理器從16位元真實模式轉換到32位元保護模式(或64位元長模式)[1]。
中斷呼叫
若要呼叫中斷,可以使用X86匯編語言的INT指令。例如,如下的x86匯編語言指令可以使用BIOS的0x10中斷向螢幕列印一個字元。
mov ah, 0x0e
mov al, '!'
int 0x10
BIOS 中斷向量表
中斷
|
描述
|
INT 00h
|
CPU:除零錯,或商不合法時觸發
|
INT 01h
|
CPU:單步陷阱,TF標記為打開狀態時,每條指令執行後觸發
|
INT 02h
|
CPU:非可封鎖中斷,如開機自我測試時發生主記憶體錯誤。
|
INT 03h
|
CPU:第一個未定義的中斷向量,約定俗成僅用於除錯程式
|
INT 04h
|
CPU:算數溢位。通常由INTO指令在置溢位位時觸發。
|
INT 05h
|
在按下⇧ Shift+Prt Sc或BOUND指令檢測到範圍異常時觸發。
|
INT 06h
|
CPU:非法指令。
|
INT 07h
|
CPU:沒有數學協處理器時嘗試執行浮點指令觸發。
|
INT 08h
|
IRQ0:可程式化中斷控制器每 55 毫秒觸發一次,即每秒 18.2 次。
|
INT 09h
|
IRQ1:每次鍵盤按下、按住、釋放。
|
INT 0Ah
|
IRQ2:
|
INT 0Bh
|
IRQ3:COM2/COM4。
|
INT 0Ch
|
IRQ4:COM1/COM3。
|
INT 0Dh
|
IRQ5:硬碟控制器(PC/XT 下)或 LPT2。
|
INT 0Eh
|
IRQ6:需要時由軟碟控制器呼叫。
|
INT 0Fh
|
IRQ7:LPT1。
|
INT 10h
|
顯示服務 - 由BIOS或作業系統設定以供軟件呼叫。
AH=00h
|
設定顯示模式
|
AH=01h
|
設定游標形態
|
AH=02h
|
設置游標位置
|
AH=03h
|
取得游標位置與形態
|
AH=04h
|
取得游標位置
|
AH=05h
|
設置顯示頁
|
AH=06h
|
清除或捲軸畫面(上)
|
AH=07h
|
清除或捲軸畫面(下)
|
AH=08h
|
讀取游標處字元與屬性
|
AH=09h
|
更改游標處字元與屬性
|
AH=0Ah
|
更改游標處字元
|
AH=0Bh
|
設定邊界顏色
|
AH=0Eh
|
在TTY模式下寫字元
|
AH=0Fh
|
取得目前顯示模式
|
AH=13h
|
寫字串
|
|
INT 11h
|
返回裝置列表。
|
INT 12h
|
取得常規主記憶體容量。
|
INT 13h
|
低階磁碟服務。
AH=00h
|
復位磁碟機。
|
AH=01h
|
檢查磁碟機狀態。
|
AH=02h
|
讀磁區。
|
AH=03h
|
寫磁區。
|
AH=04h
|
校驗磁區。
|
AH=05h
|
格式化磁軌。
|
AH=08h
|
取得驅動器參數。
|
AH=09h
|
初始化硬碟機參數。
|
AH=0Ch
|
尋道。
|
AH=0Dh
|
復位硬碟控制器。
|
AH=15h
|
取得驅動器類型。
|
AH=16h
|
取得軟驅中盤片的狀態。
|
|
INT 14h
|
序列埠通訊常式。
AH=00h
|
初始化序列埠。
|
AH=01h
|
寫出字元。
|
AH=02h
|
讀入字元。
|
AH=03h
|
狀態。
|
|
INT 15h
|
其它(系統支援常式)。
AH=4FH
|
鍵盤攔截。
|
AH=83H
|
事件等待。
|
AH=84H
|
讀遊戲杆。
|
AH=85H
|
SysRq 鍵。
|
AH=86H
|
等待。
|
AH=87H
|
塊移動。
|
AH=88H
|
取得擴充主記憶體容量。
|
AH=C0H
|
取得系統參數。
|
AH=C1H
|
取得擴充 BIOS 數據區段。
|
AH=C2H
|
指標裝置功能。
|
AH=E8h, AL=01h (AX = E801h)
|
取得擴充主記憶體容量(自從 1994 年引入的新功能),可取得到 64MB 以上的主記憶體容量。
|
AH=E8h, AL=20h (AX = E820h)
|
查詢系統地址對映。該功能取代了 AX=E801h 和 AH=88h。
|
|
INT 16h
|
鍵盤通訊常式。
AH=00h
|
讀字元。
|
AH=01h
|
讀輸入狀態。
|
AH=02h
|
讀 Shift 鍵(修改鍵)狀態。
|
AH=10h
|
讀字元(增強版)。
|
AH=11h
|
讀輸入狀態(增強版)。
|
AH=12h
|
讀 Shift 鍵(修改鍵)狀態(增強版)。
|
|
INT 17h
|
列印服務。
AH=00h
|
列印字元。
|
AH=01h
|
初始化印表機。
|
AH=02h
|
檢查印表機狀態。
|
|
INT 18h
|
執行磁帶上的 BASIC 程式:「真正的」IBM 相容機在 ROM 里內建 BASIC 程式,當引導失敗時由 BIOS 呼叫此常式解釋執行。(例:列印「Boot disk error. Replace disk and press any key to continue...」這類提示資訊)
|
INT 19h
|
加電自檢之後載入作業系統。
|
INT 1Ah
|
即時鍾服務。
AH=00h
|
讀取即時鍾。
|
AH=01h
|
設置即時鍾。
|
AH=02h
|
讀取即時鍾時間。
|
AH=03h
|
設置即時鍾時間。
|
AH=04h
|
讀取即時鍾日期。
|
AH=05h
|
設置即時鍾日期。
|
AH=06h
|
設置即時鍾鬧鈴。
|
AH=07h
|
重設即時鍾鬧鈴。
|
|
INT 1Bh
|
Ctrl+Break,由 IRQ 9 自動呼叫。
|
INT 1Ch
|
預留,由 IRQ 8 自動呼叫。
|
INT 1Dh
|
不可呼叫:指向影片參數列(包含影片模式的數據)的指標。
|
INT 1Eh
|
不可呼叫:指向軟碟模式表(包含關於軟驅的大量資訊)的指標。
|
INT 1Fh
|
不可呼叫:指向影片圖形字元表(包含從 80h 到 FFh 的 ASCII 字元的數據)的資訊。
|
INT 41h
|
地址指標:硬碟參數列(第一硬碟)。
|
INT 46h
|
地址指標:硬碟參數列(第二硬碟)。
|
INT 4Ah
|
即時鍾在鬧鈴時呼叫。
|
INT 70h
|
IRQ8:由即時鐘調用。
|
INT 74h
|
IRQ12:由滑鼠呼叫
|
INT 75h
|
IRQ13:由數學協處理器呼叫。
|
INT 76h
|
IRQ14:由第一個 IDE 控制器所呼叫
|
INT 77h
|
IRQ15:由第二個 IDE 控制器所呼叫
|
參見
參考資料
- The x86 Interrupt List(頁面存檔備份,存於互聯網檔案館) (a.k.a. RBIL, Ralf Brown's Interrupt List)
- Embedded BIOS User's Manual[失效連結]
- PhoenixBIOS 4.0 User's Manual
- HTML version of Ralf Brown Interrupt List(頁面存檔備份,存於互聯網檔案館)
- IBM Personal System/2 and Personal Computer BIOS Interface Technical Reference, IBM, 1988, ISBN 999857739X
- System BIOS for IBM PCs, Compatibles, and EISA Computers, Phoenix Technologies, 1991, ISBN 0201577607
- Programmer's Guide to the AMIBIOS, American Megatrends, 1993, ISBN 0070015619
- The Programmer's PC Sourcebook by Thom Hogan, Microsoft Press, 1991 ISBN 155615321X
- ^ From bootloader to kernel · Linux Inside. 0xax.gitbooks.io. [2020-09-10]. (原始內容存檔於2020-08-06).