进程中断时如何保存寄存器?

| 这整天困扰着我。当程序设置为在收到某个中断时调用函数时,我知道程序中断时寄存器会被推入堆栈,但我不知道的是:寄存器如何下车堆栈?我知道编译器不知道该函数是否是中断处理程序,也不知道该中断给该函数提供了多少个参数。那么到底是如何使寄存器消失的呢?     
已邀请:
        这取决于编译器,操作系统和CPU。 对于底层嵌入式程序,可以直接响应中断而调用ISR,编译器通常会对将给定例程标记为ISR的语言(通常为C或C ++)进行某种扩展,并保存寄存器并保存。在此类例程的开始和结束时恢复。 [1] 对于常见的台式机/服务器操作系统,尽管通常在中断和用户代码之间有一定的抽象级别-中断通常在传递给用户例程之前先由某些内核代码处理,在这种情况下,内核代码将负责保存和恢复寄存器。 ,并且用户提供的ISR没有什么特别的。 [1]例如Keil 8051 C编译器:
void Some_ISR(void) interrupt 0 // this routine will get called in response to interrupt 0
{
    // compiler generates preamble to save registers

    // ISR code goes here

    // compiler generates code to restore registers and
    // do any other special end-of-ISR stuff
}
    

要回复问题请先登录注册