x86_64汇编:中断标志和TPR寄存器的作用

x86_64 Assembly: effects of the interrupt flag and TPR register

我已经熟悉任务优先级寄存器 cr8(Windows 上的 IRQL),当然我知道我们如何使用 clisti。但是,我对这两者有一些疑问。

首先,清除中断标志 cli 是否会“覆盖”存储在 TPR 中的当前值?例如:TPR 为PASSIVE_LEVEL (0)。如果中断被禁用,TPR 中的值是否不再重要?第二:我是从维基百科上读到的:

Loading TPR with 0 enables all external interrupts. Loading TPR with 15 (1111b) disables all external interrupts.

这是否意味着将 TPR 设置为 0xF KzRaiseIrql(HIGH_LEVEL) 等同于 cli?如果我的 TPR 是 0xF 并且中断标志被清除会怎样?如果启用了中断标志怎么办?

两者是完全独立的,完全按照你的预期工作。

如果IF为0,TPR是多少都无所谓。如果 TPR 是 0xF,那么 IF 是什么并不重要。 在任何一种情况下,所有中断都被屏蔽。