一,概述
1,中断与中断源
所谓“中断”是指在CPU正常运行程序时,由于内、外部事件引起CPU暂时中止正在运行的程序,转而去执行请求CPU暂时中止的内、外部事件的服务程序,待该服务程序处理完毕后又返回到被中止的程序。
所谓“中断源”是指能够向CPU发出中断请求的中断来源。
2,中断响应与中断处理
- CPU响应中断的条件
- 设置中断请求触发器
- 设置中断屏蔽触发器
- 设置中断允许触发器的状态
- CPU在现行指令结束后响应中断
中断处理过程:
-
1,关中断
CPU在响应中断后,发出中断响应信号INTA,同时内部自动地关中断,以禁止接受其他的中断请求。
-
2,保护断点
把断点处的标志寄存器FR的内容、段寄存器CS值和指令指针IP值依次压入堆栈保存,以便中断处理完后能正确地返回到主程序的断点地址,接着执行被中断的程序。
-
3,识别中断源
CPU要对中断请求进行处理,必须要找到相应中断服务程序(处理中断的程序)的入口地址,这就是中断源的识别。
-
4,保护现场
为了不使中断服务程序的运行影响主程序的状态,必须把断点处有关寄存器(指在中断服务程序中要使用的寄存器)内容压入堆栈保护。
-
5,执行中断服务程序
-
6,恢复现场
-
7,开中断与返回
开放中断在返回之前,目的是返回主程序后能继续响应新的中断请求。从中断返回到断点处,有一条专门的中断返回指令,该指令的隐操作是将堆栈栈顶处连续的三个字依次弹出给指令指针IP、段寄存器CS以及标志寄存器FR。
二,lntel8086的中断系统(重点)
1,外部中断
- 1、可屏蔽中断INTR
接收来自普通外设的中断请求信号,高电平有效如果IF=1,CPU响应该中断请求;如果IF=0,CPU屏蔽该中断请求 - 2、不可屏蔽中断NMI
通知CPU发生了“灾难性”的事件,如电源掉电等,上升沿触发,CPU必须响应该中断请求。中断类型码为2。
2,内部中断
内部中断是通过软件调用的不可屏蔽中断
- 1、溢出中断
OF=1产生的中断,中断类型码为4 - 2、除法出错中断
DIV、IDIV运算时超出商的范围,中断类型码为0 - 3、INTn中断
中断指令,中断类型码为n - 4、断点中断
断点中断,类型码为3 - 5、单步中断
TF=1产生的中断,类型码为1
内部中断的注意事项:
- (1)类型码固定指定。
- (2)不执行中断响应周期。
- (3)除单步中断外,无法禁止,都比外部中断优先级高。
3,中断向量表
- 1,中断向量
- 中断服务程序入口地址,包含段基址和偏移地址。
- 一个中断向量占用4个字节的存储空间,较高地址的两个字节存放段基值;较低地址的两个字节存放偏移地址。
- 这4个单元的最低地址称为向量地址。
- 2,中断向量表
- 又称中断指针表,是存放中断向量的表格。
- 位于存储器的最低端(0000H: 0000H~0000H:03FFH),共1024个字节,一共可以存放256个中断向量。
- 向量地址=中断类型码×4。
对于内部中断和NMI中断:
- 中断类型码固定,因此不需要向CPU提供中断类型码。
对于INTR中断:
- 没有固定的中断类型码,因此当CPU响应该中断时,需要执行中断响应周期,申请该中断的外设在中断响应周期内将中断类型码送给CPU。