中断发生时压入堆栈的寄存器是什么

What are the Registers pushed to the stack when an Interrupt Occurs

中断发生时CPU自动保存的状态是什么?顺序是什么?

What are the States Saved by the CPU Automatically when an Interrupt Occur ?

保存了一些寄存器;该集合由 CPU 体系结构定义。它可以保存到堆栈、内存中的固定地址或影子寄存器中。通常这组寄存器很小,如果ISR需要更多,可能会用真正的代码保存它们,而不是CPU自动硬件。 (检查来自 "Interrupt entry/exit." 的 Cody Gray link)

And in Which order ?

寄存器保存的顺序,当它们被压入堆栈时由体系结构定义。

对于默认体系结构,x86/x86_64 的定义类似于(第一个 link 已经列在我的回答 中,在您之前的问题中,带有“*FLAGS,CS, IP"顺序):

https://en.wikibooks.org/wiki/X86_Assembly/Advanced_Interrupts & iret documentation http://www.felixcloutier.com/x86/IRET:IRETD.html

  • 在实模式下,中断硬件压入FLAGS,压入CS,压入IP; iret 指令会将它们重新加载到 return 给用户。
  • 在保护模式下检查 EFLAGS 中的 VM 和 NT 标志以查找如何启动和return 从中断。关于硬件中断(你问的是哪种中断)——检查堆栈是否有 10-20 个字节;加载 SS、eSP、CS:EIP/CS:IP;推 "long pointer to old stack",推 eflags,推 "long pointer to return location"

实际逻辑更复杂。 386里面有进入中断的逻辑http://intel80386.com/386htm/INT.htm and for iret http://intel80386.com/386htm/IRET.htm("Operation").