清除IF标志时(中断表未就绪),禁用所有可屏蔽中断。问题是:1.如果我触发了异常,会发生什么情况?(例如:div乘以零)1.如果一个不可屏蔽的中断到达(中断表未准备好),会发生什么?cpu会怎么做?
div
sauutmhj1#
将IF设置为0(与cli、popf、iret等一起设置)只会禁止外部中断。引用the documentation(* 英特尔® 64位和IA-32架构软件开发人员手册第2A卷 *,第3.2章,cli指令):清除IF标志会导致处理器忽略可屏蔽的外部中断。IF标志以及CLI和STI指令对异常和NMI中断的生成没有影响。如果中断表(IDT或IVT)配置不充分,则在引发#DE除法异常(中断0)的指令上,可能会出现双重错误,并级联为三重错误。NMI通常不会发生,除非事先进行了一些设置,以启用将引发NMI的某个事件(例如,启用CPU性能计数器事件)。
IF
0
cli
popf
iret
#DE
1条答案
按热度按时间sauutmhj1#
将
IF
设置为0
(与cli
、popf
、iret
等一起设置)只会禁止外部中断。引用the documentation(* 英特尔® 64位和IA-32架构软件开发人员手册第2A卷 *,第3.2章,
cli
指令):清除IF标志会导致处理器忽略可屏蔽的外部中断。IF标志以及CLI和STI指令对异常和NMI中断的生成没有影响。
如果中断表(IDT或IVT)配置不充分,则在引发
#DE
除法异常(中断0)的指令上,可能会出现双重错误,并级联为三重错误。NMI通常不会发生,除非事先进行了一些设置,以启用将引发NMI的某个事件(例如,启用CPU性能计数器事件)。