Memory 为什么IA-32体系结构在调用中断处理程序之前将EFLAGS寄存器推送到堆栈上?

Memory 为什么IA-32体系结构在调用中断处理程序之前将EFLAGS寄存器推送到堆栈上?,memory,interrupt,interrupt-handling,Memory,Interrupt,Interrupt Handling,这仅仅是因为EFLAGS寄存器像开关一样工作吗?因此,当它处于活动状态时,中断被启用,否则,它不是 比如说,在Java程序中 while (switch != 0){ keepRunning; } Stop; 内核将EFLAG保存在中断堆栈帧中,以便稍后恢复中断的任务。EFLAGS是内核在堆栈帧中保存的最小裸机器状态的一部分,它还包括指令指针(EIP)、代码段(CS)以及通常的用户模式堆栈指针(ESP)。当中断服务程序完成时(使用IRET指令),内核恢复EFLAG和堆栈帧中的

这仅仅是因为EFLAGS寄存器像开关一样工作吗?因此,当它处于活动状态时,中断被启用,否则,它不是

比如说,在Java程序中

 while (switch != 0){
     keepRunning;
 }

 Stop;

内核将EFLAG保存在中断堆栈帧中,以便稍后恢复中断的任务。EFLAGS是内核在堆栈帧中保存的最小裸机器状态的一部分,它还包括指令指针(EIP)、代码段(CS)以及通常的用户模式堆栈指针(ESP)。当中断服务程序完成时(使用IRET指令),内核恢复EFLAG和堆栈帧中的其余寄存器


这里的基本原理是,任务可以执行,而不必担心任何随机中断会突然踩到寄存器上。这是唯一明智的方法。

我认为这样做的一个原因很简单,就是寄存器通过中断进行了修改。即IE(中断启用)标志将被清除。如果CPU没有按下标志,它将无法修改标志,并且需要额外的状态和额外的指令才能获得此隐藏状态。

我可以回答,但我不会回答,因为您接受0%的答案