计组与微机控制
10.1 X86中断系统在IO应用
10.1 X86中断系统在IO应用
5.2 中断的作用
中断技术的引入,使 CPU 不必一直等待外设,而是在外设真正需要服务时才响应。
它的作用有:
提高 CPU 利用率 实现 CPU 与外设并行工作 提高系统实时性 支持多个外设同时工作 支持异常事件处理 支持操作系统多任务管理
6. 8086/8088 的中断分类(之前说的是ARM的)
8086/8088 的中断可以分为:
硬件中断 软件中断
硬件中断又可以分为:非屏蔽中断 NMI,可屏蔽中断 INTR
6.1 硬件中断
硬件中断由外部硬件电路产生,也叫外部中断。
8086/8088 有两条硬件中断请求输入线:NMI,INTR
6.1.1 NMI 非屏蔽中断 NMI 全称:Non-Maskable Interrupt非屏蔽中断
特点:
不受 IF 标志位控制 CPU 不能通过清 IF 来禁止 NMI 优先级很高 通常用于严重故障
常见用途:
掉电检测 存储器奇偶校验错误 严重硬件故障 系统紧急保护
8086 中:NMI 对应中断类型号 2
所以它的中断向量地址是:2 × 4 = 0008H
中断向量占 4 字节,因此 NMI 的向量存放在:0008H ~ 000BH
6.1.2 INTR 可屏蔽中断
INTR 是可屏蔽中断请求输入端。
特点:
受 IF 标志位控制 IF = 1 时,CPU 可以响应 INTR IF = 0 时,CPU 不响应 INTR
一般外设中断请求都通过 INTR 进入 CPU。
多个可屏蔽中断源通常要通过中断控制器管理,例如:8259A
6.2 软件中断
软件中断不是由外部硬件引脚产生,而是由指令或程序内部条件产生。
常见软件中断包括:
INT n INTO
还有一些 CPU 内部异常也属于软件中断或内部中断,例如:
除法溢出 单步中断 断点中断 溢出中断
6.3 8086/8088 的中断类型号
8086/8088 最多支持:256 种中断
中断类型号范围:0 ~ 255
每个中断类型号对应一个中断向量。
7. 中断向量
中断向量就是:中断服务程序的入口地址
在 8086/8088 中,一个中断服务程序入口地址由两部分组成:
CS:段地址 IP:偏移地址
所以一个中断向量包括:IP,CS
7.2 中断向量表
8086/8088 的中断向量表位于内存最低端:
00000H ~ 003FFH
大小:1 KB
因为:256 个中断 × 每个中断向量 4 字节 = 1024 字节 = 1 KB
7.3 每个中断向量的存放格式
每个中断向量占 4 个字节:
低地址 2 字节:IP 高地址 2 字节:CS
注意 8086 是小端方式,所以:
IP 低字节在低地址 IP 高字节在高地址 CS 低字节在低地址 CS 高字节在高地址
7.4 中断向量地址计算
公式:中断向量地址 = 中断类型号 × 4
如果中断类型号为 n,则:
IP 存放地址:4n 和 4n + 1 CS 存放地址:4n + 2 和 4n + 3
例 1:NMI 中断
NMI 类型号为 2。
向量地址 = 2 × 4 = 0008H
所以IP 存放在 0008H、0009H,CS 存放在 000AH、000BH
例 2:INT 21H
中断类型号 = 21H 向量地址 = 21H × 4 = 84H
所以:
IP 存放在 0000:0084H、0000:0085H CS 存放在 0000:0086H、0000:0087H
8. 8086/8088 前 5 个专用中断
8086/8088 中断类型号 0 ~ 4 是专用中断。
类型 5 到类型 31 是保留中断。
类型 32 到 255 通常可由用户或系统使用。
9. 硬件中断响应过程
9.1 NMI 响应
NMI 不受 IF 控制。当 NMI 引脚出现请求时:
CPU 不管 IF 是 0 还是 1,都响应 NMI。
NMI 一般用于紧急事件,例如掉电处理。
掉电时可能的处理方法:
立即保存现场数据 启动备用电源 保存关键状态 等待电源恢复后继续执行
9.2 INTR 响应条件
可屏蔽中断 INTR 要满足:
INTR 有请求 IF = 1 当前指令执行结束
CPU 才会响应。如果:IF = 0则 CPU 不响应 INTR。
9.3 INTA 中断响应周期
8086 响应 INTR 时,会通过 INTA 引脚发出中断响应信号。
教材中说:CPU 在 INTA 引脚上发两个负脉冲
过程可以理解为:
外设或中断控制器向 INTR 发请求 CPU 判断 IF = 1 CPU 执行完当前指令 CPU 发出第一个 INTA 脉冲 CPU 发出第二个 INTA 脉冲 外设或 8259A 把中断类型码送到数据总线 CPU 读取中断类型码 CPU 查中断向量表 CPU 转入中断服务程序
9.4 CPU 响应可屏蔽中断后做的事
CPU 响应外部中断时,会自动完成一部分操作:
1. 从数据总线读取中断类型号 2. 将标志寄存器 FLAGS 压入堆栈 3. 清除 IF 和 TF 4. 将当前 CS 压入堆栈 5. 将当前 IP 压入堆栈 6. 根据中断类型号查中断向量表 7. 取出新的 IP 和 CS 8. 转到中断服务程序执行
注意:IF 被清除后,CPU 暂时不再响应新的可屏蔽中断。 TF 被清除后,避免进入单步调试中断。
10. 本节重点总结
10.1 I/O 接口重点
I/O 接口是 CPU 和外设之间的桥梁。 它负责数据缓冲、格式转换、速度匹配、状态保存和控制信号产生。
10.2 四种 I/O 方式重点
无条件传送:不查状态,直接传送,简单但不可靠。 查询传送:CPU 反复查状态,可靠但浪费 CPU。 中断方式:外设主动请求 CPU,效率高、实时性好。 DMA 方式:外设和内存直接传送,适合高速大批量数据。 I/O 处理机方式:专用处理器管理 I/O,CPU 负担最小。
10.3 编址方式重点
统一编址:I/O 和内存共用地址空间,用访存指令访问。 独立编址:I/O 和内存分开编址,用 IN/OUT 指令访问。
10.4 中断系统重点
中断 = CPU 暂停当前程序,转去处理中断服务程序,完成后返回原程序。 8086/8088 有 256 种中断。 中断向量表位于 00000H ~ 003FFH。 每个中断向量占 4 字节,低 2 字节为 IP,高 2 字节为 CS。 中断向量地址 = 中断类型号 × 4。 NMI 类型号为 2,不受 IF 控制。 INTR 是可屏蔽中断,受 IF 控制。
11. 常考简答题模板
1. 为什么 CPU 和外设之间需要 I/O 接口?
因为 CPU 与外设在速度、数据格式、电平、功率、时序和控制方式等方面通常不匹配,不能直接可靠通信。I/O 接口位于 CPU 和外设之间,负责数据缓冲、格式转换、速度匹配、电平和功率匹配、状态保存以及控制信号产生,从而保证 CPU 与外设之间能够正确交换信息。
2. 程序查询方式和中断方式有什么区别?
程序查询方式是 CPU 主动反复读取外设状态寄存器,判断外设是否准备好,若准备好则进行数据传送,否则继续等待。这种方式硬件简单,但浪费 CPU 时间。中断方式是外设准备好后主动向 CPU 发出中断请求,CPU 响应后转去执行中断服务程序,完成数据传送后再返回原程序。中断方式提高了 CPU 利用率和实时性,适合随机发生的外设请求。
3. 什么是 DMA?它有什么优点?
DMA 是直接存储器存取方式,指在 DMA 控制器的控制下,外设和内存之间直接进行数据传送,而不需要 CPU 逐字节执行输入输出指令。DMA 控制器负责地址修改、计数控制和读写控制信号的产生。DMA 的优点是传送速度快、CPU 负担小,适合大批量高速数据传输。
4. 统一编址和独立编址有什么区别?
统一编址是把 I/O 接口寄存器和存储器统一安排在同一地址空间中,CPU 可以用普通访存指令访问 I/O 端口,编程灵活,但 I/O 会占用内存地址空间。独立编址是把 I/O 端口和存储器分开编址,CPU 使用专门的 IN 和 OUT 指令访问 I/O 端口,I/O 不占用内存地址空间,但指令功能相对受限。
5. 什么是中断?中断有什么作用?
中断是指 CPU 在执行当前程序时,由于外部设备请求或内部事件发生,暂时停止当前程序,转去执行相应的中断服务程序,服务完成后再返回原程序断点继续执行。中断可以提高 CPU 利用率,使 CPU 与外设并行工作,提高系统实时性,并支持多外设、多任务和异常处理。
6. 8086/8088 的中断向量表位于哪里?如何计算中断向量地址?
8086/8088 的中断向量表位于内存最低端 00000H 到 003FFH,共 1 KB。系统支持 256 种中断,每个中断向量占 4 字节,其中低 2 字节存放中断服务程序入口的 IP,高 2 字节存放 CS。若中断类型号为 n,则该中断向量的起始地址为 n × 4。
7. NMI 和 INTR 有什么区别?
NMI 是非屏蔽中断,不受中断允许标志 IF 的控制,优先级高,通常用于掉电、硬件故障等紧急事件。INTR 是可屏蔽中断,受 IF 标志控制,只有当 IF=1 且 CPU 执行完当前指令后才会响应。一般外部设备的中断请求通过 INTR 输入,并常由中断控制器统一管理。
I/O 接口负责连接 CPU 和外设; 数据传送方式从低级到高级依次是:程序控制、中断、DMA、I/O 处理机; 中断系统的核心是:中断请求 → 中断响应 → 查中断向量表 → 执行中断服务程序 → 返回原程序。
