一个完整的中断过程一般经历以下五个步骤:
1.中断请求
2.中断优先级判定(简称中断判优)
3.中断响应
4.中断处理
5.中断返回
中断响应过程
CPU在每执行完一条指令后,如果允许CPU响应,则CPU自动完成以下工作:
①取中断类型号N。启动中断响应总线操作,在第2个中断响应总线周期读取中断类型号N。
②标志寄存器入栈。执行1个总线写周期,将PSW的内容压入堆栈。
③清除IF和TF标志。禁止硬件中断和单步中断,使IF= 0和TF=0。
④CS和IP(断点)入栈。执行2个总线写周期,依次将CS和IP内容压入堆栈。
⑤获取中断向量。执行2个总线读周期,在中断向量表中的NX 4开始的单元取两个字分别送IP和CS,获取中断处理程序入口地址。CPU从新的 CS: IP值开始执行中断处理子程序。
把中断的处理过程和中断响应过程何在一块就是下图
那么用大白话描述中断的处理过程:
1.正在执行一个程序(主程序),执行到一个位置的时候,突然有了中断请求,在这会把所有的中断进行判优,找到优先级别最高的中断,进行执行。
2.有了中断请求以后,会进行中断的响应过程,即关中断,保护现场,保护断点。
关中断,就是把中断先关闭,防止外界的中断影响处理结果
保护现场(PSW入栈,IF=TF清零)PSW入栈,就是把现在处理结果的标志位保存在堆栈中,IF=TF=0就相当于把一切的干扰排除,不让单步中断等影响处理结果。
保护断点(CS,IP入栈)CS:IP相当于是断点,断点就是在哪里打断的点,如果执行完中断以后,还要返回到断点接着执行主程序
3.通过中断类型号得到中断向量的入口地址,中断向量表中的NX 4开始的单元取两个字分别送IP和CS,获取中断处理程序入口地址。CPU从新的 CS: IP值开始执行中断处理子程序。
4.通过中断的入口地址,找到中断的位置,执行中断,执行完成以后,再返回断点,执行主程序
5.返回断点要执行(弹出CS、IP、psw)找到原来的位置接着执行主程序