资源预览内容
第1页 / 共72页
第2页 / 共72页
第3页 / 共72页
第4页 / 共72页
第5页 / 共72页
第6页 / 共72页
第7页 / 共72页
第8页 / 共72页
第9页 / 共72页
第10页 / 共72页
亲,该文档总共72页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
- 朱耀庭汇编语言程序设计汇编语言程序设计-朱耀庭朱耀庭 www.tup.com.cn第13章 中断及中断处理程序v 中断在计算机科学中占有十分重要的地位,是计算机科学 中最基本的概念之一。如果没有中断以及中断机制的引入 与应用,就不可能有计算机操作系统的出现,也就不可能 有今天如此高效率的计算机。使用计算机时,操作健盘、 移动鼠标之所以能够被计算机感知并且予以及时响应处理 ,这完全得益于计算机的中断处理。 v 本章将重点介绍80X86 的中断机制及中断处理程序的设计 方法,同时还将介绍请求DOS、BIOS中断服务,以及调 用DOS、BIOS内部功能子程序(即DOS、BIOS功能调用 )的方法和用途等。第二章 80x86实模式汇编的运行环境 13.6 典型的中断处理程序实例13.5 DOS和BIOS功能调用实例13.4 BIOS中断服务13.2 软件中断13.1 中断及中断相关概念13.3 DOS中断服务13.1 中断及中断相关概念 13.1.1 中断的基本概念 13.1.2 中断向量表 13.1.3 中断源及中断源的识别 13.1.4 中断的分类 13.1.5 中断处理机制 13.1.6 CPU响应中断的条件 13.1.7 中断的优先级13.1.1 中断的基本概念v 在计算机系统中,引入中断的最初目的是为了提高系统的 输入输出性能 v 随着计算机应用的发展,中断技术也应用到计算机系统的 许多领域,如:多道程序、分时系统、实时处理、程序监 视和跟踪等领域。 v 中断就是使中央处理器暂时挂起当前正在进行的工作程序 ,转向某紧急事件的服务与处理程序,并在执行完该服务 与处理程序后,再返回到曾经被其中止和挂起的原有程序 处继续完成原有工作的整个过程。13.1.2 中断向量表v 在中断发生后,中断处理程序需要对因各种原因触发的相应中断进行 处理。 v 80X86中断系统能处理256种类型的中断,同时给每种中断安排了一 个中断类型号,即0H0FFH号中断,每种类型的中断都有相应的中断 处理程序。 v 如何有效地管理和保存如此多的中断及其对应的中断处理程序呢?那 就是利用中断向量表。 v 中断向量表是一个特殊的线性表,它保存着系统所有中断服务程序的 入口地址。 v 在80X86微机系统中,该表保存的256个中断向量分别对应于256种中 断类型,每个表项占4个字节,其中两个字节存放中断处理程序的段 地址,另两个字节存放中断处理程序的段内偏移量,所以中断向量表 为1K字节,它起止于存储器中地址0000H3FFH处,如图13-1所示:13.1.2 中断向量表图13-1 中断向量表13.1.2 中断向量表v 各个中断处理程序的入口地址在中断向量表中是按中断类 型号顺序存放的,因此将中断类型号乘以4就得到对应中 断向量的地址。 v 例如,溢出中断的中断类型号为04H,则它的中断向量的 地址为04H4=10H,内存地址从10H开始的4个字节中, 10H和11H两字节中存放溢出中断程序的偏移地址,12H 和13H两字节中存放溢出中断程序的段地址,在发生溢出 中断时,将这个偏移地址和段地址分别取出送给寄存器IP 和CS,CPU即转向溢出中断处理程序。13.1.2 中断向量表表13-1 中断类型号和中断向量地址中断类型号中断向量地址中断的含义 00H1FH00000H0007FHBIOS中断向量20H3FH00080H000FFHDOS中断向量40H5FH00100H0017FH扩充BIOS中断向量60H67H00180H0019FH用户中断向量68H6FH001A0H001BFH保留70H77H001C0H001DFHI/O设备中断向量78H7FH001E0H001FFH保留80H0FDH00200H003C3HBASIC0F1H0FFH003C4H003FFH保留13.1.2 中断向量表v 图13-2以DOS中断INT 20H为例,说明CPU处理各类中断 的过程,该过程主要包括以下5个步骤:(1)取中断的中断类型号(2)计算中断向量地址(3)取出中断向量4字节单元中的内容,将其中两字节代 表中断处理程序段地址的内容送入CS寄存器,两字节代表 中断处理程序偏移量的内容送入IP寄存器(4)转向相应的中断处理程序(5)中断返回到原中断指令的下一条指令处13.1.2 中断向量表图13-2 中断处理过程演示动画注意: 这里假设被中断的程序的下一条指令是“MOV AX,0”,事实 上也可能是其他指令 13.1.3 中断源及中断源的识别v 在中断过程中,我们称引起紧急事务的事件为中断源 v 计算机系统有上百种可以发出中断请求的中断源,但最常 见的中断源是:外设的输入/输出请求 v 例如,键盘输入引起的中断,通信端口接收信息引起的中 断等 v 还有一些计算机内部的异常事件,例如,0作除数、奇偶 校验错等 v 80X86的常见中断源如图13-3所示:13.1.3 中断源及中断源的识别图13-3 80X86中断源演示动画13.1.3 中断源及中断源的识别v 常见的中断源大致分为CPU外部产生的中断和CPU内部产 生的中断。其中外部中断源包括通过NMI引脚传递的非屏 蔽中断请求产生的中断和通过Intel 8259A可编程中断控制 器的INTR引脚传递的由外部设备产生的中断等。CPU内 部中断则包括除法出错中断、单步中断、INTO指令产生的 溢出中断和程序中安排的INT n中断指令产生的中断等。 v 外部设备的中断通过8259A的INTR引脚给CPU传送中断 信号,8259A还可以使用级联的方式增加连接的外部设备 数目。如此多的中断源,CPU是如何确定INTR引脚上的 中断信号是来自中断源中的哪一个呢?CPU是通过一定的 查询电路来完成的。13.1.3 中断源及中断源的识别查询中断识别法 1向量中断识别法 21. 查询中断识别法 v 查询中断识别法主要是软件查询法,在接受中断请求信号 之后,中断识别程序逐个查询连接到系统上的每个设备。 当被检查设备的中断请求触发器被置位时,中断识别程序 便转向相应的中断服务程序的入口地址处。 v 对于中断源较多的大系统来说,查询中断花费在查询上的 时间就太多了,并且还需要有附加的中断识别程序,因此 多数系统采用另一种更加方便、快速的中断识别方法 向量中断识别法。2. 向量中断识别法 v 向量中断识别法要求输入/输出设备提供中断信号和设备的 标识码,即中断向量,或者提供中断服务程序的入口地址 。当CPU响应了某设备的中断请求后,控制逻辑就将该设 备的中断服务程序的地址传送至CPU,使CPU跳转到相应 的中断服务程序,进而完成中断服务。 v 向量中断识别虽然识别中断源十分快捷,但它需要增加硬 件的开销,因此将查询中断识别法和向量中断识别法结合 起来使用效果会更好。目前有许多计算机系统就是这样做 的。13.1.4 中断的分类v 计算机系统有上百种中断,如何对这些中断的类型进行划 分呢? v 由图13-3中80X86系统的常见中断源可知,可以将中断按 中断源划分为内部中断和外部中断。 v 按中断源的特性,中断也可以分为硬件中断和软件中断。 v 硬件中断按中断的屏蔽性质,又可以分为可屏蔽中断和不 可屏蔽中断。 v 下面详细介绍一下这几种划分以及它们之间的相互关系。13.1.4 中断的分类外部中断 1内部中断 21. 外部中断 v 外部中断一般是指外部硬件中断,它是处理器外部的硬件 设备产生而发向处理器的中断。它分为可屏蔽中断和不可 屏蔽中断两种,分别由INTR引脚和NMI引脚的信号触发。 (1)不可屏蔽中断 v 不可屏蔽中断是用来处理一些紧急情况,如电源故障、内 存或I/O总线的奇偶错误等异常事件。它不能由用户通过指 令进行屏蔽,也不受中断允许标志IF的限制。一旦CPU接 收到NMI引脚上的信号,就必须立即响应,转向NMI的中 断服务程序,硬件将自动完成断点保护和现场保护,并在 中断返回时执行一条RETN指令。1. 外部中断 (2)可屏蔽中断 v 可屏蔽中断通常来自外部设备,可以通过指令设置中断控制器的屏蔽 参数来禁止某些指定的中断。例如中断控制器8259A有IR0IR7共8级 中断,8259A接收来自外设的中断请求信号,并将中断源的中断类型 号发送到CPU。在外设发出中断请求到CPU响应中断的过程中有两个 控制条件:一是该外设的中断请求是否被屏蔽,该条件由8259A的中 断屏蔽寄存器(IMR)控制;另一个是CPU是否允许响应中断,该条件 由CPU的标志寄存器(FLAGS)中的中断允许位IF来控制。 v 可以通过置中断屏蔽寄存器来屏蔽相应的中断申请。8259A的中断屏 蔽寄存器I/O端口地址是21H,该寄存器的8位对应控制8个外部设备。 若某位为0,表示允许该位对应外设的中断请求;若某位为1,则表示 该位对应外设的中断请求被屏蔽。1. 外部中断 v 例如,如图13-3所示,假设只允许系统定时器中断,系统定时器的中 断请求对应8259A的IRQ0,于是可如下设置中断屏蔽寄存器:MOV AL,11111110BOUT21H, AL v CPU是否响应外设发出的中断请求还与标志寄存器中的中断标志位IF 有关。IF为0,CPU禁止响应任何外设请求的中断;IF为1,则CPU可 以响应外设的中断请求。在程序中可以通过以下两条指令来设置和清 除IF位。STI;开中断,IF=1CLI;关中断,IF=0 v 在任何类型的中断发生时,CPU将当前的FLAGS入栈,并置IF为0, 然后进入中断处理程序。当中断处理程序完成,执行到中断返回指令 IRET时,从栈中恢复原FLAGS的值,将IF置1,这时允许新的中断发 生。如果需要在一个中断处理程序的执行过程中允许响应另外的中断 ,也可以使用开中断指令STI。2. 内部中断v 内部中断主要包括内部硬件中断和软件中断 v 内部硬件中断是指由某些特殊指令触发的中断如单步中断除法出错中断溢出中断 v 软件中断则是指由指令INT n引起的非屏蔽中断如DOS中断、BIOS中断和其他自由中断2. 内部中断(1)除法出错中断 v 除法错的中断类型号为0。除法运算中除数不能为0,因此在程序中不 慎写入了除数为零的除法运算,就会产生除数为零的中断。还有一种 情况,那就是在除法运算中,所得的商大于某一确定的极值也将引起 除法出错中断。例如:MOV DX,34HMOV AX,5678HMOV BX,1DIV BX v 上面的4条指令,是一个双字除以字的运算。结果将商放在AX寄存器 中,余数放在DX寄存器中。对于无符号数商的最大允许值为65535, 而这里除数BX为1,所以商345678H必然大于65535,因此也将产生 一个除法错误。2. 内部中断(2)溢出中断 v 溢出中断的中断类型号为4。在指令序列中,若上一个指令由于某些 特殊的原因使溢出标志OF置1,那么当执行溢出中断指令INTO时会立 即产生04H类中断,若OF标志为0,则INTO不起作用。 (3)单步中断和断点中断 v 在使用DEBUG调试程序时,会经常使用到T命令和P命令,而这两个 命令的执行恰好是利用了内部硬件中断之一的单步中断INT 01H和断 点中断INT 03H,它的特征是将陷阱标志TF置位,这样当程序运行时 ,会在每一条指令的后面产生一个单步中断,从而终止指令的继续执 行。2. 内部中断(4)软件中断 v CPU在执行完一条INT n指令后,就会立即产生n类软件中断,调用系 统中相应的中断处理程序完成中断的功能。其中INT n指令的n为中断 类型号。 v 例如,对系统定时器进行控制,则可以在程序中安排一条中断指令:INT1CH v 当CPU执行到这条指令时,则从中断向量表中1CH4=70H至73H处 取4个字节的内容(它们是中断服务程序的偏移量和段地址),自动 将
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号