中断是CPU处理外部突发事件的一个重要技术。
它是CPU在运行过程中对外部事件发出的中断请求及时地进行处理,处理完成后又立即返回断点,继续进行CPU原来的工作。
中断源:发出中断请求的来源
中断:软件中断(并不是真正的中断),硬件中断
硬件中断又分为外部中断(可屏蔽)和内部中断(不可屏蔽)
内部中断是指因硬件出错(如突然掉电、奇偶校验错误)或运算出错(除数为0,运算溢出,单步中断)所引起的中断。
CPU为了处理并发的中断请求,规定了中断的优先权,中断优先权由高到低的顺序:
- 除法出错,溢出中断,软件中断
- 不可屏蔽中断
- 可屏蔽中断
- 单步中断
中断处理程序
必须在中断信息和其他处理程序的入口地址之间建立某种联系,使得CPU根据中断信息可以找到执行的处理程序。
中断信息中包含有标识中断源的类型码。
作用:用来定位中断处理程序
8086中断类型码为字节,要得到中断处理程序的段地址和偏移地址,要引入“中断向量表”(索引)。
中断向量表在内部存放,其中有256个中断源所对应的中断处理程序入口。
对于8086PC机中,中断向量表指定存放的内存地址处(0000:0000~0000:03FF)
中断过程
8086CPU中断过程
- (从中断信息处)取得中断类型码
- 标志寄存器的值入栈(保护标志位)
- 设置标志寄存器的第八位TF和第九位IF的值为0
- CS内容入栈,IP内容入栈
- 从内存地址的中断类型码*4和中断类型码*4+2的两个字单元中读取中断处理程序的入口地址设置IP和CS
简介流程
- 取得中断类型码
- pushf
- TF=0,IF=0
- push CS ,push IP
- (IP)=(N*4),(CS)=(N*4+2)
中断处理程序
中断处理程序必须一直存储在内存某段空间中。
中断处理程序的入口地址(中断向量)必须存储在对应的中断向量表表项中。
步骤:
- 保存用到的寄存器
- 处理中断
- 恢复用到的寄存器
- 用iret指令返回
iret指令:(和硬件自动完成的中断程序配合使用)
功能:pop IP pop CS popf
除法错误中断的处理
对0号中断(除法溢出中断)的处理。
单步中断
CPU执行完一条指令后,如果检测到标志寄存器的TF位为1,则产生单步中断,中断类型码为1。
CPU提供单步中断功能的原因就是为单步跟踪的执行过程提供了实现机制。
响应中断的特殊情况
即使检测到中断信号,CPU也不会响应
如:进行栈操作。(ss和sp联合使用,中间不加指令)