Appearance
题目
响应外部中断的过程中,中断隐指令完成的操作,除保护断点外,还包括( )。
I. 关中断
II. 保存通用寄存器的内容
III. 形成中断服务程序入口地址并送 PC
错因
A
漏了 III、错把 II 当硬件做的。II(保存通用寄存器)是 ISR 第一步软件做的"保护现场"——通用寄存器数量众多(CPU 才不知道你要不要保护、保护哪些),保哪几个、保到哪儿都是 ISR 软件根据 OS 约定决定的,硬件不可能替你做。
C
把"关中断(I)"误归为软件做。其实关中断是中断隐指令第一步——CPU 一旦决定响应中断,立刻自动置 IF/IE 标志为 0,整个过程不需要 ISR 介入。如果让软件来关,那"关之前"的几条指令就可能被新中断打断,破坏现场——逻辑上行不通。
D
三项都选——多选了 II。II(保存通用寄存器)属于 ISR 内"保护现场"的第一步,由软件代码 push 到栈或专用区,不是隐指令做的。断点(PC + PSW)和通用寄存器是两回事:断点是跳走前必须立刻保住的"返回地址"(硬件来),通用寄存器是 ISR 真正开始干活前才保的"现场"(软件来)。两者别搞混。
总解析
核心概念:什么是"中断隐指令"
中断隐指令 = CPU 检测到中断请求后,硬件自动完成的一组动作(不对应任何机器指令、不可被软件直接调用),把"用户程序"切到"中断服务程序入口"。
它的固定三步:
- 关中断(I)——置 IF=0,防止 ISR 入口前几条指令被新中断打断
- 保存断点(PC、PSW 入栈)——题目已剔除
- 引出 ISR:把中断向量对应的入口地址装进 PC(III),下一条取指就跳到 ISR 第一行
题目说"除保护断点外,还包括",所以从三步里去掉"保存断点",剩下的是 I 和 III。
为什么 II 不在隐指令里:
| 操作 | 谁做 | 何时做 | 原因 |
|---|---|---|---|
| 关中断 I | 硬件(隐指令第 1 步) | 响应中断瞬间 | 必须在保存断点前关,否则栈/PC 可能被新中断破坏 |
| 保存断点 | 硬件(隐指令第 2 步) | 关中断之后 | 把"被打断的位置"PC 入栈,是返回的依据 |
| 形成入口送 PC III | 硬件(隐指令第 3 步) | 保存断点之后 | 中断向量表查得入口地址,写 PC 即跳转 |
| 保护通用寄存器 II | 软件(ISR 第一步) | ISR 入口处 | 哪些寄存器需要保护、保到哪个内存区,由 OS 约定(ABI/调用约定),硬件无法决定 |
| 中断处理 | 软件(ISR) | 现场保护后 | 真正的中断逻辑 |
| 恢复现场 | 软件(ISR) | 处理结束后 | 与"保护现场"对称 |
| 中断返回 IRET | 硬件 + 软件配合 | ISR 结束 | 弹出 PC、PSW,开中断 |
记忆框架:"隐指令 = 关中断 + 保断点 + 送入口"——三件事都只与 PC、PSW、中断屏蔽位相关,没有任何"通用寄存器级"操作。一看到题目里出现"保存通用寄存器/累加器/各类工作寄存器",立刻判定这是软件干的,不是隐指令。
最终答案是 B(仅 I、III)。