13.1 int指令
int指令的使用格式:int n
,n
表示中断类型码,它的作用是引发中断,它的中断流程如下所示:
- 取中断类型码n
- 标志寄存器入栈
- 设置IF=0、TF=0
- 压入CS、IP
- 设置IP = (4 * n),CS = (4 * n + 2) [表示取对应地址上的内容]
从而转去执行n号中断处理程序
13.2 编写供应用程序调用的中断例程
编写中断例程主要分为三步:
- 编写实现 要求的程序;
- 安装程序,将其安装在0:200(也可以放在其他位置,但是要考虑不被其他程序覆盖)
- 设置中断向量表,将程序的入口地址保存在 中断类型码 所在的表项,使我们编写的程序变为中断7ch的中断例程。
比如13.2的问题一:
- 编写一个 求平方数 的程序
- 安装程序,将其安装在0:200内
- 设置中断向量表,这里题目要求设置在 7ch处,所以我们应该在中断向量表的7ch处设置程序的入口地址。
13.3 对int、ret和栈的深入理解
这一步简单来说就是执行int n
指令后,对CS
和IP
的处理流程:
- 将标志寄存器压入栈中
- 将IF、TF设置为0
- 按顺序将CS、IP压入栈中
当进入中断例程时,SP指向的位置即是IP
所在位置,SP + 2 指向的位置即是CS
所在的位置。
13.4 BIOS和DOS所提供的中断例程
系统版的ROM中存放着一套程序,称为BIOS(基本输入输出系统),BIOS主要包含以下几部分内容:
- 硬件系统的检测和初始化程序
- 外部中断和内部中断的中断例程
- 用于对硬件设备进行I/O操作的中断例程
- 其他和硬件系统相关的中断例程
除此之外操作系统DOS也会提供了一些中断例程,这些中断例程就是操作系统向程序员提供的编程资源。