1)将中断类型码放入暂存器保存;
2)将标志寄存器内容压入堆栈,以保护中断时的状态;
3)将IF和TF标志清0。
目的是防止在中断响应的同时又来别的中断,而将TF清0是为了防止CPU以单步方式执行中断处理子程序。这时要特别提醒,因为CPU在中断响应时自动关闭了IF标志,因此用户如要进行中断嵌套时,必须在自己的中断处理子程序中用开中断指令来重新设置IF;
4)保护断点。
断点指的是在响应中断时,主程序当前指令下面的一条指令的地址。保护断点就是将当前的IP和CS的内容入栈,为了以后正确地返回主程序;
5)根据取到的中断类型码,在中断向量表中找出相应的中断向量,将其装入IP和CS,即呆自动转向中断服务子程序。
对NMI进入的中断请求,由于其类型码固定为2,因此CPU不用从外设读取类型码,也不需计算中断向量表的地址,只要将中断向量表中0000:0008H~0000:000BH单元内容分别装入IP和CS即可。
关于<.图3 中断处理过程 >的几点说明:
1)8086/8088除软件中断外,内部“非屏蔽中断”、“可屏蔽中断”均设立有优先级,其中内中(除单步外)――即0、1、3、4号中断的优先级高于非屏蔽中断,非屏蔽中断高于可屏蔽中断,单步中断优先级最低;
2)只有在可屏蔽中断的情况下才判IF=1?,才取中断类型码,其余的没有这个动作。
3)关于单步中断,它是每执行一条指令中断一次,显示出当时各寄存器的内容,供用户参考,当进入单步中断响应时,CPU自动清除了TF,在中断返回后,由于恢复了响应时的标志寄存器的值,因此TF=1,执行完一条指令后又进入单步中断,直到程序将TF改为0为止。
4)关于中断的嵌套,NMI总是可以响应的,若在中断处理子程序中设立了开中断指令,INTR的请求也能响应。
5)d出IP、CS、标志,返回断点的动作由IRET指令完成。
6)当遇到等待指令或串 *** 作指令时,允许在指令执行的过程中进入中断。这时需注意在中断处理子程序中保护现场,以保证中断返回后能继续正确地执行这些指令。
主程序只有一个,CPU在执行扫描的时候也只扫描这个程序,其他程序想要被扫描就必须在主程序里被调用。子程序就是主程序后面的程序,不会被主动调用。其他功能和主程序一样。
中断程序是一个功能块,让程序扫描过程中条件中断。
是CPU进入中断周期后自动关中断,为了让主程序和中断服务程序能够处理中断与中断嵌套都要安排开中断指令。
中断系统正在执行一个中断服务时,有另一个优先级更高的中断提出中断请求,这时会暂时终止当前正在执行的级别较低的中断源的服务程序,去处理级别更高的中断源,待处理完毕,再返回到被中断了的中断服务程序继续执行。
CPU进入中断周期后,由中断隐指令自动将使能全局中断标志位置零,即关中断,这就意味着CPU在执行中断服务程序中禁止响应新的中断请求。CPU若想再次响应中断请求,必须开中断,这一任务通常由中断服务程序中的开中断指令实现。
扩展资料:
中断源屏蔽处理的相关技术:
当中断源被屏蔽(屏蔽触发器mask=1),此时即使完成触发器D=1,中断查询信号到来时刻只能将中断请求触发器INTR置“0”,CPU接收不到该中断源的中断请求,即它被屏蔽。
若该中断源未被屏蔽(mask=0),当设备工作已完成时(D=1),中断查询信号则将INTR置“1”,表示该中断源向CPU发出中断请求,该信号送至排队器进行优先级判断。
为了保证级别低的中断源不干扰比其级别高的中断源的中断处理过程。可采用屏蔽技术。
参考资料来源:百度百科-可屏蔽中断标志
参考资料来源:百度百科-中断嵌套
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)