【问题标题】:What would happen if I were to divide by 0 when interrupts are disabled?如果我在中断被禁用时除以 0 会发生什么?
【发布时间】:2022-08-04 01:53:49
【问题描述】:

什么时候如果标志清零,(中断表未准备好),所有可屏蔽中断都被禁用。

问题是:

  1. 如果我触发了例外? (例如:div 为零)
  2. 如果一个不可屏蔽的中断到达,会发生什么(中断表没有准备好)? cpu会做什么?
  • 仅供参考,像int 10h 这样的指令也算作异常,因为它们是同步的(需要在代码中的某个点处理,而不是在您稍后重新启用中断时处理)。它们也不受 IF=0 的影响。

标签: exception assembly x86 operating-system interrupt


【解决方案1】:

IF 设置为0(使用clipopfiret 等)只会禁止外部中断。

引用文档(英特尔® 64 和 IA-32 架构 软件开发人员手册第 2A 卷,第 3.2 章,对于cli 指令):

清除 IF 标志会导致处理器忽略可屏蔽的外部中断。 IF 标志和 CLI 和 STI 指令对异常和 NMI 中断的产生没有影响。

如果您的中断表(IDT 或 IVT)配置不充分,您很可能会遇到一个级联为三重故障的双重故障。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-25
    相关资源
    最近更新 更多