有关中断程序分类情况的讨论

计算机科学里面的中断,是指一个程序。

中断的意思是指,CPU不再接着(刚执行完的指令)向下执行,而是转去处理这个特殊信息。

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

我们知道,中断信息INT n中包含有标识中断源的类型码n。根据CPU的设计,中断类型码的作用就是用来定位中断处理程序。

图一

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

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

CPU进入中断程序的步骤:

用中断类型码找到中断向量,并用它设置CS和IP,这个工作是由CPU的硬件自动完成的。

CPU 硬件完成这个工作的过程被称为中断过程。

在使用 call 指令调用子程序时有同样的问题(不包含中断类型码),子程序执行后还要返回到原来的执行点继续执行,所以,call 指令先保存当前 CS 的 IP值,然后再设置CS和IP。

Call指令导致的中断属于内中断,因为中断信息由指令提供。8086CPU的内中断过程:

(1)(从中断信息中)取得中断类型码;

(2)标志寄存器的值入栈( 因为在中断过程中要改变标志寄存器的值,所以先将其保存在栈中。);

(3)设置标志寄存器的第8位TF 和第9位IF的值为0;

(4)CS的内容入栈;

(5)IP的内容入栈;

(6)从内存地址为中断类型码*4 和中断类型码 *4+2 的两个字单元中读取中断处理程序的入口地址设置IP和CS。

图二

在中断过程中还要做的一个工作就是设置标志寄存器的TF、IF位。

由于CPU随时都可能检测到中断信息,也就是说,CPU 随时都可能执行中断处理程序,所以中断处理程序必须一直存储在内存某段空间之中。

而中断处理程序的入口地址,即中断向量,必须存储在对应的中断向量表表项中。

Debug 下面又一个单步执行T命令。在使用 T 命令执行指令时,Debug 将TF设置为 1,使得CPU在工作于单步中断方式下,则在CPU执行完这条指令后就引发单步中断,执行单步中断的中断处理程序,所有寄存器中的内容被显示在屏幕上,并且等待输入命令。单步执行属于内中断。

计算机通过BIOS和DOS向用户提供中断例程以供调用。

BIOS和DOS提供的中断例程是如何安装到内存中的呢?

(1) 开机后,CPU 一加电,初始化(CS)=0FFFFH,(IP)=0,自动从FFFF:0单元开始执行程序。FFFF:0处有一条转跳指令,CPU执行该指令后,转去执行BIOS中的硬件系统检测和初始化程序。

(2)初始化程序将建立BIOS 所支持的中断向量,即将BIOS提供的中断例程的入口地址登记在中断向量表中。

(3) 硬件系统检测和初始化完成后,调用int 19h进行操作系统的引导。从此将计算机交由操作系统控制。

(4)DOS 启动后,除完成其它工作外,还将它所提供的中断例程装入内存,并建立相应的中断向量。

任何程序的运行均离不开一定的硬件环境和软件环境。 基本硬件环境包括CPU、存储器、I/O设备(键盘、磁盘、打印机、显示卡等)。从原理上讲,使用IN/OUT指令可以控制任何I/O设备。以打印机为例,使用IN指令可以读入打印机的状态(有/无纸、能否接收新的数据等)、使用OUT指令把数据送给打印机、给打印机发控制命令(移动打印头、某些打印针击打)。一个简单的I/O设备使用要求,需要一系列IN/OUT等控制指令,可以把一些基本使用要求编写为子程序,供调用。事实上,BIOS中,以中断处理程序的形式提供了微机中基本I/O设备的控制程序,称为"BIOS中断",应用程序可以用"INT n"指令调用这些程序。

  程序运行的主要软件环境是操作系统。操作系统为程序运行提供基本的服务,如,程序的装入、结束,内存的分配,文件管理等。以DOS操作系统为例,它也以中断处理程序的形式提供这些服务,称为"DOS中断", 应用程序也用"INT 21H"指令调用这些服务。 MS_DOS的DOS中断是由IO.SYS、MSDOS.SYS两个文件提供的中断处理程序。(PC_DOS:IBMBIO.COM、IBMDOS.COM)。

  PC系列机有256种中断类型,8086CPU使用其中5个(0号除数为0中断、1号单步中断、2号NMI中断、3号断点中断、4号溢出中断),80286及以上系统中,通过中断控制器8259使用的硬件中断为16个。其余中断类型为BIOS中断和DOS中断,它们称为"软件中断"。

IBM PC/XT 机中的256级中断安排

BIOS提供的中断基本和输入输出设备有关。

比如,显示器I/O中断功能调用:

图三

 DOS的绝大部分功能均以INT 21H中断处理程序提供。不同DOS版本一般均有几十个INT 21H功能。这些功能有文件和磁盘管理、字符设备管理、时钟管理、内存管理、网络管理等。

DOS功能表

DOS提供的中断举例。

图四

在PC 系统中,按照是否响应中断源一共有两类:

1、可屏蔽中断

2、不可屏蔽中断

可屏蔽中断是CPU 可以不响应的外中断。CPU 是否响应可屏蔽中断,要看标志寄存器的IF 位的设置。

当CPU 检测到可屏蔽中断信息时:

如果IF=1,则CPU 在执行完当前指令后响应中断,引发中断过程;

如果IF=0,则不响应可屏蔽中断。

不可屏蔽中断是CPU 必须响应的外中断。当CPU 检测到不可屏蔽中断信息时,则在执行完当前指令后,立即响应,引发中断过程。

对于8086CPU 不可屏蔽中断的中断类型码固定为2。所以中断过程中,不需要取中断类型码。

可屏蔽中断所引发的中断过程 ,除在第1步的实现上有所不同外,基本上和内中断的中断过程相同。

几乎所有由外设引发的外中断,都是可屏蔽中断。当外设有需要处理的事件(比如说键盘输入)发生时,相关芯片向CPU 发出可屏蔽中断信息。

不可屏蔽中断是在系统中有必须处理的紧急情况发生时用来通知CPU 的中断信息。不可屏蔽中断请求经由专门的CPU针脚NMI,通知CPU发生了灾难性事件,如电源掉电、总线奇偶位出错等。内部不可屏蔽中断请求是CPU内部自发产生的,如存储器读写出错、溢出中断、除法出错中断等,除此之外的内中断基本都是可屏蔽中断。


中断按照中断类型码的来源分为内中断和外中断。

外中断信息来自于CPU外部,中断类型码是通过数据总线送入CPU 的;

而内中断的中断类型码是在CPU内部产生的。

图三属于外中断,图四的DOS功能调用属于内中断。外中断更为容易理解的例子:

图五

键盘输入的处理过程:

(1)键盘产生扫描码;

(2)扫描码送入60h 端口;in al,60h

(3)引发9 号中断;int 9 中断直接由指令in al,60h触发,不需要在程序中出现。int 9 中断例程除了接收扫描码外,还要产生和扫描码对应的字符码,以便在屏幕显示。

注意,int 9 中断例程属于BIOS中断,与DOS的9号功能调用不是一回事:

MOV AH,9

MOV DX,OFFSET MESG ;取MESG的偏移地址

INT 21H (这是显示一个字符串)

(4)CPU执行int 9中断例程处理键盘输入。

从上面分析可以看到,外中断是由于CPU外部有按键的动作发生,才触发了9号中断。

图六

本文总结如下:

1:CPU处理中断程序,必须先保护原地址再进入中断程序。

2:按中断提供方分类,分为BIOS中断和DOS中断。

3:中断按是否允许执行分为可屏蔽与不可屏蔽中断。

4:中断按中断信息的来源分为内中断与外中断。

举报
评论 0