Skip to content

2018年 408 计算机组成原理 第 22 题

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

题目

下列关于外部 I/O 中断的叙述中,正确的是( )。

错因

A

错把"先来先服务"当成了中断优先级机制。实际上中断优先级由屏蔽字决定(详见 2011-21)——多个中断同时来时,按"屏蔽字定义的处理优先级"排序,与到达时间无关。先到的低优先级会被后到的高优先级抢占,先到不等于先处理。

B

错把"保护通用寄存器"算到中断隐指令头上。中断隐指令只做三件事:①关中断 ②保存断点(PC、PSW)③形成入口送 PC——不包含保护通用寄存器。通用寄存器由 ISR 第一段的"保护现场"软件代码 push 到栈,是软件做的,不是硬件做的。详见 2012-22。

D

错在"立即暂停当前指令执行"——CPU 不会在指令中段响应中断,必须等当前指令执行完毕(到指令边界)才响应。中段响应会导致 PC、PSW 状态不一致,无法干净保存断点。"立即"二字是错点。

总解析

逐项审计

选项说法正/误关键判据
A中断控制器按到达先后排优先级优先级由屏蔽字定,不看到达顺序
B隐指令保护通用寄存器隐指令只做关中断 + 保断点 + 送入口,不动通用寄存器
CCPU 在中断允许状态才能响应外部中断中断使能位是响应的硬性前提
D有请求 CPU 立即暂停指令转 ISR必须等指令执行结束才响应

C 为什么成立

CPU 内部有一个"中断允许位"(PSW 中的 IF 标志、IE bit 等不同 ISA 命名不同,但作用相同):

  • IF = 1:开中断态——允许响应外部中断
  • IF = 0:关中断态——屏蔽所有外部中断(不可屏蔽中断 NMI 除外)

只有 IF = 1 时,CPU 在指令边界采样中断请求引脚才会真正响应中断;IF = 0 时即便外部一直在拉中断线,CPU 也"装作没看见",把请求挂起,直到 IF 重新置 1。

这是为什么 ISR 入口前会硬件自动关中断——保护现场期间不允许嵌套;ISR 中段又会软件开中断——允许多重中断系统的高优先级抢占。

最终答案是 C(这是正确叙述)

外部中断响应的完整三个前提(缺一不可):

  1. 存在中断请求——外部设备拉起中断线,中断控制器送到 CPU 引脚
  2. 未被屏蔽——屏蔽字对应位为 0
  3. 中断允许态(IF = 1)——这是 C 选项强调的

只有三者同时成立,CPU 才在当前指令结束时响应中断。这道题考的就是第 3 个前提。

易混淆点速查

说法正确版本
"立即响应""指令结束时响应"(边界响应)
"按先后顺序排优先级""按屏蔽字定义的优先级"(动态可调)
"隐指令保护通用寄存器""隐指令保断点,软件保通用寄存器"(硬软件分工)
"关中断也能响应""开中断才能响应外部中断"(IF = 1)

编者注(生僻术语):题面"中断允许状态"对应不同教材有不同名字——王道叫"中断使能位"、汤子瀛叫"中断允许标志",本质都是 PSW 里那 1 位。看到任何一个表述都按"IF = 1 才能响应外中断"理解。

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题