从 CPU 芯片本身来说,8088 的 NMI 中断是无法被软件关闭的 。不过,在典型的 IBM PC/XT 系统中,可以通过外部硬件端口来屏蔽它。
🚫 CPU 层面:无法用软件禁止
NMI 的设计初衷就是为了处理电源掉电等紧急事件,因此它不受中断允许标志位(IF)的影响 。无论你执行 CLI 指令还是将 IF 置 0,CPU 都必须在当前指令结束后立即响应 NMI 请求。
🔌 系统层面:通过端口 0A0H 屏蔽
虽然 CPU 本身不能拒绝,但在 IBM PC/XT 的硬件设计中,NMI 信号进入 CPU 前通常有一个外部屏蔽寄存器 。你可以用 OUT 指令向 I/O 端口 0A0H 写入特定值来控制它:
-
屏蔽 NMI :向端口 0A0H 写入 80H,即可阻止 NMI 信号送达 CPU。
-
允许 NMI :向端口 0A0H 写入 00H,即可重新开放。
需要注意的是,这并非 CPU 指令层面的屏蔽,而是利用了主板上的外部逻辑电路。在 PC/XT 系统中,该操作常用于系统初始化阶段,避免因内存奇偶校验未就绪而误触发 NMI。

