跳至內容

BIOS中斷呼叫

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

BIOS中斷調用(英語:BIOS interrupt calls)是一組功能,為DOS程式與一些軟件提供使用IBM PC兼容機BIOS的功能。許多現代作業系統(如WindowsLinux)的啟動程式會使用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:非可屏蔽中斷英語Non-maskable interrupt,如開機自我測試時發生內存錯誤。
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 控制器所呼叫

參見

參考資料

  1. ^ From bootloader to kernel · Linux Inside. 0xax.gitbooks.io. [2020-09-10]. (原始內容存檔於2020-08-06).