1、硬件中断分外部中断和内部中断
外部中断计算机外设发出的中断请求----------------可以屏蔽中断
内部中断硬件出错或者运算出错引起的中断-------不可以屏蔽的中断
2、软件中断
软件中断其实并不是真正的中断,它们只是可被调用执行的一般程序以及DOS系统功能调用(INT21)等都是软件中断
CPU的设计着必须在中断信息和处理程序的入口建立某种联系,使得CPU根据中断信息可以找到要执行的处理程序
已知,中断信息中包含有标识中断源的类型码。根据CPU的设计,中断类型码的作用就是用来定位中断处理程序
CPU中利用8位的中断类型码通过中断向量表找到相应的中断处理程序的入口地址
中断向量表就相当于一个索引
4 段地址:偏移地址 ------------大概就是长这个样子
8位的中断类型码对应256种中断源
中断向量表在内存中存放,并且指定存放在内存0开始的地方,从内存0000:0000到0000:03FF的1024个单元中存放着中断向量表。
为什么是1024个字节?
256个入口一个就有一个段地址和偏移地址 16位的CPU 就是 256*4 = 1024
内存中有一段安全的内存0:200 - 0:300
因为256个中断我们不是全部都用上的
中断过程
这里乘4是因为每个中断码都是4个字节
CS IP入栈类似于call调用子程序
iret通常和硬件自动完成中断过程的配合使用。
在中断过程中,寄存器入栈顺序是标志寄存器、CS\IP
iret的出栈顺序是IP CS 标志寄存器
刚好和其对应实现了执行中断处理前的CPU现场恢复标志寄存器和CS IP的工作
iret指令执行后,CPU回到CPU中断处理程序前的执行点继续执行程序
除法中断0号中断
do0放在哪了?
因为除法溢出随时可能发生,CPU随时可能将CS:IP指向do0的入口,执行程序
do0应该放在开始的那块内存最方便
//1、如果是向操作系统申请内存太麻烦
在内存0:200处安装do0的代码,将0号中断处理程序的入口地址设置为0:200