#1631·v86

在 MOV SS 和 POP SS 之后禁止中断

作者: jlxip创建于 2026年9月9日更新于 2026年9月13日

使用固定后,我已经能够连续三次从 v86 中安装 Windows 98 SE。现在非常稳定。我还没有尝试过 Windows 95。英特尔的《手册》,第二卷 B 部分的 POP 章节中提到: 使用 POP 指令加载 SS 寄存器可抑制或禁止某些调试异常,并禁止在下一条指令边界上中断。(抑制行为在交付异常或执行下一条指令后结束。)这种行为允许在事件交付之前,将堆栈指针加载到 ESP 寄存器中,使用下一条指令 (POP ESP)。

事实证明, POP SS + MOV SP 由 Windows 9x 的 SMARTDRV.EXE 执行。如果没有文档中描述的行为,待处理的 IRQ 可能会通过并损坏内存。我曾经在两种情况下看到这种情况:

  • #GP 在 KRNL386.EXE 中的设置期间: SUWIN0001:81E1W98SETUP0001:813B
  • 随机 #UD