中断处理过程(含8086)

中断处理过程

中断的相关定义

  • 中断:在CPU执行程序的过程中,出现了某种紧急情况或异常的事件时,暂停正在执行的程序,转去处理该事件,并在处理完该事件之后返回断点处(指返回主程序时执行的第一条指令的地址)继续执行刚刚被暂停的程序。
  • 中断源:任何引发中断的事件。
    8086将其分为两类:
    1)硬件中断(即外中断)
    (1)非屏蔽中断(NMI):整个系统只有一个。
    (2)可屏蔽中断(INTR)
    2)软件中断(内中断)
    (1)除法错中断(中断类型号:0)
    (2)溢出中断(中断类型号:4)
    (3)单步中断(中断类型号:1)
    (4)断点中断(中断类型号:3)
    (5)中断指令INT n中断(中断类型号:n)
    注意: 单步中断和断点中断用来调试程序。
  • 中断优先级:8086的中断优先级排序:内中断(除单步中断),NMI,INTR,单步中断。
  • 中断向量表:是存放中断向量(中断服务程序的入口地址)的一个特定的内存区域。这里有必要注意一下,8086可以处理256种中断。

一般的中断处理步骤如下:

  • 中断请求:中断源向CPU发出中断请求
  • 中断响应
  • 保护断点和现场:以便在中断服务程序执行后正确的返回主程序。
  • 中断处理
  • 中断返回

8086中断处理步骤如下:

  • 内部中断以及NMI中断不需要从数据总线上读取中断类型码,而INTR需要,而且该中断类型码由发出中断请求的接口电路提供。
  • CPU得到中断类型码后将标志寄存器内容压入栈中(PUSHF),保护中断时标志位的状态。
  • 令单步标志TF =0(禁止CPU以单步方式执行中断服务程序)。
  • 令中断允许标志IF=0(即:在响应该中断后不再响应别的中断。由于CPU在中断响应时,自动将IF置为0,如果要允许中断嵌套,必须在后面的中断服务程序中用开中断指令STI重新将IF置为1)
  • 将当前CS:IP入栈,即保护断点和现场。
  • 根据中断类型码在中断向量表中找到相应中断服务程序的入口地址,将其装入CS:IP,转向中断服务程序。
  • 为了保证NMI中弄断有着实质性的优先级,所以在执行中断服务之前需要再次检查是否有NMI中断。
  • 执行中断服务程序。
  • IRET指令实现原CS:IP,标志寄存器的出栈,即恢复断点并返回到主程序。

你可能感兴趣的:(汇编)