目录
引言
任何一个通用的CPU,比如8086,都具备一种能力,可以在执行完当前正在执行的指令之后,检测到从CPU外部发送过来的或内部产生的一种特殊信息,并且可以立即对所接收到的信息进行处理。这种特殊的信息,我们可以称其为:中断信息。中断的意思是指,CPU不再接着(刚执行完的指令)向下执行,而是转去处理这个特殊信息。
“中断信息“是要求CPU马上进行某种处理,并向所要进行的该种处理提供了必备的参数的通知信息。
中断信息可以来自CPU的内部和外部。
12.1 内中断的产生
对于8086CPU,当CPU内部有下面的情况发生的时候, 将产生相应的中断信息:
(1)除法错误,比如,执行div指令产生的除法溢出;
(2)单步执行;
(3)执行into指令;
(4)执行int指令。
不同的信息需要进行不同的处理。
CPU首先要知道所接接收的中断信息的来源。所以中断信息中必须包含识别来源的编码。8086CPU用称为中断类型码的数据来标识中断信息的来源。中断类型码为一个字节型数据,可以表示256种中断信息的来源。
我们将产生中断信息的事件,即中断信息的来源,简称为中断源。
上述的四种中断源,在8086CPU中的中断类型码如下:
(1)除法错误:0
(2)单步执行:1
(3)执行into指令:4
(4)执行int指令,该指令格式为int n,指令中的n为字节型立即数,是提供给CPU的中断类型码。
12.2 中断处理程序
用来处理中断信息的程序被称为中断处理程序。一般来说需要对不同的中断信息编写不同的处理程序。
CPU在收到中断信息后,应该转去执行该中断信息的处理程序。若要8086CPU执行某处的程序,就要将CS:IP指向它的入口(即程序第一条指令的地址)。
12.3 中断向量表
CPU用8位的中断类型码通过中断向量表找到相应的中断处理程序的入口地址。
中断向量,就是中断处理程序的入口地址。中断向量表,就是中断处理程序入口地址的列表。
中断向量表在内存中保存,其中存放这256个中断源所对应的中断处理程序的入口。
CPU只要知道了中断类型码,就可以将中断类型码作为中断向量表的表项号,定位相应的表项,从而得到中断处理程序的入口地址。
中断向量表在内存中存放,对于8086PC机,中断向量表指定放在内存地址0处。从内存0000:0000到0000:03FF的1024个单元中存放这中断向量表。一个表项存放一个中断向量,也就是一个中断处理程序的入口地址,对于8086CPU,这个入口地址包括段地址和偏移地址,所以一个表项占两个字,高地址字存放段地址,低地址字存放偏移地址。
检测点12.1
12.4 中断过程
用中断类型码找到中断向量,并用它设置CS和IP,这个工作是由CPU的硬件自动完成的。CPU硬件完成这个工作的过程被称为中断过程。
CPU收到中断信息后,要对中断信息进行处理,首先将引发中断过程。硬件在完成中断过程后,CS:IP将指向中断处理程序的入口,CPU开始执行中断处理程序。
CPU在执行完中断处理程序后,应该返回原来的执行点继续执行下面的指令。所以在中断过程中,在设置CS:IP之前,还要将原来的CS和IP值保存起来。
下面是8086CPU在收到中断信息后,所引发的中断过程:
(1)(从中断信息中)取得中断类型码;
(2)标志寄存器的值入栈(因为在中断过程中要改变标志寄存器的值,所以先将其保存在栈中ÿ