x86_64汇编:中断标志和TPR寄存器的作用
x86_64 Assembly: effects of the interrupt flag and TPR register
我已经熟悉任务优先级寄存器 cr8
(Windows 上的 IRQL),当然我知道我们如何使用 cli
和sti
。但是,我对这两者有一些疑问。
首先,清除中断标志 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 是什么并不重要。
在任何一种情况下,所有中断都被屏蔽。
我已经熟悉任务优先级寄存器 cr8
(Windows 上的 IRQL),当然我知道我们如何使用 cli
和sti
。但是,我对这两者有一些疑问。
首先,清除中断标志 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 是什么并不重要。 在任何一种情况下,所有中断都被屏蔽。