3

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

4

1 回答 1

4

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

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

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

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

于 2012-07-10T10:03:58.587 回答