Appearance
题目
假定不采用 Cache 和指令预取技术,且机器处于"开中断"状态,则在下列有关指令执行的叙述中,错误的是( )。
错因
A
A 是正确叙述(题目要找的是错的)。每条指令的指令周期至少要做一次"取指(IF)"——把指令从内存读到 IR,这一步必然访存。题目假设"不采用 Cache 和指令预取"——意味着每次取指都要真的去主存拿,A 严格成立。误选 A 多半是把"指令本身不访存"(如 ADD、SUB)当成"指令周期不访存",忽略了取指阶段也是访存。
B
B 是正确叙述。指令周期是执行一条完整指令所需的时间,至少包含取指 → 译码 → 执行(再加可能的访存、写回),无论怎么压缩都得有"取指"这一拍——所以指令周期 ≥ 1 个时钟周期永远成立。即便是单周期 CPU,也是 1 个时钟周期完成 1 条指令,等号成立。误选 B 是把"机器周期"和"时钟周期"搞混。
D
D 是正确叙述。CPU 在每条指令执行结束(一条指令周期的尾部)会检查中断请求线,开中断状态下若有外部中断挂起 → 立即响应进入中断服务。每条指令尾部都是中断响应窗口,所以"每条指令执行结束时都可能被外部中断打断"在开中断时确实成立。误选 D 是误以为中断响应受其他条件约束(如指令类型),但 408 教材里就是按"每条指令结束检查"来描述的。
总解析
核心考点:空操作(NOP)指令真的"什么都不做"吗?
NOP 不改变通用寄存器和内存,但它仍然是一条指令——指令周期里至少包含:
- 取指(IF):把 NOP 的机器码从内存读到 IR
- 译码:识别这是 NOP
- PC 更新: —— 这一步必然修改 PC
所以 NOP 虽然不动通用寄存器,但 PC 这个特殊寄存器一定被修改——否则 CPU 卡在原地永远执行 NOP。
C 选项说"任何寄存器的内容都不会被改变",把 PC 也排除在外,与事实矛盾——这就是要找的"错误叙述"。
逐项核验:
| 选项 | 内容 | 真假 | 关键点 |
|---|---|---|---|
| A | 每个指令周期至少访存一次 | 真 | 取指阶段必访存(无 Cache / 预取的前提下) |
| B | 指令周期 ≥ 1 个时钟周期 | 真 | 取指本身至少占 1 拍 |
| C | NOP 中任何寄存器都不变 | 假 | PC 必然 +=指令长度,IR 也会更新 |
| D | 每条指令结束时都可能被中断打断 | 真 | CPU 在指令尾检查中断(开中断状态下) |
额外加深印象:
- 即便是 NOP,IR(指令寄存器)也会被填进 NOP 的机器码——又一个被改变的寄存器
- 在五段流水线讨论里,NOP 通常作为"气泡(bubble)"使用,但每个气泡仍占一个流水阶段——本质上还是一条要走完所有阶段的指令
最终答案是 C(C 是错误叙述)。
判定口诀:408 题里凡说"NOP / 空操作不动任何东西"——一律警觉 PC 这个反例。