汇编——第十二章 内中断

第十二章 内中断

12.1 内中断的产生

CPU内部有下面的情况发生的时候,将产生生相应的终端信息。
(1)除法错误,比如,执行div指令产生的除法溢出;
(2)单步执行;
(3)执行into指令;
(4)执行int指令。
在8086 CPU中,上述4种中断信息的来源,简称中断源,在8086CPU 中的中断类型码如下。
分别为(1)0(2)1(3)4(4)n,int 指令的格式为int n,指令中的n为字节型立即数,是提供给CPU的中断类型码。这个n最大为255。

12.2 中断处理程序

CPU在收到中断信息后,就要转去执行中断信息的处理程序,需要找到相应的CS和IP,而中断类型码可以在中断向量表中找到一个地址,这个地址存储了相应的CS和IP。

12.3 中断向量表

汇编——第十二章 内中断
汇编——第十二章 内中断

12.4 中断过程

汇编——第十二章 内中断
汇编——第十二章 内中断
汇编——第十二章 内中断

12.5 中断处理程序和iret指令

汇编——第十二章 内中断

12.6 除法错误中断的处理

除法中断是0号中断。对于下面程序,1000h除以1得到1000h,可知是8位除法,商1000h存放在al中,发生溢出,产生0号中断。
汇编——第十二章 内中断

12.7 编程处理0号中断

我们现在考虑一下改变0号中断吃力程序的功能,功能是在屏幕中间显示“overflow!”,然后返回操作系统。
汇编——第十二章 内中断
汇编——第十二章 内中断
汇编——第十二章 内中断
汇编——第十二章 内中断

12.8 安装

可以使用movsb指令,将do0的代码送入0:200处。程序如下
汇编——第十二章 内中断
汇编——第十二章 内中断

12.9 do0

首先我们看下面的程序,这个程序是不对的
汇编——第十二章 内中断
汇编——第十二章 内中断
汇编——第十二章 内中断
汇编——第十二章 内中断
最后的就是设置中断向量了。

12.10 设置中断向量

汇编——第十二章 内中断

12.11 单步中断

汇编——第十二章 内中断
汇编——第十二章 内中断

12.12 响应中断的特殊情况

汇编——第十二章 内中断
汇编——第十二章 内中断