ven*_*s.w 3 linux x86 assembly operating-system linux-kernel
IRET可以从堆栈中恢复寄存器,包括EFLAGS,ESP,EIP等,但我们也可以自己恢复寄存器.例如,"movl"可用于恢复%esp寄存器,"jmp"可以跳转指向存储在堆栈上的EIP的地址.
linux内核通过IRET从所有中断返回,这是一个权重指令.
一些内核操作(如上下文切换)经常发生.
IRET不是浪费吗?
除了IRET仅仅混合之外,所有重物都可以而且经常应该做的POPF+RETF,还有一件事情.它具有与不可屏蔽中断(NMIs)相关的特殊功能.
并发NMI逐个传递给CPU.IRET向NMI电路发出信号,表明现在可以传送另一个NMI.没有其他指令可以做这个信号.如果NMI可以抢占其他NMI ISR的执行,它们将能够导致堆栈溢出,这很少是一件好事.除非我们谈论这个精彩的网站.:)
总而言之,IRET这不是浪费.