EINT 被置 1,CPU 才"愿意"听外部中断的话。否则无论谁喊,CPU 一概不理。
把当前 PC(也就是"我执行到哪了")存到特定位置。可以放进栈,也可以放到约定的 0 号地址。
两条路:硬件向量法——直接把向量地址送进 PC;或者软件查询法——由中断识别程序找到入口再送 PC。
把 EINT 清 0,暂停其他中断申请,保证当前响应过程不被打断。设置中断标记触发器 / 允许中断触发器等。
硬件直接给出一个"向量地址",里面写的就是入口(或入口的跳转)。快,主流方式。
中断识别程序依次问"是不是你",谁先被问到谁优先 —— 询问顺序 = 优先级。
硬件自动完成。CPU 在中断周期里直接把 PC 写到栈 / 0 号地址。
这要靠程序员编程实现 — 在服务程序最开头,用 PUSH 把要用到的寄存器逐个进栈。
服务程序末尾用 POP 把寄存器一一弹回,最后由"中断返回指令"把 PC 还原 —— 主程序恍若未曾离开。
| 优先级 | 中断源 | 屏蔽字 (1 = 屏蔽 · 0 = 放行) — 16 位 | 能压住 | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1111 1111 1111 1111 — 能屏蔽包括自己在内的全部 16 个中断。
0000 0000 0000 0001 — 只能"自己屏蔽自己",谁都打不过。
由中断隐指令完成 PUSH PC。返回时 POP PC。
把 PC 写到 0 号主存单元 (也可灵活设其他地址)。同样由中断隐指令完成。
7 个问题 → 响应、判优、保护、入口、恢复、嵌套
硬件链式排队器 / 集中编码器;软件按询问顺序
隐指令 → ISR 四步 → 嵌套用栈
MASK 位 → 屏蔽字 → 动态改优先级
每条指令执行周期结束,CPU 主动询问 INTR 触发器 —— 否则外设举手没人看。
CPU 内部的 EINT 触发器决定"听不听"。开中断 / 硬件关中断的状态翻转都由 CPU 完成。
集中式硬件判优逻辑就坐落在 CPU 内 —— 一组与非门排出谁优先级最高,给出唯一胜出者。
保护断点、寻入口、关中断 —— 这"三件事"是由 CPU 的微指令时序自动完成的,无需任何软件参与。
服务程序里每一条 PUSH / 服务逻辑 / POP / IRET,都是 CPU 在跑 —— 软件由它推动。
IRET 由 CPU 把保存的断点弹回 PC,并重新开中断 —— 整个中断的"句号"也是它画的。