至此,CS和IP寄存器取得了中断处理程序的段地址和偏移地址,CPU就把控制转给中断处理程序。

  这里要注意的是设备发到CPU的中断请求信号在时间上是随机的,只要未被屏蔽的设备本身的状态是准备好或空闲的,它就会向CPU请求中断,如果此时CPU正在执行一条指令,那么就要等这条指令执行完后,才响应中断。对加封锁的指令(如LOCK MOV AX, BX)应看作为一条指令处理;对加重复前缀的串指令(如REP MOVSB),也要作为一个整体来处理,但不是把串操作全部重复执行完,而是执行一次重复和串指令即可响应中断。对MOV指令和POP指令,如果处理对象是段寄存器时,那么本条指令执行完后,接着再执行一条指令才响应中断。对开中断指令STI和中断返回指令IRET,也是要在STI或IRET指令执行完后,再执行一条指令才响应中断。以上是几种特殊情况,对一般指令,只要一条指令的执行周期结束即可响应中断。  

  (1) 保存寄存器内容
  (2) 如允许中断嵌套,则开中断(STI)
  (3) 处理中断
  (4) 关中断 (CLI)
  (5) 送中断结束命令(EOI)给中断命令寄存器
  (6) 恢复寄存器内容
  (7) 返回被中断的程序(IRET)

  进入中断处理程序时,IF和TF已经被清除,这样在执行中断处理程序的过程中,将不再响应其它外设的中断请求,如果这个中断处理程序允许其它设备中断,则需用STI指令把IF位置1。中断结束命令(EOI)在程序的什么地方发出,这要看程序员是否要求在其处理过程中允许同级或低级中断。一般设备希望一次中断的处理过程最好是完整的,所以只在中断处理结束之前发出EOI命令。

  处理中断部分是中断处理程序的主体部分,它要完成的任务是各种各样的,这与实际应用有关。如果它的任务是处理某种错误的,一般要求显示输出一系列出错信息。如果它是对一个I/O设备进行服务的,就按其端口地址接收或发送一个单位(字节或字)的数据。要注意的是CPU产生一次中断,I/O设备只完成一个字节(或字)的输入/输出,所以中断处理程序所用的指针变量或数据变量一般应设置存储单元来保存。