我知道当中断发生时所有通用寄存器都被压入堆栈,但是我看不到任何保存标志寄存器的代码.如果标志寄存器损坏,则从中断恢复时,依赖于标志寄存器的汇编指令(如setl)很容易产生错误的结果.
解决方法:
是的,(e / r)标志寄存器需要像这样在上下文切换中保存.
所有中断(硬件和软件,包括异常)都会自动将其保存在堆栈中,而ISR末尾的iret指令将对其进行恢复.
系统调用使用相同或相似的机制并保留寄存器.
调度是由中断或系统调用触发的.因此,所有内容均已覆盖.
2023-11-17 15:31:34
我知道当中断发生时所有通用寄存器都被压入堆栈,但是我看不到任何保存标志寄存器的代码.如果标志寄存器损坏,则从中断恢复时,依赖于标志寄存器的汇编指令(如setl)很容易产生错误的结果.
解决方法:
是的,(e / r)标志寄存器需要像这样在上下文切换中保存.
所有中断(硬件和软件,包括异常)都会自动将其保存在堆栈中,而ISR末尾的iret指令将对其进行恢复.
系统调用使用相同或相似的机制并保留寄存器.
调度是由中断或系统调用触发的.因此,所有内容均已覆盖.