首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么IA-32架构要在调用中断处理程序之前将EFLAGS寄存器推送到堆栈上?

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

Stack Overflow用户
提问于 2011-04-26 22:59:06
回答 2查看 276关注 0票数 0

只是因为EFLAGS寄存器像开关一样工作吗?那么,当它处于活动状态时,中断是启用的,否则就不是吗?

比如说,在Java程序中,它应该是这样的,

代码语言:javascript
复制
 while (switch != 0){
     keepRunning;
 }

 Stop;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-15 00:34:12

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

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

票数 1
EN

Stack Overflow用户

发布于 2012-01-09 05:19:07

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5792280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档