← 返回 计组与微机控制

计组与微机控制

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 处理机; 中断系统的核心是:中断请求 → 中断响应 → 查中断向量表 → 执行中断服务程序 → 返回原程序。