BIOS中斷呼叫
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或操作系统设定以供软件调用。
| ||||||||||||||||||||||||||||||
INT 11h | 返回设备列表。 | ||||||||||||||||||||||||||||||
INT 12h | 获取常规内存容量。 | ||||||||||||||||||||||||||||||
INT 13h | 低階磁碟服務。
| ||||||||||||||||||||||||||||||
INT 14h | 串口通信例程。
| ||||||||||||||||||||||||||||||
INT 15h | 其它(系统支持例程)。
| ||||||||||||||||||||||||||||||
INT 16h | 键盘通信例程。
| ||||||||||||||||||||||||||||||
INT 17h | 打印服务。
| ||||||||||||||||||||||||||||||
INT 18h | 执行磁带上的 BASIC 程序:“真正的”IBM 兼容机在 ROM 里内置 BASIC 程序,当引导失败时由 BIOS 调用此例程解释执行。(例:打印“Boot disk error. Replace disk and press any key to continue...”这类提示信息) | ||||||||||||||||||||||||||||||
INT 19h | 加电自检之后载入操作系统。 | ||||||||||||||||||||||||||||||
INT 1Ah | 实时钟服务。
| ||||||||||||||||||||||||||||||
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).