计算机经常会遇到异常,会产生中断,发出中断请求。中断分为内中断和外中断。下面主要介绍的是内中断。
内中断,cpu什么时候会发出中断信号呢?一般有一下四种情况:
·除法指令
·单步执行
·int 0指令
·int n指令
产生中断信号的情况又被称为中断源。cpu接收到中断信号以后,要根据中断信号来确定中断情况。所以,中断信息里面应该包括中断的来源以及中断的情况。因此,CPU将定义一个变量来存储辨别中断信息,称为中断字节码(8位变量)可以用中断字节码表示256种情况。
每种中断情况都对应一种中断处理程序,但是CPU又如何确定相应中断处理程序在内存中的地址呢?如何确定相应中断处理程序的入口地址?so,中断向量应运而生。中断向量就是中断处理程序的入口地址。不同的中断情况对应不同的中断处理程序,又对应不同的中断向量,为了高效的处理中断,我们又定义了中断向量表,顾名思义,中断向量表用来存储中断向量,就是中断处理程序的入口地址。一条中断向量有占用多少内存地址呢?中断向量用来存储中断处理程序的入口地址,包括段地址和偏移地址,所以占用两个字的存储单元,高地址字段用来存储段地址,低地址字段用来存储偏移地址。
CPU知道了相应中断处理程序的入口地址后,计算机处理中断,中断过程。用中断字节码找到中断向量,来设置CS和IP,这个过程由计算机硬件来完成,这个过程叫做中断过程。 以8086CPU为例,在接收到中断信息后,要执行的操作:
1.(从中断信息中)找到中断字节码
2.标志寄存器的值入堆栈
3.设置标志寄存器的第8位TF和第9位IF值为0 4.CS 值入栈 5.IP值入栈 6.从内存地址为 终端类型码*4 和 中断类型码*4 2的两个字单元读取中断处理程序的入口地址,设置CS IP 中断处理程序 由于cpu随时都有可能检测到中断信息,也就是说cpu随时都要执行中断处理程序,所以,中断处理程序必须一致存储在内存某段空间中。 中断处理程序的步骤: 1.保存用到的寄存器 2.处理中断 3.恢复用到的寄存器 4.用iret指令返回
cpu执行完中断处理程序以后,必须返回到原来的地址继续执行后面的内容,所以,在执行中断处理程序之前必须记录下原来执行指令的地址,便于中断处理完以后返回。