【发布时间】:2012-07-10 09:37:35
【问题描述】:
我知道当中断发生时所有通用寄存器都被压入堆栈,但我看不到标志寄存器保存的任何代码。像setl这样依赖于标志寄存器的汇编指令,如果标志寄存器损坏,在中断恢复时很容易产生错误结果。
【问题讨论】:
-
如果不这样,几乎所有的代码都会被破坏。
标签: linux assembly linux-kernel x86
我知道当中断发生时所有通用寄存器都被压入堆栈,但我看不到标志寄存器保存的任何代码。像setl这样依赖于标志寄存器的汇编指令,如果标志寄存器损坏,在中断恢复时很容易产生错误结果。
【问题讨论】:
标签: linux assembly linux-kernel x86
是的,(e/r)flags 寄存器需要像这样跨上下文切换保存。
所有中断(硬件和软件,包括异常)都会自动将其保存在堆栈中,并且 ISR 末尾的 iret 指令将其恢复。
系统调用使用相同或相似的机制并保留寄存器。
调度由中断或系统调用触发。所以,一切都涵盖了。
【讨论】: