主程序与中断服务程序的关系
主程序与中断服务程序的关系有些类似于主程序与常规子程序之间的关系,在调用时都要保护断点,保护现场;返回时都要恢复现场,恢复断点。但是中断服务程序的调用与返回更复杂,要处理的任务更多
,
中断调用往往具有实时性和随机性的特点。
1
.主程序
主程序要对整个处理过程进行控制,包括主程序本身任务的执行,外部设备的初始化,主程序与中断服务程序之间的转换。主程序要为中断进行各种初始化设置,一般要进行如下操作:
(1)
中断矢量的设置或装入,用户自己编写的中断服务程序
的入口地址要由用户自己装入到中断矢量表中。
(2)
设置
8259A
的中断屏蔽寄存器,决定哪些中断被开
放,哪些中断被禁止。
(3)
设置
CPU
中
FLAG
寄存器的中断允许标志
IF
,决定对
INTR
可屏蔽中断的允许或禁止。
2
.中断服务程序
中断服务程序要完成中断源所要求的具体操作,不同的中
断源所要实现的操作各不相同,但是所有中断服务程序都要执
行下列操作。
(1)
在中断服务程序的开始处,首先利用压栈指令
PUSH
保护现场,即保护
CPU
中有关寄存器的内容以及中断服务程序中要使用的其它寄存器中的内容。
(2)
如果要真正实现中断嵌套,则进入中断服务程序后要使用
STI
指令开中断
(
使
IF
=
1)
,以便在中断处理过程中允许优先级别更高的中断源提出中断申请并得到响应。
(3)
执行中断处理程序,实现中断源所要求的具体操作,这是中断服务程序的目的所在。
(4)
中断处理模块执行完之后,用
CLI
指令关中断
(
使
IF
=
0)
,以便在下面进行现场恢复时暂时禁止其它中断的进入。
(5)
恢复现场,通过一系列的出栈指令
POP
将保护在堆栈中的现场信息予以恢复。
(6)
用
STI
指令开中断
(
使
IF
=
1)
,允许其它中断源的中断请求。
(7)
执行中断返回指令
IRET
,返回主程序。如果采用的是非自动中断结束方式,则在中断返回前还要执行中断结束命令
EOI
,使中断服务寄存器
ISR
中相应的位复位。