中断:CPU不再继续依序执行指令,而是转去处理某一从CPU外部或内部产生的特殊信息
从汇编角度理解:
内中断:对于8086CPU来说,以下发生在CPU内部的的情况会产生内中断:
除法错误;单步执行;执行into指令;执行int指令。其相应的中断类型码为0,1,4,n(n为字节型立即数)
中断向量表:8086CPU利用此表中的中断类型码来找到相应的中断处理程序的入口地址;中断向量表必须存入内存中0000:0000~0000:03FF的1024个单元中,CPU直接从这个地址开始读取中断向量表;中断向量表的一个表项存放一个中断处理程序的入口地址,而把中断类型码按顺序从0开始排序,所以并不需要多余的空间来记录中断类型码,即一个表项需要两个字(段+偏移);两个字的一个表项说明1KB中最多只能放256个中断处理程序。
中断过程:
1、获取中断类型码N
2、pushf(标志寄存器的值入栈)
3、TF = 0,IF = 0(当TF==1时,陷阱标志被置位,CPU会进入单步模式,即每执行一次便中断一次;当IF==1时,CPU是允许访问外部可屏蔽中断的请求的)
4、push CS(保护CPU现场)
5、push IP(同上)
6、(IP) = (N*4),(CS) = (N*4+2)(将中断程序入口地址读入)
(实地址模式)自制中断处理程序:
1、编写一个程序
2、将程序的入口写入内存的制定地址,并记录
3、将该程序的入口地址写入中断向量表中即可
外中断:CPU对外部信息的处理,多为I/O中断
从操作系统角度:
通常在操作系统中,中断主要用于I/O设备的控制,为每一类设备设置一个I/O进程的设备处理方式时,其中断处理程序的处理过程大致为以下几步:
1、唤醒被阻塞的驱动进程
2、保护被中断进程的CPU环境(同编程角度不太一样,这里的保护不只是单纯的记录中断前程序的运行位置,而且还要记录处理机状态字、程序计数器、所有CPU寄存器)
3、转入相应的设备处理程序
4、中断处理
5、恢复被中断进程的现场
从硬件角度:
CPU响应中断的时候,需要有一个中断控制器,在IBM PC/AT 80x86兼容机上使用两片相连的8259A可编程中断控制芯片来组成一个可以提供15个独立中断控制功能,在内存当然也需要一个中断向量表,当然最多可联到九级芯片
详细的中断控制器介绍:http://blog.csdn.net/ustc_dylan/article/details/4106436