输入输出与中断程序设计:硬件交互的底层逻辑

从端口读写到中断向量表,从 BIOS 调用到硬件 ISR。本文拆解 I/O 映射、中断处理流程,带你理解操作系统如何管理硬件设备。

4

I/O 端口

CPU 通过端口与外设通信。x86 有独立的 I/O 地址空间(64KB)。

端口读写指令

1
2
IN  AL, DX    ; 从 DX 指向的端口读入 AL
OUT DX, AL    ; 将 AL 写入 DX 指向的端口

中断向量表(IVT)

内存 0000:0000 处的 1KB 空间,存放 256 个中断处理程序地址:

中断号 功能
00h 除零错误
08h 定时器中断
09h 键盘中断
10h BIOS 显示服务
13h BIOS 磁盘服务
21h DOS 系统调用

中断处理流程

  1. CPU 收到中断请求
  2. 保存 FLAGS、CS、IP 到栈
  3. 从 IVT 查找处理程序地址
  4. 跳转到处理程序
  5. IRET 返回

自定义中断处理程序

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
; 安装自定义中断
CLI                  ; 关中断
MOV AX, 0
MOV ES, AX
MOV WORD PTR ES:[09h*4], OFFSET MyISR
MOV WORD PTR ES:[09h*4+2], CS
STI                  ; 开中断

; 中断服务程序
MyISR PROC
    PUSH AX
    ; 处理键盘输入
    POP AX
    IRET
MyISR ENDP

BIOS 中断

中断 功能号 用途
INT 10h AH=00h 设置显示模式
INT 10h AH=0Eh 显示字符(TTY)
INT 13h AH=02h 读磁盘扇区
INT 16h AH=00h 读取键盘按键

总结

中断是硬件与软件的桥梁。理解中断机制,你就掌握了操作系统与硬件对话的语言。

下一篇:《多模块程序设计与混合编程:C 语言调用汇编》

广告
广告位预留中 (728x90)