Skip to content

2010年 408 计算机组成原理 第 21 题

计算机组成原理2010年选择题2分

题目

单级中断系统中,中断服务程序内的执行顺序是( )。

I. 保护现场 II. 开中断

III. 关中断 IV. 保存断点

V. 中断事件处理 VI. 恢复现场 VII. 中断返回

错因

B

把"关中断"塞到了 ISR 内部最前面。关中断(III)是中断响应阶段由 CPU 硬件自动完成的——在保存 PC、转入 ISR 入口之前就已经关了,不在 ISR 内。把硬件已经做过的步骤再写进软件流程,明显错位。另外 B 完全漏了"恢复现场"和"开中断"两步,没法保证返回后通用寄存器和中断使能位的正确状态。

C

同样把硬件做的"关中断(III)+ 保存断点(IV)"塞进了 ISR 开头——这两步都属于硬件中断响应("中断隐指令"),不需要 ISR 软件来做。而且 C 漏掉了"开中断(II)",意味着中断返回后 CPU 一直处于关中断状态,再也不响应任何后续中断,系统会卡死——明显不合理。

D

把硬件做的"保存断点(IV)"误写进 ISR——断点(PC)的保存由中断响应硬件自动完成,软件不需要再做。同时漏掉了"开中断(II)"。其余次序看似合理(保护现场 → 处理 → 恢复现场 → 返回),但少了开中断这一步,中断屏蔽位永远不再打开,系统就关闭了中断响应能力。

总解析

第一步:明确"硬件做"和"软件做"的分界

阶段谁做步骤
中断响应(中断隐指令)硬件(CPU 自动)III. 关中断IV. 保存断点(PC) → 引出中断服务程序入口
中断服务程序(ISR)软件(OS / 中断处理代码)I. 保护现场 → V. 处理 → VI. 恢复现场 → II. 开中断 → VII. 中断返回

题目问的是 "中断服务程序内" 的顺序——所以要排除 III 和 IV(它们由硬件先做完了)。

第二步:ISR 内部 5 步的顺序

I. 保护现场(push 通用寄存器、PSW 等到栈或专用区)

V. 中断事件处理(执行真正的中断逻辑)

VI. 恢复现场(pop 通用寄存器、PSW,恢复 ISR 进入前的状态)

II. 开中断(清中断屏蔽位,准备好响应下一次中断)

VII. 中断返回(IRET 等指令,从栈中弹出 PC,回到被中断的程序)

即:I → V → VI → II → VII

第三步:为什么"开中断"放在恢复现场之后、中断返回之前

  • 不能放在 ISR 开头:ISR 关键代码段(特别是保护现场、恢复现场)需要独占执行,这期间若来新中断,可能损坏栈和现场——所以 ISR 内的关键操作必须在关中断状态下进行。
  • 不能放在中断返回之后(也无法放):中断返回(IRET)会同时恢复 PSW 中的中断使能位(被中断时的状态),但单级中断系统里硬件进入 ISR 时已强制关中断,需要由 ISR 主动开回——所以必须在 IRET 之前完成"开中断",否则就再也不响应中断。
  • 单级中断不允许嵌套——开中断这步看似允许嵌套,但因为前面已恢复现场、栈也清空,即便此刻被打断,也不会破坏数据;目的是"准备好响应下一次外部中断",而不是"允许嵌套自己"。

最终答案是 A(I → V → VI → II → VII)

记忆框架

步骤必须发生在哪一段不能放哪
关中断 III硬件中断响应ISR 软件层(已经关过了)
保存断点 IV硬件中断响应ISR 软件层(PC 已自动入栈)
保护现场 IISR 起始处理之后(先保护后处理)
中断处理 V保护现场之后
恢复现场 VI处理之后开中断之后(避免被打断时栈紊乱)
开中断 II恢复现场之后、返回之前ISR 中段(关键代码段会被打断)
中断返回 VIIISR 末尾

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数