答案 0 :(得分:1)
这取决于编译器,操作系统和CPU。
对于低级嵌入式内容,可以直接调用ISR以响应中断,编译器通常会对语言(通常是C或C ++)进行一些扩展,将给定例程标记为ISR,并且寄存器将在这样的例程的开始和结束时保存和恢复。 [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
}