为什么IA-32架构在调用中断处理程序之前将EFLAGS寄存器压入堆栈?

时间:2011-04-26 14:59:06

标签: memory interrupt interrupt-handling

这只是因为EFLAGS寄存器的工作方式与开关一样吗?所以当它处于活动状态时,中断被启用,否则,它不是?

说,在Java程序中,它就像是,

 while (switch != 0){
     keepRunning;
 }

 Stop;

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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