发生中断或进程调度时,是否需要保存标志寄存器?

时间:2012-07-10 09:37:36

标签: linux assembly linux-kernel x86

我知道当中断发生时,所有通用寄存器都被压入堆栈,但我看不到任何标志寄存器保存的代码。像setl这样依赖于标志寄存器的汇编指令,如果标志寄存器被破坏,在从中断恢复时很容易产生错误的结果。

1 个答案:

答案 0 :(得分:4)

是的,(e/r)flags寄存器需要在这样的上下文切换中保存。

所有中断(硬件和软件,包括异常)都会自动将其保存在堆栈中,并且ISR末尾的iret指令会将其恢复。

系统调用使用相同或类似的机制并保留寄存器。

调度由中断或系统调用触发。所以,一切都被覆盖了。