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).