目录
先验知识回顾
控制寄存器回顾
PSW是Program Status Word的缩写,即程序状态字(也叫程序状态寄存器)
CS:段代码寄存器。
1、8086中断类型
8086用8位二进制码表示一个中断类型,共有256个中断,可分为两大类:
中断结构:
1、外部可屏蔽中断
由INTR引入,受到标志寄存器中的中断允许标志位IF控制。
IF=0:CPU不响应INTR中断;
IF=1:CPU响应INTR中断;
INTR中断的类型码范围:8~255;
2、外部不可屏蔽中断
由NMI引入,不受到中断允许寄存器标志位IF控制。
NMI信号有效,且8086现行指令执行结束,且没有DMA请求:响应NMI中断
NMI中断类型码:2
3、除法错中断
在执行DIV或者IDIV指令时,除数为0或商超过寄存器能够表达的范围(商溢出):执行中断。
中断类型号:0.
(我寻思着,在做除法操作的时候就可以避免这种现象的存在,没有必要搞个中断啊。。。)
4、单步中断
受到标志位寄存器中的陷阱标志位TF控制。
TF=1:CPU每执行完一条指令就引起一个内部中断。
TF=0:无
中断类型号:0
用途:用于实现但不操作,是一种强有力的调试手段。(联系debug中相关操作)
5、断点中断
由INT3指令产生的内部中断。
在程序调试过程中,需要跟踪程序走向,了解程序执行过程中的中间结果时,可以用INT3指令临时替代原有的指令,称为设置断点。
中断类型号:3
6、溢出中断
受到标志寄存器中的溢出标志位OF控制。
若上条指令执行结果使OF=1,则产生中断。
中断类型号:4
7、软中断
由INTn指令产生。
中断类型码:n
2、8086中断向量表
两个知识点:
中断向量:中断指针,是中断服务程序的入口地址
中断向量表:中断类型号与对应的中断服务函数入口地址的换算表。
8086的中断向量表如下:
3、8086中断响应
1、外部可屏蔽中断响应
1、等待当前指令结束,然后进入中断响应周期。
2、CPU获取中断类型号
3、当前的PSW、CS、IP的内容依次压入栈中。(保存了断点的状态和断点地址,以便返回时恢复)
4、清除PSW中的IF位和TF位。(IF=0意味着关中断,这里不包含中断嵌套)
5、把中断服务函数的入口地址置入IP和CS
6、完成响应,进入中断服务函数
2、外部不可屏蔽中断响应
中断请求在NMI端加入。
等待当前指令执行结束.如果同时出现非屏蔽和可屏蔽中断请求,CPU优先响应非可屏蔽。
中断类型号由硬件决定,不需要从外部获取。其他操作与可屏蔽中断相同
3、内部中断响应
内部中断的响应操作的共同特点:
1、中断类型号来源于:指令码、CPU硬件,不需要从外部获取
2、没有INTA’信号的响应周期
3、不受到IF位的控制,但单步中断受TF位控制
4、除单步中断之外,其他内部中断都比外部中断优先响应
5、同样执行可屏蔽中断的3、4、5操作
特别说明:
中断响应时应清除TF标志位意味着什么?
TF=1,没执行完一条指令都引起一次单步中断。如果不清除,将不停地引起中断,每次中断都执行同一条指令而不能反悔。
所以,中断服务函数期间TF=0,等到IRET指令恢复PSW值是,才恢复TF位。
4、8086中断返回
无论内部外部中断,中断返回都是由中断服务函数的末尾设置IRET指令实现的。
IRET指令的操作是:恢复断点处的地址和PSW内容:依次从堆栈中弹出保存的IP、CS、PSW值,使被中断的程序继续执行
参考书籍:
《微机原理与接口技术》