Appearance
题目
中断控制 I/O 方式下,实现 I/O 需要硬件和软件协同完成,中断响应和处理过程中所包含的下列工作中,必须由硬件完成的是( )。
错因
A
开中断由软件的 ISR 在恢复现场前/后用一条特殊指令(如 x86 的 STI)完成,不是硬件自动做。而且开中断的时机由 ISR 编写者决定(多重中断系统在 ISR 中段开、单级中断在 IRET 前才隐式开),硬件无法替软件决定。
B
"中断"二字本身是个事件,不是一项操作——选项语义模糊。如果理解成"产生中断请求",那是设备端硬件的事;如果理解成"响应中断",那是 CPU 隐指令的事。无论哪种解释都不能简单回答"必须由硬件完成"——题目要找"必须硬件完成的具体动作",B 不构成具体动作。
D
保存通用寄存器是 ISR 第一段"保护现场"由软件代码 push 到栈/专用区——硬件不知道你要不要保护、保护哪些寄存器,全凭 ISR 按 ABI 约定决定。这是 408 反复考的"硬软件分工"考点。详见 2012-22。
总解析
中断响应和处理过程的硬软件分工:
| 步骤 | 谁做 | 何时 |
|---|---|---|
| ① 关中断 | 硬件(隐指令) | 响应瞬间 |
| ② 保存断点(PC、PSW) | 硬件(隐指令) | 关中断之后 |
| ③ 形成入口送 PC | 硬件(隐指令) | 保断点之后 |
| ④ 保护现场(保存通用寄存器) | 软件(ISR 第一段) | 进入 ISR |
| ⑤ 中断处理 | 软件(ISR 主体) | 现场保护后 |
| ⑥ 恢复现场(恢复通用寄存器) | 软件(ISR 末尾) | 处理结束后 |
| ⑦ 开中断 | 软件(指令) | 多重中断 ISR 中段开 / 单级中断 IRET 前隐式开 |
| ⑧ 中断返回(IRET) | 硬件 + 软件配合 | ISR 末尾 |
为什么"保存断点"必须硬件做:
断点 = PC + PSW(被打断时下一条指令的地址 + 处理器状态)。保存断点必须发生在响应中断的瞬间——如果不立刻保住:
- 隐指令第三步要把 PC 改写为中断入口地址,原 PC 一旦覆盖就再也找不回来(无法返回原程序)
- 关中断动作改变了 PSW 的中断使能位,原 PSW 需保护
- 软件根本来不及介入——保存动作必须在硬件级别完成,没有任何机会让软件先跑一段代码
而保存通用寄存器则不一样——
- 通用寄存器在进入 ISR 后才保护,因为 ISR 头几行还没"用脏"通用寄存器
- 哪些寄存器要保护、保护到哪个内存区,由 OS / 编译器约定的调用约定(ABI)决定,不是硬件能决定的
- 只需软件在合适时机 push 即可
逐项审计:
| 选项 | 操作 | 必须由谁做 |
|---|---|---|
| A | 开中断 | 软件(具体指令如 STI / IRET 隐式开) |
| B | "中断" | 题面语义不清,不是具体操作 |
| C | 保存断点 | 硬件(隐指令) ✓ |
| D | 保存通用寄存器 | 软件(ISR 第一段) |
最终答案是 C(保存断点)。
关联题对照(中断隐指令系列):
- 2010-21:单级中断 ISR 内执行顺序(I → V → VI → II → VII)
- 2011-21:多重中断屏蔽字设置
- 2012-22:隐指令包含哪些步骤(关中断 + 保断点 + 送入口)
- 2017-22:多重中断中 CPU 是否全程关中断
- 2018-22:中断响应的前提条件(IF = 1)
- 2026-22:哪一步必须由硬件做
把这六道连起来看,"中断响应 + 多重中断 + 屏蔽字 + 硬软件分工"基本就闭环了。