3、 中断隐指令
中断系统还要解决程序断点的保存,需要生成中断服务程序的入口地址,另外,对于单重中断CPU,在中断服务执行过程中,不允许有新的中断请求打断当前正在执行的中断服务程序,那么即使是在多重中断中,也不允许优先级低的中断源请求打断正在执行的优先级高德中断源的服务请求。在中断响应过程中,要解决下面三个问题
(1) 保护程序断点
因为中断服务结束后,程序要返回到断点继续执行。断点的保护有两种方法:第一,将断点,或者是中断服务返回来后要执行的指令的地址保存到特定的内存单元地址中。第二,将程序断点进栈,返回的时候将程序断点出栈。
(2) 寻找中断服务程序的入口地址
前面已经讲过了两种方法:一种是使用硬件向量法,将向量地址送给PC,PC中保存的是向量地址,这个向量地址中包含了中断服务程序的入口地址或者是一条跳转指令,这条跳转指令会跳转到中断服务程序。二是使用软件的方法,把中断识别程序他的入口地址送到M中,计算机去执行中断识别程序以找到中断服务程序的入口地址
(3) 关中断
关中断避免在单重中断机器中,在执行中断服务程序的过程中,有新的中断源打断当前中断服务程序的执行。另外,即使在多重中断CPU中,采用关中断的方式,也是为了保存程序断点,保存程序现场的过程。
(五)保户现场和恢复现场
1、保护现场
(1)保存断点
由中断隐指令来做,中断隐指令一共完成了三个操作,保存断点,形成中断服务程序的入口地址,硬件关中断。
(2)寄存器内容
执行中断服务程序时候,要用到CPU中的一些寄存器,这些寄存器的内容也要进行保存,因为这些内容进行中断返回的时候,主程序还要用到,这些内容可以通过中断服务程序完成寄存器内容的保护。所以我们再编写中断服务程序过程中,用到的寄存器内容,在使用寄存器之前,先要把这些内容保护起来,可以保存在堆栈中,或者是内存的某个地址中。
2、恢复现场
恢复现场由中断服务程序完成,如,保护现场的时候,保存寄存器的内容可以使用push指令把寄存器内容压入对堆栈中,恢复现场时候使用出栈指令恢复现场,由此可见,中断服务程序需要包含下面几个方面的内容:
(1)保护现场:断点保存,硬件实现,使用的是计算机隐指令。保护寄存器内容,可以使用push指令实现,这种方式是将寄存器的内容保存在了堆栈中。
(2)执行其他服务程序:视不同的请求源而定。
(3)恢复线程:使用pop指令,将堆栈内容弹出
(4)中断返回:使用IRET指令
————————————————
版权声明:本文为CSDN博主「he_321」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/b_x_p/article/details/85441197