从某一个中断源发出中断服务请求,到这个中断服务请求全部处理完成所经过的主要过程如图7.3所示。
图7.3 中断处理过程
  
 ● 现行指令执行结束,且没有更紧急的服务请求,如DMA服务请求等。
 ● 关CPU中断,CPU不能再响应其它任何中断源的中断复请求。
 ● 保存中断点,通常是指保存程序计数器PC中的内容,把它压入到系统堆栈中,以便在中断服务完成之后返回到原来的程序中去。
 ◎ 撤消设备的中断服务请求,如果这个中断源的中断请求不撤消的话,那么在CPU开中断后,它必然将再次请求中断服务。
 ◎ 保存硬件现场,主要指保存处理机状态字PSW及堆栈指针SP等中的内容,把它们压入系统堆栈,或保存到主存储器的指定单元中。
 ◎ 识别中断源
 ◎ 改变设备的屏蔽状态
 ● 转向中断服务程序入口,可能还要通过软件才能找到具体中断源的中断服务程序入口。
 ◎ 保存软件现场,主要指保存将要被中断服务程序破坏的通用寄存器中的内容等,把它们压入系统堆栈或切换到另外一组通用寄存器中。
 ○ 开CPU中断,CPU可以响应其它更高级中断源的中断服务请求,中断源之间可以实现中断嵌套。
 ○ 中断服务,必须通过软件来完成。
 ○ 关CPU中断,CPU不响应任何中断源的中断服务请求。在下一次开CPU中断之前,正在运行的程序不允许被中断。
 ◎ 恢复软件现场,恢复被中断服务程序破坏的通用寄存器中的内容等。
 ◎ 恢复屏蔽状态
 ◎ 恢复硬件现场,主要指恢复处理机状态字PSW及堆栈指针SP等中的内容等,准备返回中断点。
 ◎ 开CPU中断,如果用硬件实现,这条指令必须延迟执行,要在程序回到中断点之后才能实际打开CPU的中断。
 ○ 返回到中断点
  

             图7.3 中断处理过程

  在图7.3中,每一行开头的标记分别表示:
  ● 表示本行的功能一般用硬件来实现。
  ○ 表示本行的功能一般用软件来实现。
  ◎ 表示本行的功能可以用硬件来实现,也可以用软件来实现。
  在图7.3中给出的中断处理顺序,在不同的计算机系统中可能有所不同。例如,"转向中断服务程序入口"这一功能可以插在从"保存中断点"之后,到第一次"开CPU中断"之间的任何一个地方。具体插在什么地方要看中间的一些功能,如"撤消设备的中断服务请求"、"保存硬件现场"、"识别中断源"、"改变设备的屏蔽状态"和"保存软件现场"等是用硬件来实现,还是用软件来实现。一般要在采用硬件实现的功能全部结束之后,才能执行"转向中断服务程序入口"这一功能。用软件实现的所有功能都在中断服务程序中完成。
  实际上,在图7.3所列的全部功能中,除了"现行指令执行结束"之外,只有"保存中断点"和"转向中断服务程序入口"这两个功能是必须用硬件来实现的。这是因为中断响应发生在现行程序的什么地方是不确定,一般不能由程序员来安排;因此,这两个功能必须由硬件来做。另外,第一次"关CPU中断"一般也用硬件来实现,它只要用很简单的组合逻辑就能实现,几乎不需要花费时间。而"保存中断点"和"转向中断服务程序入口"这两个功能,实际上可以隐含地执行一条子程序调用指令来实现。
  同样,也只有"中断服务"和"返回到中断点"这两个功能是必须用软件来实现的。其中,"返回到中断点"可以通过执行一条中断返回指令来实现,就象从子程序中返回到主程序那样。至于"中断服务"当然是要用软件来实现的,否则也就不能称为"程序中断方式"了。