如何解决进程中断时如何保存寄存器?
| 这整天困扰着我。当程序设置为在收到某个中断时调用函数时,我知道程序中断时寄存器会被推入堆栈,但我不知道的是:寄存器如何下车堆栈?我知道编译器不知道该函数是否是中断处理程序,也不知道该中断给该函数提供了多少个参数。那么到底是如何使寄存器消失的呢?解决方法
这取决于编译器,操作系统和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
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。