CPU中断

1.1 什么是中断?

中断是CPU处理随机事件和外部请求的主要手段,也是CPU与外设交换信息的重要方式
CPU都具备的能力,可以在执行完当前正在执行的指令后,检测从CPU外部发送或内部产生的中断信息(中断源)。
中断是一个过程,是指,CPU不再接着刚执行完的指令向下执行,而是转去处理中断信息。

1.2 中断源分类

在8086/8088CPU中,中断源分为两类,一类是硬件中断;一类是软件中断。
二者区别:硬件中断来自CPU外部,软件中断来自CPU内部。

1.2.1 软件中断(内部中断)

对于8086CPU。内部发生如下情况将产生中断:

  • 除法错误
  • 单步执行
  • 执行into指令
  • 执行int指令

    那么CPU如何能识别中断为何种类型?在8086CPU中用中断类型码中的数据来标识中断信息的来源。
    上述四种中断对应的中断类型码为:

  • 除法错误:0

  • 单步错误:1
  • 执行into指令:4
  • 执行int指令,该指令格式为int n,其中n为字节型,作为中断类型码

    中断类型码大小为一个字节(8bit),取值范围为:0~255

1.2.2 硬件中断(外部中断)

根据外部中断源是否受IF(Interrupt Flog)的影响,将外部中断分为不可屏蔽性中断MNI(Non Maskable Interrupt)和可屏蔽性中断INTR(Interrupt)两种。

1.3 中断向量表

1、中断处理过程:
CPU收到中断信息时,需要根据不同的中断类型(根据中断类型码标识)进行不同的处理,而用来处理中断信息的程序被称为中断处理程序
中断源->中断类型码->中断处理程序,所以中断类型码就是用来定位中断处理程序

中断向量:
CPU若想执行一段程序时必须有一个入口地址,同样,若执行中断处理程序也需要入口地址。这里,中断处理程序的入口地址就是中断向量。顾名思义,中断向量表就是中断向量的列表。

2、中断处理过程可完善成如下过程:
中断源->中断类型码->中断向量表->中断处理程序

3、进一步
当满足了中断的条件后,CPU就会响应中断,转入中断程序处理:

  • 关闭中断信号接收器
  • 保存现场(context)
  • 给出中断入口,转入相应的中断服务程序
  • 处理完成,返回并恢复现场(context)
  • 开启中断信号接收器

    4、中断过程详解

  • (从中断信息中)取得中断类型码

  • 标志寄存器的值入栈(因为在中断过程中要改变标志寄存器的值,所以先保存在栈中)
  • 设置标志寄存器的第8位TF和第9位IF的值为0
  • CS的内容入栈
  • IP的内容入栈
  • 从内存地址为中断类型码 4和中断类型码 4+2的两个字单元中读取中断处理程序的入口地址设置IP和CS

    可是,CPU又是如何找到中断向量表的呢? 对于8086CPU来说,中断向量表指定放在内存地址0处。并且规定了,从这里读取中断向量表。

猜你喜欢

转载自www.cnblogs.com/yaofan/p/9760276.html