引言

中断:外部终端和内部终端

1.中断处理程序

1.CPU的设计者必须在中断信息和其处理程序的入口地址之间建立某种联系,使得COU根据中断信息可以找到要执行的处理程序

2.中断信息包含有标志中断源的类型码。根据CPU的设计,中断类型码的作用就是用来定位中断处理程序。

1
比如CPU根据中断类型码4,就可以找到4号的处理程序

2.中断向量表

1.CPU中8位的中断类型码,通过中断向量表找到相应的中断处理程序的入口地址

1
2
起始就是一个索引
一个类型码有一个对应的地址

2.中断向量表在内存中存放,对于8086CPU机,中断向量表指定放在内存地址0处

从内存0000:0000到0000:03ff的1024个内存单元中存放着中断向量表

1
2
3
为什么是1024?
1.一个地址是段地址和偏移地址组成【都是16位,也就是2个字节】
所以一个地址就需要4个字节,一共是8位的中断类型码,也就是有256个中断类型码,所以需要1024个内存单元

3.中断过程

1.8086CPU的中断过程

1
2
3
4
5
6
1.(从中断信息中)取得中断类型码
2.标志寄存器的值入栈【PSW】--用于保护标志位
3.设置标志寄存器的第8位TF和第9位IF的值为0
4.CS的值入栈
5.IP的值入栈
6.从内存地址为中断类型码*4和中断类型码*4+2的两个字单元中读取处理程序的入口地址,设置IP和CS

简单点

1
2
3
4
5
6
7
1.取得中断类型码N
2.pushf
3.TF = 0,IF = 0
4.push CS
5.push IP
6.(IP)=(N*4),(CS)=(N*4+2)
取地址的时候,首先取的是偏移地址,在是段地址

中断处理程序的步骤

1
2
3
4
1.保存用到的寄存器
2.处理中断
3.恢复用到的寄存器
4.用iret指令返回

4.iret指令的功能

1.用汇编语法解释

1
2
3
4
1.pop IP
2.pop CS
3.popf
恢复之前保护的

2.iret通常和硬件自动完成的中断过程配合使用

5.除法错误中断的处理

编写一个程序,让发生除法错误中断的时候,在屏幕上输出xxx

分析

1
2
3
4
5
6
1.当发生除法溢出的时候,会参数0号中断信息,从而引发中断过程
CPU
取得中断类型:0
标志寄存器入栈,TF和IF设置为0
CS,IP入栈
(IP)=(0*4),(CS)=(0*4+2) //找到中断类型所对应的地址

6.有一个编程

1
看12.10play

7.单步中断

CPU在执行完一条命令后,如果检测到编制寄存器的TF位1,则残生单步中断

1
也就是说TF=1是产生中断的标志

步骤

1
2
3
4
1.取得中断类型码1
2.标志寄存器入栈,TF,IF设置为0
3.CS,IP入栈
4.(IP)=(1*4),(CS)=(1*4+2)

image-20230416214427516

8.响应中断的特殊情况

一般情况下,CPU在执行当前指令后,如果检测到中断信息,就响应中断,引发中断过程

可是在有些情况下,CPU在执行当前指令后,即便是发生中断,也不会响应

因为某些过程需要连续完成,不能卡在中间,比如ss:sp的设置就不能中断,在完成ss的设置后,即使发送中断CPU也不会中断,sp的设置因该连续完成