CPU获得中断类型码方式:
(1)非屏蔽硬件中断请求,CPU内部会自动产生中断类型码2
(2)可屏蔽硬件中断请求,当CPU处于开中断状态时,由外部中断控制器将相应的中断类型码送给CPU(如8259A)
(3)INT n指令,中断类型码为n
记:非2可外int n
CPU获得中断类型码n后,中断处理过程:
(1)F寄存器压入堆栈,保护各个标志位
(2)清除I标志和T标志(P52),屏蔽新的可屏蔽硬件中断和单步中断
(3)保护主程序的断点,即将主程序断点处的CS、IP的当前值压入堆栈,压入的顺序为先压入断点的CS值,再压入断点的IP值。
(4)CPU从4n~4n+3单元中取出n型中断向量写入IP,CS,将4n~4n+1单元写入IP,4n+2~4n+3单元内容写入CS
(5)CPU根据新的CS:IP的值转向n型中断服务子程序
(6)服务程序执行完毕,执行中断返回指令。
中断返回指令的功能是按顺序恢复断点处的IP值、CS值和之前保护的相应中断前的标志寄存器内容。
(7)CPU根据恢复后的CS:IP返回断点,继续执行主程序
记:F寄存器,CS,IP入栈,从4n~4n+3找到中断向量放入CS:IP,执行中断服务子程序,执行中断返回指令IRET,返回断点,恢复现场。
XXX PROC
保护现场:如果中断服务子程序中使用到的寄存器,如果主程序中也要使用该寄存器,就会发生冲突,所以进入中断服务子程序的第一步就是要保护现场,将主程序中用到的资源加以保护
保护主程序的断点是中断隐指令完成,保存通用寄存器和状态寄存器的内容由中断服务子程序完成。
中断处理
恢复现场:将各个寄存器的内容出栈,遵循先进后出的原则,即保护现场时,各个寄存器进栈顺序的逆序是出栈的顺序。
中断返回:中断返回指令IRET,使中断服务子程序能安全返回之前的主程序断点。
IRET
XXX ENDP