共计 1226 个字符,预计需要花费 4 分钟才能阅读完成。
BIOS 函数调用入门指南:从原理到实战避坑
什么是 BIOS 函数调用?
BIOS(Basic Input/Output System)是计算机启动时最先运行的固件程序,它提供了最基本的硬件操作接口。BIOS 函数调用就是通过特定的中断指令(INT)来调用这些预先定义好的硬件操作函数。

在现代计算中,BIOS 调用主要用在以下场景:
- 系统初始化和硬件检测
- 低级别的硬件操作(如磁盘读写、屏幕输出)
- 系统调试和诊断
实模式 vs 保护模式
BIOS 调用在两种模式下有显著差异:
| 特性 | 实模式 | 保护模式 |
|---|---|---|
| 内存访问 | 直接物理地址访问 | 通过分页机制虚拟地址访问 |
| 特权级别 | 运行在最高特权级 | 通常需要切换回实模式 |
| 中断处理 | 直接使用中断向量表 | 需要特殊处理 |
| 典型应用 | 系统启动阶段 | 需要特殊技术才能使用 |
核心调用机制
寄存器调用规范
BIOS 调用主要通过以下寄存器传递参数:
- AH:指定功能号
- AL:辅助参数或返回值
- BX/CX/DX:其他参数
- ES:DI:常用于内存缓冲区指针
中断向量表工作机制
+---------------------+
| 中断向量表 (IVT) |
| 0x0000 - 0x03FF |
+---------------------+
| INT 0x00 处理程序 |
| INT 0x01 处理程序 |
| ... |
| INT 0x10 处理程序 |
| ... |
+---------------------+
当执行 INT 指令时,CPU 会根据中断号在 IVT 中找到对应的处理程序地址并跳转执行。
汇编代码示例:INT 10h 屏幕输出
; 使用 INT 10h 显示字符示例
section .text
global _start
_start:
; 设置显示模式
mov ah, 0x00 ; 功能号:设置显示模式
mov al, 0x03 ; 80x25 16 色文本模式
int 0x10
; 显示字符
mov ah, 0x0E ; 功能号:显示字符
mov al, 'A' ; 要显示的字符
mov bh, 0x00 ; 页码
mov bl, 0x07 ; 属性(灰色前景,黑色背景)int 0x10
; 退出程序
mov ax, 0x4C00
int 0x21
安全注意事项
- 内存地址冲突预防
- BIOS 调用可能使用特定内存区域
-
避免在这些区域存放关键数据
-
寄存器保存 / 恢复规范
- BIOS 调用会修改多个寄存器
-
调用前保存,调用后恢复关键寄存器
-
UEFI 兼容性问题
- 现代系统可能使用 UEFI 替代传统 BIOS
- 部分 BIOS 功能可能不可用或行为不同
最佳实践
调试技巧
使用 BOCHS 调试 BIOS 调用:
- 在 bochsrc 配置文件中启用调试
- 设置断点在 BIOS 调用处
- 单步执行并观察寄存器变化
性能优化
- 减少不必要的 BIOS 调用
- 批量处理多次操作
- 缓存频繁使用的信息
进阶思考
- 如何在保护模式下安全调用 BIOS 服务?
- BIOS 调用与直接硬件访问的性能差异有多大?
- 在现代操作系统中,哪些场景仍然需要 BIOS 调用?
总结
BIOS 函数调用是理解计算机底层工作原理的重要窗口。虽然现代系统越来越多地使用更高级的接口,但在系统启动、硬件诊断等场景中,BIOS 调用仍然不可或缺。掌握这些基础知识,有助于我们更深入地理解计算机系统的工作机制。
正文完
