汇编语言程序设计第十三章中断及中断处理程序

上传人:鲁** 文档编号:584926355 上传时间:2024-09-01 格式:PPT 页数:72 大小:1.15MB
返回 下载 相关 举报
汇编语言程序设计第十三章中断及中断处理程序_第1页
第1页 / 共72页
汇编语言程序设计第十三章中断及中断处理程序_第2页
第2页 / 共72页
汇编语言程序设计第十三章中断及中断处理程序_第3页
第3页 / 共72页
汇编语言程序设计第十三章中断及中断处理程序_第4页
第4页 / 共72页
汇编语言程序设计第十三章中断及中断处理程序_第5页
第5页 / 共72页
点击查看更多>>
资源描述

《汇编语言程序设计第十三章中断及中断处理程序》由会员分享,可在线阅读,更多相关《汇编语言程序设计第十三章中断及中断处理程序(72页珍藏版)》请在金锄头文库上搜索。

1、-朱耀庭夷溉背贼免捅枝雾斜扯蔓醉立小甚窥花计潮灯杆诀疥裴秩岂湖辊柯注旷贺汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计汇编语言程序设计-朱耀庭朱耀庭 茧芋文洼扁剥权霓矛泊佳思亚板番熬烽仍愚兆锁阎追唤牙殴靴红蹿崩尽迈汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序第第13章中断及中断处理程序章中断及中断处理程序v中断在计算机科学中占有十分重要的地位,是计算机科学中断在计算机科学中占有十分重要的地位,是计算机科学中最基本的概念之一。如果没有中断以及中断机制的引入中最基本的概念之一。如果没有中断以及中断

2、机制的引入与应用,就不可能有计算机操作系统的出现,也就不可能与应用,就不可能有计算机操作系统的出现,也就不可能有今天如此高效率的计算机。使用计算机时,操作健盘、有今天如此高效率的计算机。使用计算机时,操作健盘、移动鼠标之所以能够被计算机感知并且予以及时响应处理,移动鼠标之所以能够被计算机感知并且予以及时响应处理,这完全得益于计算机的中断处理。这完全得益于计算机的中断处理。v本章将重点介绍本章将重点介绍80X86 的中断机制及中断处理程序的设计的中断机制及中断处理程序的设计方法,同时还将介绍请求方法,同时还将介绍请求DOS、BIOS中断服务,以及调中断服务,以及调用用DOS、BIOS内部功能子程

3、序(即内部功能子程序(即DOS、BIOS功能调用)功能调用)的方法和用途等。的方法和用途等。侯早袱递印呼双容怂篆吭岂塞碴动鲸孪炽致喂街汐饺躬编拽末镐害倒至缅汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭第二章第二章 80x86实模式汇编的运行环境实模式汇编的运行环境 13.6典型的中断处理程序实例典型的中断处理程序实例 13.5DOS和和BIOS功能调用实例功能调用实例 13.4BIOS中断服务中断服务 13.2软件中断软件中断 13.1中断及中断相关概念中断及中断相关概念 13.3DOS中断服务中断服务刹啦蚌死虽许翁某铁

4、臀都悄荒刘寡稽肠茂唉抄综侩黄蛛砒泞取评趣暂码窗汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.1中断及中断相关概念中断及中断相关概念13.1.1中断的基本概念中断的基本概念13.1.2中断向量表中断向量表13.1.3中断源及中断源的识别中断源及中断源的识别13.1.4中断的分类中断的分类13.1.5中断处理机制中断处理机制13.1.6CPU响应中断的条件响应中断的条件13.1.7中断的优先级中断的优先级里外琢愤屹眯躁初擂炯坠晶漠披妒食贫舅使斜万丁磨溜铡胳另矾罗佛讯娜汇编语言程序设计第十三章:中断及中断处理程序汇编语言程

5、序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.1.1中断的基本概念中断的基本概念v在计算机系统中,引入中断的最初目的是为了提高系统的在计算机系统中,引入中断的最初目的是为了提高系统的输入输出性能输入输出性能v随着计算机应用的发展,中断技术也应用到计算机系统的随着计算机应用的发展,中断技术也应用到计算机系统的许多领域,如:多道程序、分时系统、实时处理、程序监许多领域,如:多道程序、分时系统、实时处理、程序监视和跟踪等领域。视和跟踪等领域。v中断就是使中央处理器暂时挂起当前正在进行的工作程序,中断就是使中央处理器暂时挂起当前正在进行的工作程序,转向某紧急事件的服务与处理程序

6、,并在执行完该服务与转向某紧急事件的服务与处理程序,并在执行完该服务与处理程序后,再返回到曾经被其中止和挂起的原有程序处处理程序后,再返回到曾经被其中止和挂起的原有程序处继续完成原有工作的整个过程。继续完成原有工作的整个过程。占粥垒拱巡奴疵扑蹄爱蛤捂驳住颤窖惧驳崇澜夕指害暴存惮该甫哦沙实丑汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.1.2中断向量表中断向量表v在中断发生后,中断处理程序需要对因各种原因触发的相应中断进行在中断发生后,中断处理程序需要对因各种原因触发的相应中断进行处理。处理。v80X86中断系统能处理

7、中断系统能处理256种类型的中断,同时给每种中断安排了一种类型的中断,同时给每种中断安排了一个中断类型号,即个中断类型号,即0H0FFH号中断,每种类型的中断都有相应的中断号中断,每种类型的中断都有相应的中断处理程序。处理程序。v如何有效地管理和保存如此多的中断及其对应的中断处理程序呢?那如何有效地管理和保存如此多的中断及其对应的中断处理程序呢?那就是利用中断向量表。就是利用中断向量表。v中断向量表是一个特殊的线性表,它保存着系统所有中断服务程序的中断向量表是一个特殊的线性表,它保存着系统所有中断服务程序的入口地址。入口地址。v在在80X86微机系统中,该表保存的微机系统中,该表保存的256个

8、中断向量分别对应于个中断向量分别对应于256种中种中断类型,每个表项占断类型,每个表项占4个字节,其中两个字节存放中断处理程序的段个字节,其中两个字节存放中断处理程序的段地址,另两个字节存放中断处理程序的段内偏移量,所以中断向量表地址,另两个字节存放中断处理程序的段内偏移量,所以中断向量表为为1K字节,它起止于存储器中地址字节,它起止于存储器中地址0000H3FFH处,如图处,如图13-1所示所示:绚闻焕菌汇警匝慢鄂钥讯积摹蓑荡收吱婪晦祥坎行唉耽屋辩奸壁完壹上穴汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.1.2中断

9、向量表中断向量表图图13-1中断向量表中断向量表岔奉炊搜串辙离资亦次孵共膘醚闲刁炬虏揖砸招杀哑跟衅聋坷盈啤辖捅唾汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.1.2中断向量表中断向量表v各各个个中中断断处处理理程程序序的的入入口口地地址址在在中中断断向向量量表表中中是是按按中中断断类类型型号号顺顺序序存存放放的的,因因此此将将中中断断类类型型号号乘乘以以4就就得得到到对对应应中中断向量的地址。断向量的地址。v例例如如,溢溢出出中中断断的的中中断断类类型型号号为为04H,则则它它的的中中断断向向量量的的地地址址为为04

10、H4=10H,内内存存地地址址从从10H开开始始的的4个个字字节节中中,10H和和11H两两字字节节中中存存放放溢溢出出中中断断程程序序的的偏偏移移地地址址,12H和和13H两两字字节节中中存存放放溢溢出出中中断断程程序序的的段段地地址址,在在发发生生溢溢出出中中断断时时,将将这这个个偏偏移移地地址址和和段段地地址址分分别别取取出出送送给给寄寄存存器器IP和和CS,CPU即转向溢出中断处理程序。即转向溢出中断处理程序。唉贿诫扔巫培害据仍膛嘲芒呀闰炮祥违堕从取萧缝系有僧瞬吕酿坪校舵隘汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱

11、耀庭13.1.2中断向量表中断向量表表表13-1中断类型号和中断向量地址中断类型号和中断向量地址中断类型号中断类型号中断向量地址中断向量地址中断的含义中断的含义00H1FH00000H0007FHBIOS中断向量中断向量20H3FH00080H000FFHDOS中断向量中断向量40H5FH00100H0017FH扩充扩充BIOS中断向量中断向量60H67H00180H0019FH用户中断向量用户中断向量68H6FH001A0H001BFH保留保留70H77H001C0H001DFHI/O设备中断向量设备中断向量78H7FH001E0H001FFH保留保留80H0FDH00200H003C3HB

12、ASIC0F1H0FFH003C4H003FFH保留保留祥猿载脓这浅轴港阔改再簧啪凤特薛窑阿尖圈熔洪涂芋贝颧能共猛守裤玖汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.1.2中断向量表中断向量表v图图13-2以以DOS中断中断INT 20H为例,说明为例,说明CPU处理各类中断处理各类中断的过程,该过程主要包括以下的过程,该过程主要包括以下5个步骤:个步骤: (1)取中断的中断类型号)取中断的中断类型号 (2)计算中断向量地址)计算中断向量地址 (3)取出中断向量)取出中断向量4字节单元中的内容,将其中两字节代字节单元

13、中的内容,将其中两字节代表中断处理程序段地址的内容送入表中断处理程序段地址的内容送入CS寄存器,两字节代表寄存器,两字节代表中断处理程序偏移量的内容送入中断处理程序偏移量的内容送入IP寄存器寄存器 (4)转向相应的中断处理程序)转向相应的中断处理程序 (5)中断返回到原中断指令的下一条指令处)中断返回到原中断指令的下一条指令处矣靳舜笺陌霞揭舜辆闲珠欧项硼雹属忽猿佐葛遇屏寅漾纤锭振咯癌雕仕宋汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.1.2中断向量表中断向量表图图13-2中断处理过程中断处理过程演示动画演示动画注意:

14、注意:这里假设被中断的程序的下一条指令是这里假设被中断的程序的下一条指令是“MOV AX,0”,事实,事实上也可能是其他指令上也可能是其他指令 聂笔认赶殆圈覆筐渍沧邑智彭扶狭肥辅邀云交罐筑咕禹探咬揩撒在造唤涕汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.1.3中断源及中断源的识别中断源及中断源的识别v在中断过程中,我们称引起紧急事务的事件为中断源在中断过程中,我们称引起紧急事务的事件为中断源v计计算算机机系系统统有有上上百百种种可可以以发发出出中中断断请请求求的的中中断断源源,但但最最常常见的中断源是:外设的输入见的

15、中断源是:外设的输入/输出请求输出请求v例例如如,键键盘盘输输入入引引起起的的中中断断,通通信信端端口口接接收收信信息息引引起起的的中中断等断等v还还有有一一些些计计算算机机内内部部的的异异常常事事件件,例例如如,0作作除除数数、奇奇偶偶校验错等校验错等v80X86的常见中断源如图的常见中断源如图13-3所示:所示:伟循饺载弘降牲抖张肝毛搏馒苯靡左詹龚络录亢胸纹机拎姻炊晦村是沮冲汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.1.3中断源及中断源的识别中断源及中断源的识别图图13-380X86中断源中断源演示动画演示动

16、画锨凰酮尾憎车惶涧施翼狮雁宰昼肠蚤法厦达噶蔗妆掸据抠位位充侵虐怠打汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.1.3中断源及中断源的识别中断源及中断源的识别v常见的中断源大致分为常见的中断源大致分为CPU外部产生的中断和外部产生的中断和CPU内部产内部产生的中断。其中外部中断源包括通过生的中断。其中外部中断源包括通过NMI引脚传递的非屏引脚传递的非屏蔽中断请求产生的中断和通过蔽中断请求产生的中断和通过Intel 8259A可编程中断控制可编程中断控制器的器的INTR引脚传递的由外部设备产生的中断等。引脚传递的由外部

17、设备产生的中断等。CPU内内部中断则包括除法出错中断、单步中断、部中断则包括除法出错中断、单步中断、INTO指令产生的指令产生的溢出中断和程序中安排的溢出中断和程序中安排的INT n中断指令产生的中断等。中断指令产生的中断等。v外部设备的中断通过外部设备的中断通过8259A的的INTR引脚给引脚给CPU传送中断信传送中断信号,号,8259A还可以使用级联的方式增加连接的外部设备数还可以使用级联的方式增加连接的外部设备数目。如此多的中断源,目。如此多的中断源,CPU是如何确定是如何确定INTR引脚上的中引脚上的中断信号是来自中断源中的哪一个呢?断信号是来自中断源中的哪一个呢?CPU是通过一定的查

18、是通过一定的查询电路来完成的。询电路来完成的。翱贝数疹友欲齿起缚就卉磅皑显互各乾讽悲啄戍婪楷萨扳侦绍泼辑缸放棚汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.1.3中断源及中断源的识别中断源及中断源的识别查询中断识别法查询中断识别法 1向量中断识别法向量中断识别法 2畸奎妈效近新龟聂埋刨辞机祈悯掌负乐丈洼赂芋逻械狄染蠢养汪巳擂忽代汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭1.查询中断识别法查询中断识别法 v查询中断识别法主要是软件查询法,在接受

19、中断请求信号查询中断识别法主要是软件查询法,在接受中断请求信号之后,中断识别程序逐个查询连接到系统上的每个设备。之后,中断识别程序逐个查询连接到系统上的每个设备。当被检查设备的中断请求触发器被置位时,中断识别程序当被检查设备的中断请求触发器被置位时,中断识别程序便转向相应的中断服务程序的入口地址处。便转向相应的中断服务程序的入口地址处。v对于中断源较多的大系统来说,查询中断花费在查询上的对于中断源较多的大系统来说,查询中断花费在查询上的时间就太多了,并且还需要有附加的中断识别程序,因此时间就太多了,并且还需要有附加的中断识别程序,因此多数系统采用另一种更加方便、快速的中断识别方法多数系统采用另

20、一种更加方便、快速的中断识别方法向量中断识别法。向量中断识别法。斡者穴殿澜痰折道庶卉或劳靴尉胳作窝踊和擞痘赵秆榨哗缀上术赐央斤荣汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭2. 向量中断识别法向量中断识别法 v向量中断识别法要求输入向量中断识别法要求输入/输出设备提供中断信号和设备的输出设备提供中断信号和设备的标识码,即中断向量,或者提供中断服务程序的入口地址。标识码,即中断向量,或者提供中断服务程序的入口地址。当当CPU响应了某设备的中断请求后,控制逻辑就将该设备响应了某设备的中断请求后,控制逻辑就将该设备的中断服务程

21、序的地址传送至的中断服务程序的地址传送至CPU,使,使CPU跳转到相应的跳转到相应的中断服务程序,进而完成中断服务。中断服务程序,进而完成中断服务。v向量中断识别虽然识别中断源十分快捷,但它需要增加硬向量中断识别虽然识别中断源十分快捷,但它需要增加硬件的开销,因此将查询中断识别法和向量中断识别法结合件的开销,因此将查询中断识别法和向量中断识别法结合起来使用效果会更好。目前有许多计算机系统就是这样做起来使用效果会更好。目前有许多计算机系统就是这样做的。的。兼律宛渤绘漫阵嚎淬碍锈胶瑶峨甚咐丝雇残际半磅编指感僳型羡莱擎撕排汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中

22、断处理程序南开大学南开大学 朱耀庭朱耀庭13.1.4中断的分类中断的分类v计计算算机机系系统统有有上上百百种种中中断断,如如何何对对这这些些中中断断的的类类型型进进行行划划分呢?分呢?v由由图图13-3中中80X86系系统统的的常常见见中中断断源源可可知知,可可以以将将中中断断按按中断源划分为内部中断和外部中断。中断源划分为内部中断和外部中断。v按中断源的特性,中断也可以分为硬件中断和软件中断。按中断源的特性,中断也可以分为硬件中断和软件中断。v硬硬件件中中断断按按中中断断的的屏屏蔽蔽性性质质,又又可可以以分分为为可可屏屏蔽蔽中中断断和和不不可屏蔽中断。可屏蔽中断。v下面详细介绍一下这几种划分

23、以及它们之间的相互关系。下面详细介绍一下这几种划分以及它们之间的相互关系。默稼申黑孔矗松拱宾黔缸某炮柴灾捂观况玖壬龚狗鹃正稚剃饲幅谦常糖隧汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.1.4中断的分类中断的分类外部中断外部中断 1内部中断内部中断 2忻惜部朽集迎交谚栓晕尹差潦几贺田可俐醉折嗓掠膜蔷痪捷牡逐贱哨罢冷汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭1.外部中断外部中断 v外部中断一般是指外部硬件中断,它是处理器外部的硬件外部中断一般是指

24、外部硬件中断,它是处理器外部的硬件设备产生而发向处理器的中断。它分为可屏蔽中断和不可设备产生而发向处理器的中断。它分为可屏蔽中断和不可屏蔽中断两种,分别由屏蔽中断两种,分别由INTR引脚和引脚和NMI引脚的信号触发。引脚的信号触发。(1)不可屏蔽中断)不可屏蔽中断v不可屏蔽中断是用来处理一些紧急情况,如电源故障、内不可屏蔽中断是用来处理一些紧急情况,如电源故障、内存或存或I/O总线的奇偶错误等异常事件。它不能由用户通过指总线的奇偶错误等异常事件。它不能由用户通过指令进行屏蔽,也不受中断允许标志令进行屏蔽,也不受中断允许标志IF的限制。一旦的限制。一旦CPU接接收到收到NMI引脚上的信号,就必须

25、立即响应,转向引脚上的信号,就必须立即响应,转向NMI的中的中断服务程序,硬件将自动完成断点保护和现场保护,并在断服务程序,硬件将自动完成断点保护和现场保护,并在中断返回时执行一条中断返回时执行一条RETN指令。指令。搂西茵项痘翼难计瑶助骇桨轮胜咕颧设乘秽辽判枚井届傻微撬屡唾两舵丘汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭1.外部中断外部中断 (2)可屏蔽中断)可屏蔽中断v可屏蔽中断通常来自外部设备,可以通过指令设置中断控制器的屏蔽可屏蔽中断通常来自外部设备,可以通过指令设置中断控制器的屏蔽参数来禁止某些指定的中断。例

26、如中断控制器参数来禁止某些指定的中断。例如中断控制器8259A有有IR0IR7共共8级级中断,中断,8259A接收来自外设的中断请求信号,并将中断源的中断类型接收来自外设的中断请求信号,并将中断源的中断类型号发送到号发送到CPU。在外设发出中断请求到。在外设发出中断请求到CPU响应中断的过程中有两个响应中断的过程中有两个控制条件:一是该外设的中断请求是否被屏蔽,该条件由控制条件:一是该外设的中断请求是否被屏蔽,该条件由8259A的中的中断屏蔽寄存器断屏蔽寄存器(IMR)控制;另一个是控制;另一个是CPU是否允许响应中断,该条件是否允许响应中断,该条件由由CPU的标志寄存器的标志寄存器(FLAG

27、S)中的中断允许位中的中断允许位IF来控制。来控制。v可以通过置中断屏蔽寄存器来屏蔽相应的中断申请。可以通过置中断屏蔽寄存器来屏蔽相应的中断申请。8259A的中断屏的中断屏蔽寄存器蔽寄存器I/O端口地址是端口地址是21H,该寄存器的,该寄存器的8位对应控制位对应控制8个外部设备。个外部设备。若某位为若某位为0,表示允许该位对应外设的中断请求;若某位为,表示允许该位对应外设的中断请求;若某位为1,则表示,则表示该位对应外设的中断请求被屏蔽。该位对应外设的中断请求被屏蔽。赎锋硫窗朴犁仟峡蛤俊咆帽汇提弓红攒谱仲块弛楼变休鞋尘截姬弧落妒杖汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十

28、三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭1.外部中断外部中断 v例如,如图例如,如图13-3所示,假设只允许系统定时器中断,系统定时器的中所示,假设只允许系统定时器中断,系统定时器的中断请求对应断请求对应8259A的的IRQ0,于是可如下设置中断屏蔽寄存器:,于是可如下设置中断屏蔽寄存器: MOV AL,11111110B OUT21H, ALvCPU是否响应外设发出的中断请求还与标志寄存器中的中断标志位是否响应外设发出的中断请求还与标志寄存器中的中断标志位IF有关。有关。IF为为0,CPU禁止响应任何外设请求的中断;禁止响应任何外设请求的中断;IF为为1,则,则CPU可可以响应

29、外设的中断请求。在程序中可以通过以下两条指令来设置和清以响应外设的中断请求。在程序中可以通过以下两条指令来设置和清除除IF位。位。 STI;开中断,开中断,IF=1 CLI;关中断,关中断,IF=0v在任何类型的中断发生时,在任何类型的中断发生时,CPU将当前的将当前的FLAGS入栈,并置入栈,并置IF为为0,然后进入中断处理程序。当中断处理程序完成,执行到中断返回指令然后进入中断处理程序。当中断处理程序完成,执行到中断返回指令IRET时,从栈中恢复原时,从栈中恢复原FLAGS的值,将的值,将IF置置1,这时允许新的中断发,这时允许新的中断发生。如果需要在一个中断处理程序的执行过程中允许响应另

30、外的中断,生。如果需要在一个中断处理程序的执行过程中允许响应另外的中断,也可以使用开中断指令也可以使用开中断指令STI。悔漾诺聚蜜憎凳底驭营产驴轿机哆绒摔稳荫醋翁雁四震殷些祁究堆去杖骂汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭2. 内部中断内部中断v内部中断主要包括内部硬件中断和软件中断内部中断主要包括内部硬件中断和软件中断v内部硬件中断是指由某些特殊指令触发的中断内部硬件中断是指由某些特殊指令触发的中断 如单步中断如单步中断 除法出错中断除法出错中断 溢出中断溢出中断v软件中断则是指由指令软件中断则是指由指令INT

31、n引起的非屏蔽中断引起的非屏蔽中断 如如DOS中断、中断、BIOS中断和其他自由中断中断和其他自由中断案躬虽胎纸截寸声攀郴蜒答噬郝攻柿住倘碉动堕倒藐盖余奈讲滋镀练亮婿汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭2. 内部中断内部中断(1)除法出错中断)除法出错中断v除法错的中断类型号为除法错的中断类型号为0。除法运算中除数不能为。除法运算中除数不能为0,因此在程序中不,因此在程序中不慎写入了除数为零的除法运算,就会产生除数为零的中断。还有一种慎写入了除数为零的除法运算,就会产生除数为零的中断。还有一种情况,那就是在除法运

32、算中,所得的商大于某一确定的极值也将引起情况,那就是在除法运算中,所得的商大于某一确定的极值也将引起除法出错中断。例如:除法出错中断。例如: MOV DX,34H MOV AX,5678H MOV BX,1 DIV BXv上面的上面的4条指令,是一个双字除以字的运算。结果将商放在条指令,是一个双字除以字的运算。结果将商放在AX寄存器寄存器中,余数放在中,余数放在DX寄存器中。对于无符号数商的最大允许值为寄存器中。对于无符号数商的最大允许值为65535,而这里除数而这里除数BX为为1,所以商,所以商345678H必然大于必然大于65535,因此也将产生,因此也将产生一个除法错误。一个除法错误。绳

33、谦钡秀瑚处匡爵跪谜虐办贝烘厉填侄任藩巨译溉橱淳庇白腋就诅筹乍剂汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭2. 内部中断内部中断(2)溢出中断)溢出中断v溢出中断的中断类型号为溢出中断的中断类型号为4。在指令序列中,若上一个指令由于某些。在指令序列中,若上一个指令由于某些特殊的原因使溢出标志特殊的原因使溢出标志OF置置1,那么当执行溢出中断指令,那么当执行溢出中断指令INTO时会立时会立即产生即产生04H类中断,若类中断,若OF标志为标志为0,则,则INTO不起作用。不起作用。(3)单步中断和断点中断)单步中断和断点中断

34、v在使用在使用DEBUG调试程序时,会经常使用到调试程序时,会经常使用到T命令和命令和P命令,而这两个命令,而这两个命令的执行恰好是利用了内部硬件中断之一的单步中断命令的执行恰好是利用了内部硬件中断之一的单步中断INT 01H和断和断点中断点中断INT 03H,它的特征是将陷阱标志,它的特征是将陷阱标志TF置位,这样当程序运行时,置位,这样当程序运行时,会在每一条指令的后面产生一个单步中断,从而终止指令的继续执行。会在每一条指令的后面产生一个单步中断,从而终止指令的继续执行。富朝阁汰念髓肿太贷舔袁咒耶闷把天抿胳喧朝阳长瀑娜颤威臼哩侥花烤逮汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序

35、设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭2. 内部中断内部中断(4)软件中断)软件中断vCPU在执行完一条在执行完一条INT n指令后,就会立即产生指令后,就会立即产生n类软件中断,调用系类软件中断,调用系统中相应的中断处理程序完成中断的功能。其中统中相应的中断处理程序完成中断的功能。其中INT n指令的指令的n为中断为中断类型号。类型号。v例如,对系统定时器进行控制,则可以在程序中安排一条中断指令:例如,对系统定时器进行控制,则可以在程序中安排一条中断指令: INT1CHv当当CPU执行到这条指令时,则从中断向量表中执行到这条指令时,则从中断向量表中1CH4=70H至至

36、73H处取处取4个字节的内容(它们是中断服务程序的偏移量和段地址),自动将个字节的内容(它们是中断服务程序的偏移量和段地址),自动将其送到其送到IP和和CS,然后转向对应的中断服务程序。,然后转向对应的中断服务程序。vINT指令可以指定指令可以指定0H0FFH中的任何中断类型号。除系统占用的中断中的任何中断类型号。除系统占用的中断类型号外,用户可以利用保留的中断类型号扩充新的中断处理功能。类型号外,用户可以利用保留的中断类型号扩充新的中断处理功能。歹酣诀划艺保馋豆骚饯箱隶镰率盛我唯赞绞帛素措廊比涪辆拽盖炼啥琉民汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理

37、程序南开大学南开大学 朱耀庭朱耀庭13.1.5中断处理机制中断处理机制v计算机系统中的中断源大致可分为几类,如一般的计算机系统中的中断源大致可分为几类,如一般的I/O设备、软件中断、设备、软件中断、实时钟、故障源等。一个中断系统如果要合理地响应如此多的中断源,实时钟、故障源等。一个中断系统如果要合理地响应如此多的中断源,就需要具备以下十分完善的就需要具备以下十分完善的“中断处理机制中断处理机制”。(1)当中断源向)当中断源向CPU发出中断请求时,发出中断请求时,CPU能有权决定是否响应此中断能有权决定是否响应此中断请求,在响应中断请求的情况下要能保护断点,中断处理程序执行完请求,在响应中断请求

38、的情况下要能保护断点,中断处理程序执行完毕后能够正确返回断点处继续执行。毕后能够正确返回断点处继续执行。(2)中断应具有优先级。在某一时刻如果有许多中断源同时发出中断请)中断应具有优先级。在某一时刻如果有许多中断源同时发出中断请求,求,CPU应能够实现中断优先级排队,即按中断请求的级别来决定先应能够实现中断优先级排队,即按中断请求的级别来决定先响应哪一个中断,保证首先响应优先级高的中断请求,但同时又要防响应哪一个中断,保证首先响应优先级高的中断请求,但同时又要防止低级中断源的中断请求一直得不到止低级中断源的中断请求一直得不到CPU响应的现象出现。响应的现象出现。闲蝴孜詹氨静寝散处馆扑赔已斧巷田

39、春蚌锭棱彻检蹋须擒蹬蕊焕终澄碱勘汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.1.5中断处理机制中断处理机制(3)能能够够实实现现中中断断的的嵌嵌套套。中中断断源源向向CPU发发出出的的中中断断请请求求是是连连续续不不断断的的,即即使使已已经经是是响响应应了了某某个个中中断断请请求求而而进进入入相相应应的的中中断断服服务务程程序序,如如果果这这时时又又有有了了一一个个级级别别更更高高的的中中断断请请求求,CPU应应该该能能暂暂时时挂挂起起正正在在进进行行的的中中断断服服务务程程序序,转转而而去去响响应应更更高高优优先

40、先级级的的中中断断请请求求,响响应应结结束束后后再再返返回回到到原原中中断断处处理理程程序序。例例如如当当自自己己编编写写的的中中断断服服务务程程序序中中用用到到DOS或或BIOS提提供供的的中中断断时时,它它们们就就相相当当于于更更高高级级别别的的中中断断请请求求,当当CPU响响应应并并进进入入自自己己编编写写的的中中断断服服务务程程序序时时,如如果果遇遇到到DOS或或BIOS中中断断,就需暂时挂起自己的中断服务程序转而去响应就需暂时挂起自己的中断服务程序转而去响应DOS或或BIOS中断。中断。卵晨慑窑捎平电嘴巳陌叹够总遮柱亢噎匠瘴凋惟唯积返聘萧挤茂混烬细册汇编语言程序设计第十三章:中断及中

41、断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.1.6CPU响应中断的条件响应中断的条件vCPU一般是在执行现行指令的最后一个机器指令周期时检一般是在执行现行指令的最后一个机器指令周期时检测是否有中断请求的,所以在硬件上需要每个中断源都接测是否有中断请求的,所以在硬件上需要每个中断源都接有一个中断请求触发器,以便能够将中断源产生的中断请有一个中断请求触发器,以便能够将中断源产生的中断请求信号锁存起来,并保持到求信号锁存起来,并保持到CPU检测完之后。检测完之后。v同时,为了在多个中断源请求中断的情况下能够增加控制同时,为了在多个中断源请求中断的情况下能

42、够增加控制的灵活性,在硬件上还需要一个中断屏蔽触发器,以决定的灵活性,在硬件上还需要一个中断屏蔽触发器,以决定中断请求被通过还是被屏蔽。中断请求被通过还是被屏蔽。v此外,在此外,在CPU内部还要有一个中断允许触发器,它可以通内部还要有一个中断允许触发器,它可以通过过STI和和CLI指令来设置。即通过指令来设置。即通过STI开中断,使开中断,使CPU能正能正常响应中断源的中断请求;而通过常响应中断源的中断请求;而通过CLI关中断,使关中断,使CPU不不响应任何中断请求。响应任何中断请求。祷立狸哟恨口漂住缅变堆舟时辕蛋骋抱政虐详咀绒因钱辛氓噶袍碱靖渔勃汇编语言程序设计第十三章:中断及中断处理程序汇

43、编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.1.6CPU响应中断的条件响应中断的条件v因此,因此,CPU响应某个中断请求须满足以下响应某个中断请求须满足以下3个条件:个条件:(1)中断源置中断请求触发器。由于)中断源置中断请求触发器。由于CPU在每条指令周期结束时才检测在每条指令周期结束时才检测是否有中断请求信号,所以中断请求触发器包含一个锁存器,它将中是否有中断请求信号,所以中断请求触发器包含一个锁存器,它将中断请求信号锁存起来直到断请求信号锁存起来直到CPU来检测之后再清除。来检测之后再清除。(2)中断源的中断屏蔽触发器未被置位,否则该中断源的所有中断请求

44、)中断源的中断屏蔽触发器未被置位,否则该中断源的所有中断请求将被屏蔽掉。若干中断源的屏蔽触发器可以组成一个中断屏蔽寄存器。将被屏蔽掉。若干中断源的屏蔽触发器可以组成一个中断屏蔽寄存器。(3) CPU内的中断允许触发器置位。当内的中断允许触发器置位。当CPU响应中断之后,响应中断之后,CPU自动自动将中断允许触发器复位,即关中断。因此,在中断服务程序中,保护将中断允许触发器复位,即关中断。因此,在中断服务程序中,保护现场后一般情况下应该使用现场后一般情况下应该使用STI指令开中断,使指令开中断,使CPU能够继续响应来能够继续响应来自其他中断源的更高级别的中断请求,来实现所谓的中断嵌套。自其他中断

45、源的更高级别的中断请求,来实现所谓的中断嵌套。v当上述当上述3个条件都满足时,如果此时个条件都满足时,如果此时CPU正好处在指令周期的结束并正好处在指令周期的结束并检测到有中断请求时,那么就响应中断并进入中断响应周期。检测到有中断请求时,那么就响应中断并进入中断响应周期。岂窍浮戮崭矩泳侮氰届胜坚趴抒性在男楚哗针硬贷佐汀弊尸亢劣鹏拄借呐汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.1.7中断的优先级中断的优先级v多多数数中中断断是是随随机机发发生生的的,所所以以必必然然会会出出现现某某一一时时刻刻有有多多个个中断源同时

46、请求中断的情况。中断源同时请求中断的情况。vCPU在在某某一一时时刻刻只只能能处处理理一一个个中中断断,因因此此,它它需需要要决决定定首首先为哪一个中断源服务。先为哪一个中断源服务。vCPU根根据据中中断断源源请请求求的的轻轻重重缓缓急急,预预先先定定义义好好中中断断处处理理的的优优先先级级,首首先先响响应应紧紧急急的的、级级别别高高的的中中断断请请求求,然然后后响响应应级别轻缓的中断请求。级别轻缓的中断请求。v当当CPU正正在在处处理理某某一一中中断断时时,它它还还应应该该能能够够响响应应优优先先级级更更高的中断请求,而屏蔽掉同级或较低级的中断请求。高的中断请求,而屏蔽掉同级或较低级的中断请

47、求。界撑龟梦颜酝樟藤沁实雨阜苍燎单卢虽确依喂潮伙禁瘸访贿郴恼棚坚僵鹃汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.1.7中断的优先级中断的优先级软件查询法软件查询法 1硬件查询法硬件查询法 2畴洗屯凸云碘门荧辗归坞逼甫蹋皑浴醒驮镀裸嗓吴淀伯沾酮邑敖纹纵毋诡汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭1.软件查询法软件查询法 v软件查询优先级的方法十分简单,它将所有外设的中断请软件查询优先级的方法十分简单,它将所有外设的中断请求触发器组合成一个寄

48、存器端口。求触发器组合成一个寄存器端口。v当当CPU接收到中断请求信号时,由一个查询程序来逐位检接收到中断请求信号时,由一个查询程序来逐位检测中断请求寄存器的状态。先被检测的位,它所对应的中测中断请求寄存器的状态。先被检测的位,它所对应的中断源是高优先级的;后检测的位,它所对应的中断源是低断源是高优先级的;后检测的位,它所对应的中断源是低优先级的。优先级的。v由于软件查询法是通过程序实现查询的,所以当中断源较由于软件查询法是通过程序实现查询的,所以当中断源较多时软件查询的时间就会较长。多时软件查询的时间就会较长。 铆狱闪沼我靛崩蛊子稠筋刀纳祥离征嚣涪诈秘捍嚼禄簧地顺壬棉宗碌票谍汇编语言程序设计

49、第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭2. 硬件查询法硬件查询法 v硬件查询是一种广泛使用的中断优先级排队方式,它通过使用优先权硬件查询是一种广泛使用的中断优先级排队方式,它通过使用优先权控制器控制器(PIC)莱实现优先级排队。优先权中断控制器是由优先权编码器莱实现优先级排队。优先权中断控制器是由优先权编码器和比较器等构成的电路,再加上中断请求寄存器、中断屏蔽寄存器共和比较器等构成的电路,再加上中断请求寄存器、中断屏蔽寄存器共同组成了一个比较完整的中断控制系统。同组成了一个比较完整的中断控制系统。v优先权控制器优先权控制器PIC可

50、同时接收可同时接收8个中断输入。与每一个中断请求位对应个中断输入。与每一个中断请求位对应的有一个中断屏蔽位,程序设计者可以对中断屏蔽寄存器编程以选择的有一个中断屏蔽位,程序设计者可以对中断屏蔽寄存器编程以选择允许的中断。这样可以灵活地调整中断优先级,并可防止出现低级中允许的中断。这样可以灵活地调整中断优先级,并可防止出现低级中断永远也得不到响应的情况出现。没有被屏蔽掉的请求信号被送往优断永远也得不到响应的情况出现。没有被屏蔽掉的请求信号被送往优先级编码器,其中具有高优先级的中断级由一个先级编码器,其中具有高优先级的中断级由一个8-3编码器转换成编码器转换成3位位码,用这个码,用这个3位码与位码

51、与3位的优先级寄存器进行比较,这个位的优先级寄存器进行比较,这个3位的优先级位的优先级寄存器是由用户自己设定的。用户设定了某一值后,只有优先级高于寄存器是由用户自己设定的。用户设定了某一值后,只有优先级高于这个值的中断才能产生中断请求,而等于或低于这个值的所有中断将这个值的中断才能产生中断请求,而等于或低于这个值的所有中断将被屏蔽掉。此外优先级寄存器内还有一位可由用户设置的禁止位,设被屏蔽掉。此外优先级寄存器内还有一位可由用户设置的禁止位,设置禁止位后可使中断优先级比较失效,使中断检测信号不经过比较而置禁止位后可使中断优先级比较失效,使中断检测信号不经过比较而直接送到直接送到CPU的中断请求线

52、上。的中断请求线上。 堑诈捶卖残努庙蔚读软虫济抡盎然蔼忱头讲荐挫氮用侗痈驳凭羽灾烧覆宏汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.1.8中断嵌套中断嵌套v中断嵌套是指当中断嵌套是指当CPU正在执行某一低级别的中断服务程序时,允许响正在执行某一低级别的中断服务程序时,允许响应更高级别的中断源的中断请求,于是暂时挂起正在处理中的中断,应更高级别的中断源的中断请求,于是暂时挂起正在处理中的中断,转而进入更高级别的中断服务,待高优先级中断服务结束后,再返回转而进入更高级别的中断服务,待高优先级中断服务结束后,再返回到刚才被

53、中断的那一级,继续执行。到刚才被中断的那一级,继续执行。v由于多重嵌套中断的某些特点,决定了它与单级中断在处理过程中有由于多重嵌套中断的某些特点,决定了它与单级中断在处理过程中有以下不同之处。以下不同之处。(1)在响应更高级中断之前要先屏蔽掉本级和较低级的中断请求,防止)在响应更高级中断之前要先屏蔽掉本级和较低级的中断请求,防止干扰;干扰;(2)在进行本级中断服务前保护现场后要先开中断,以允许更高级的中)在进行本级中断服务前保护现场后要先开中断,以允许更高级的中断响应,实现中断嵌套;断响应,实现中断嵌套;(3)中断服务程序结束后,为了在恢复现场时不受任何中断请求的干扰,)中断服务程序结束后,为

54、了在恢复现场时不受任何中断请求的干扰,必须先关中断;而在中断返回前恢复现场后再执行开中断指令,以允必须先关中断;而在中断返回前恢复现场后再执行开中断指令,以允许许CPU响应新的中断请求。响应新的中断请求。檬悲灿饮便思却茅鲤滥轨砰瘤疥畦贴帕仁肌戳咯佛荣光吃睹萧漆踊摊珐阑汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.2软件中断软件中断v通通过过中中断断向向量量表表管管理理众众多多的的中中断断,用用户户就就可可以以十十分分方方便便地地为自己建立一个软件中断。为自己建立一个软件中断。v当当用用户户想想要要编编制制和和使使用用

55、自自己己的的中中断断服服务务程程序序时时,先先应应该该确确定定中中断断类类型型;根根据据中中断断类类型型确确定定该该中中断断在在中中断断向向量量表表中中的的位位置置;然然后后将将自自己己编编制制的的中中断断服服务务程程序序(可可以以是是驻驻留留内内存存的的,也也可可以以是是非非驻驻留留内内存存的的)所所在在段段的的段段地地址址和和位位移移填填入入中中断断向向量表中对应位置的两个字中。量表中对应位置的两个字中。v对于软件中断,用户可通过指令对于软件中断,用户可通过指令INT n中的类型中的类型n进行安排。进行安排。扮魏扦纹艇赚茹叼溯挞壤遁嚣钮见导琐羊寅搐舞射由渤雕谜科枢仟棉缅抽汇编语言程序设计第

56、十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.2软件中断软件中断软件中断的处理过程软件中断的处理过程 软件中断的分类软件中断的分类 13.2.113.2.213.2.3软件中断的访问软件中断的访问 糟龄液奏胚桂怂温恿允伦约拱荤绿钮鼠铣卓捡诣卞额篆江袭修焕席勉追恭汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.2.1软件中断的处理过程软件中断的处理过程 v还是以还是以DOS系统功能调用中断系统功能调用中断INT 20H为例,来说明由软件引起的非为例,来说明由软件

57、引起的非屏蔽型中断,当中断指令向屏蔽型中断,当中断指令向CPU发出中断请求时,发出中断请求时,CPU的处理过程如的处理过程如下。下。v在程序中遇到在程序中遇到INT 20H时,该指令产生中断类型号为时,该指令产生中断类型号为20H的中断,该的中断,该中断在中断向量表中的地址为中断在中断向量表中的地址为20H4=80H,如图,如图13-2所示。如果在所示。如果在DEBUG提示符提示符“-”后输入命令后输入命令D 0000:0080 L4,就会得到如下结果:,就会得到如下结果: 0000:0080 72 10 A7 00 rvD是显示内存单元命令;是显示内存单元命令;0000:0080是要显示的内

58、存单元的起始地址,是要显示的内存单元的起始地址,冒号前冒号前4位位16进制数是待显示内存单元的段地址,冒号后进制数是待显示内存单元的段地址,冒号后4位位16进制数进制数是待显示内存单元的偏移量;是待显示内存单元的偏移量;L定义显示的长度,单位为字节,定义显示的长度,单位为字节,4表示表示显示长度值。显示长度值。v结果中的结果中的“72 10 A7 00”就代表以就代表以0000:0080开始的开始的4字节内存单元的字节内存单元的16进制内容,结果最右边的进制内容,结果最右边的“r”是相应字节的是相应字节的ASCII表示,对不可见表示,对不可见的字符以的字符以“.”代替。代替。闯讽收恳宝倾票灯董

59、懒似耿撬款亿亿柠塞时秒透磋沧羡皑篷仰夸职勾墩嗜汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.2.1软件中断的处理过程软件中断的处理过程 v根据显示的结果看出根据显示的结果看出INT 20H所对应的中断服务程序的入口地址为所对应的中断服务程序的入口地址为00A7:1072(注意内存中数据的存放格式是由高到低的注意内存中数据的存放格式是由高到低的)。v在接收在接收INT 20H指令后,指令后,CPU将自动进行如下的操作。将自动进行如下的操作。(1)将标志寄存器)将标志寄存器(FLAGS)压入堆栈。压入堆栈。(2)用清中断

60、标志)用清中断标志(IF)和陷阱标志和陷阱标志(TF)禁止硬件中断,即关中断。当用禁止硬件中断,即关中断。当用户编制自己的中断服务程序时,必要时在程序内可以用户编制自己的中断服务程序时,必要时在程序内可以用STI指令开中指令开中断,即打开由硬件自动关闭的中断允许触发器,使之能够响应更高级断,即打开由硬件自动关闭的中断允许触发器,使之能够响应更高级的中断。的中断。(3)将当前代码段寄存器)将当前代码段寄存器(CS)的内容压栈。的内容压栈。(4)将当前指令指针)将当前指令指针(IP)压栈,步骤(压栈,步骤(3)、()、(4)的目的是确保中断处)的目的是确保中断处理完毕之后能够正确地返回中断调用处。

61、理完毕之后能够正确地返回中断调用处。(5)转向内存地址)转向内存地址00A7:1072处进入中断服务程序。处进入中断服务程序。符坟票巍哨鞘惶铡赎嘘病乌启滋栈刹氢篇砍拆接阜贱料付排误讲肛班泛猜汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.2.1软件中断的处理过程软件中断的处理过程 v在中断服务程序执行完后,即在中断服务程序执行完后,即CPU接收到接收到IRET指令时,又指令时,又将产生如下的操作。将产生如下的操作。(1)从堆栈中将保存的原指令指针)从堆栈中将保存的原指令指针IP的内容弹出到的内容弹出到IP中。中。(2)

62、从堆栈中将保存的原段寄存器)从堆栈中将保存的原段寄存器CS的内容弹出到的内容弹出到CS中。中。(3)从堆栈中保存的原标志寄存器的状态,再弹出到)从堆栈中保存的原标志寄存器的状态,再弹出到FLAGS,恢复中断时的标志寄存器状态。,恢复中断时的标志寄存器状态。v由中断处理过程可以看出,软件中断指令非常类似于子程由中断处理过程可以看出,软件中断指令非常类似于子程序调用的序调用的CALL指令,即:暂停当前程序的执行,转而执指令,即:暂停当前程序的执行,转而执行另一程序段,当该程序段执行完时,行另一程序段,当该程序段执行完时,CPU都自动恢复原都自动恢复原程序的执行。程序的执行。啄易语韧铁掠弦慧滦恒头菱

63、灸造纺师民忽绸桥颧熟领类黄膏傲孺织寡枕涣汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.2.1软件中断的处理过程软件中断的处理过程 v但两者之间还是有明显区别的。它们的主要差异有以下几点。但两者之间还是有明显区别的。它们的主要差异有以下几点。(1)子程序调用是程序员在编写源程序时事先安排好的,而中断是由中)子程序调用是程序员在编写源程序时事先安排好的,而中断是由中断源根据自身的需要产生的,是不可预见的断源根据自身的需要产生的,是不可预见的(用指令用指令INT引起的中断除引起的中断除外外)。(2)子程序调用是用)子程序调

64、用是用CALL指令来实现的,但没有调用中断的指令,只指令来实现的,但没有调用中断的指令,只有发出中断请求的事件有发出中断请求的事件(指令指令INT是发出内部中断信号,而不要理解为是发出内部中断信号,而不要理解为调用中断服务程序调用中断服务程序)。(3)子程序的返回指令是)子程序的返回指令是RET,而中断服务程序全部是段间的调用,所,而中断服务程序全部是段间的调用,所以在结束时的返回指令是以在结束时的返回指令是IRET/IRETD。且软件中断的。且软件中断的IRET指令具有指令具有自动恢复断点和标志的功能。自动恢复断点和标志的功能。(4)在通常情况下,子程序是由应用系统的开发者来编写的,而中断服

65、)在通常情况下,子程序是由应用系统的开发者来编写的,而中断服务程序是由系统软件设计者来编写的。务程序是由系统软件设计者来编写的。 黄缠耗刨泽赤擒涸椎年二箔挂狰扫蚂暇膜屯丽役苇葫读余陪佳芳进绥临诸汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.2.2软件中断的分类软件中断的分类DOS中断中断 1 BIOS中断中断 2 自由中断自由中断 3兰院捶行沿杂各蛹举柄喷霉档隧无鹿竖帖斌罐婴忆寝采逼筐脾亨宪吊琵捅汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭1.

66、 DOS中断中断 vDOS中中断断占占用用的的中中断断类类型型号号为为20H3FH,目目前前使使用用了了其其中中的的20H27H和和2FH,其其余余的的为为保保留留中中断断。其其中中每每种种DOS中中断断类类型号与其对应的功能见表型号与其对应的功能见表13-2。中断类型号中断类型号中断向量地址中断向量地址功能功能20H00080H00083H程序终止程序终止21H00084H00087HDOS系统功能调用系统功能调用22H00088H0008BH程序终止程序终止DOS返回返回地址地址23H0008CH0008FHCtrl_C中断向量中断向量24H00090H00093H严重错误向量严重错误向量

67、25H00094H00097H绝对磁盘读绝对磁盘读26H00098H0009BH绝对磁盘写绝对磁盘写27H0009CH0009FH结束并驻留内存结束并驻留内存28H000A0H000A3H键盘忙循环键盘忙循环29H000A4H000A7H快速写字符快速写字符2AH000A8H000ABHMicrosoft网络接口网络接口2EH000B8H000BBH基本基本SHELL程序装程序装入入2FH000BCH000BFH多路转接接口多路转接接口30H3FH000C0H000FCH保留给保留给DOS谭纸匈篆酝阁凛需捏惜亮拓妈凳阅掖益呐贺启当篙柳成谤许悸疵哪薛抡冈汇编语言程序设计第十三章:中断及中断处理程

68、序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭2. BIOS中断中断 vBIOS中中 断断 占占 用用 的的 中中 断断 号号 为为10H1FH。它它主主要要是是供供I/O驱驱动动程程序序使使用用,提提供供了了应应用用程程序序、DOS与与设设备备的的接接口口功功能能。用用户户可可以以忽忽略略对对具具体体设设备备硬硬件件上上的的了了解解,直直接接应应用用这这些些功功能能调调用用完完成成对对具具体体设设备备的的控控制制,其其中中常常见见的的BIOS中中断断类类型型号号与与其其对对应的功能见表应的功能见表13-3。中断类型号中断类型号中断向量地址中断向量地址功能功能10

69、H00040H00043H显示器显示器I/O11H00044H00047H取设备信息取设备信息12H00048H0004BH取内存容量取内存容量13H0004CH0004FH磁盘磁盘I/O14H00050H00053HRS-232串行口串行口I/O15H00054H00057H磁带磁带I/O16H00058H0005BH键盘键盘I/O17H0005CH0005FH打印机打印机I/O18H00060H00063HROM BASIC入入口代码口代码19H00064H00067H引导装入程序引导装入程序1AH00068H0006BH时钟时钟1BH0006CH0006FH键盘终止地址键盘终止地址(Ct

70、rl_Break)1CH00070H00073H定时器定时器1DH00074H00077H显示器参数显示器参数1EH00078H0007BH软盘参数表软盘参数表1FH0007CH0007FH图形字符扩展码图形字符扩展码基恒塌拒即吵谦瞎乌毖剁疑芭汉哥灭够怀很酥蓟嫉确优卯辑摧幸差探霜勒汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭3. 自由中断自由中断 v自由中断是由系统或应用程序设置开发的。可以理解为这类中断是系自由中断是由系统或应用程序设置开发的。可以理解为这类中断是系统或应用程序为了完成特定的功能而扩展出来的中断,它们占

71、用了中统或应用程序为了完成特定的功能而扩展出来的中断,它们占用了中断向量表中断向量表中80H0FFH的位置。系统给自身和应用程序留下了很大的的位置。系统给自身和应用程序留下了很大的余地。余地。v这几类软件中断之间存在一定的层次关系。在用户程序中,若直接通这几类软件中断之间存在一定的层次关系。在用户程序中,若直接通过端口来操作硬件或外设,处理速度是最快的,但这样做,使用户程过端口来操作硬件或外设,处理速度是最快的,但这样做,使用户程序存在很大的局限性。硬件环境的改变将直接影响程序的正常运行。序存在很大的局限性。硬件环境的改变将直接影响程序的正常运行。v若用户程序通过调用若用户程序通过调用DOS功

72、能来实现其所需功能,那么,应用程序与功能来实现其所需功能,那么,应用程序与低层硬件相距较远,操作最终的对象需要经过中间环节,处理速度肯低层硬件相距较远,操作最终的对象需要经过中间环节,处理速度肯定受到一定的损失,但这种应用程序适应性强、应用范围广、对硬件定受到一定的损失,但这种应用程序适应性强、应用范围广、对硬件的依赖性最小。的依赖性最小。崔雍各合酒惭雨释豆蚊很梯摔镀屠歹会区想宫掉茂砧息粥突该韵斩钳务韦汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭3. 自由中断自由中断 v由于由于BIOS介于介于DOS和具体硬件之间,所以

73、,调用和具体硬件之间,所以,调用BIOS的功能是一个的功能是一个很好的折中方案。用户可在以下很好的折中方案。用户可在以下3种情况下考虑使用种情况下考虑使用BIOS的功能:的功能:(1)BIOS提供的功能,而提供的功能,而DOS没有提供该功能。没有提供该功能。(2)不能利用)不能利用DOS功能调用的情况功能调用的情况(可能因为某些具体应用的限制可能因为某些具体应用的限制)。(3)基于处理速度的考虑,需要绕过)基于处理速度的考虑,需要绕过DOS层的情况。层的情况。v可以看出使用中断的层次越高,它与硬件设备相关程度就越低,处理可以看出使用中断的层次越高,它与硬件设备相关程度就越低,处理速度也就越低,

74、但用户程序的适用范围较广;使用中断的层次越低,速度也就越低,但用户程序的适用范围较广;使用中断的层次越低,它与硬件设备相关程度越高,处理速度越快,用户程序的适用范围较它与硬件设备相关程度越高,处理速度越快,用户程序的适用范围较小。因此程序员可根据应用程序的要求、对硬件环境的熟悉程度等因小。因此程序员可根据应用程序的要求、对硬件环境的熟悉程度等因素来选用不同层次的中断。素来选用不同层次的中断。 槐覆锋寺陛古墩眺巩力穷锁溪滓阀炯凳诣炮讯酌怪狄脚尼在棱镣没括彤尔汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.2.3软件中断的

75、访问软件中断的访问v软件中断的访问在不同的环境中有不同的形式,这里仅介绍一下汇编软件中断的访问在不同的环境中有不同的形式,这里仅介绍一下汇编语言对软件中断的访问。用汇编语言申请一个标准语言对软件中断的访问。用汇编语言申请一个标准DOS或或BIOS中断中断是非常简单的,用户程序通过规定的寄存器与中断服务程序之间进行是非常简单的,用户程序通过规定的寄存器与中断服务程序之间进行内定的规范信息交换。内定的规范信息交换。DOS中断和中断和BIOS中断都是在中断调用前将功中断都是在中断调用前将功能号装入能号装入AH寄存器,将子功能号装入寄存器,将子功能号装入AL寄存器,此时对于大部分的寄存器,此时对于大部

76、分的中断处理程序都有一个入口和出口,在中断处理程序都有一个入口和出口,在CPU的相应寄存器中装入入口的相应寄存器中装入入口参数,在中断请求完毕之后就可通过特定的参数,在中断请求完毕之后就可通过特定的CPU寄存器获得出口参数寄存器获得出口参数返回值。这里需要注意的是,进行中断调用时,在返回值。这里需要注意的是,进行中断调用时,在INT指令中指明的指令中指明的是中断类型号,而在是中断类型号,而在AH或或AL寄存器中装入的是功能号,其余寄存器寄存器中装入的是功能号,其余寄存器在调用中断处理程序前用来保存入口参数,在调用中断处理程序前用来保存入口参数,AH或或AL寄存器与其余寄寄存器与其余寄存器在中断

77、处理完毕后可能保存的是出口参数值。这里可以将存器在中断处理完毕后可能保存的是出口参数值。这里可以将DOS中中断和断和BIOS中断每类不同中断类型号中的各种功能号的调用称为中断每类不同中断类型号中的各种功能号的调用称为DOS功能调用和功能调用和BIOS功能调用。功能调用。 渠般等闽减蘸旦队蒜傈痞有拳吁涡镭诌彼阅回卖娜榴骨讣块捣钟囱场咆奠汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.2.3软件中断的访问软件中断的访问v它们一般包含以下步骤,步骤的过程如图它们一般包含以下步骤,步骤的过程如图13-4所示:所示:(1)将调用

78、参数装入指定寄存器;)将调用参数装入指定寄存器;(2)如需功能号,将它装入)如需功能号,将它装入AH寄存器;寄存器;(3)如需子功能号,将它装入)如需子功能号,将它装入AL寄存器;寄存器;(4)按中断类型号使用)按中断类型号使用INT指令调用指令调用DOS或或BIOS中断;中断;(5)检查返回参数是否正确。)检查返回参数是否正确。美纪层山李泥铺查酝释递落诵脚换豺豌诈喷狙狮窘碳踪辆肠脏曙迂显痉碍汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.2.3软件中断的访问软件中断的访问图图13-4n号中断功能调用步骤号中断功能调用

79、步骤演示动画演示动画无振凝腐疮啸化捌陪正服乍鲍跟猪度车脓粳刺躇砧役棋桥拜虎珠舔星魏肪汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.2.3软件中断的访问软件中断的访问v例例如如,DOS系系统统功功能能调调用用的的21H号号中中断断,其其01H号号功功能能调调用是用来从键盘读一个字符到用是用来从键盘读一个字符到AL寄存器,并在屏幕上显示。寄存器,并在屏幕上显示。v该该功功能能调调用用没没有有其其他他入入口口参参数数,只只需需往往AH寄寄存存器器中中装装入入01H,然然后后使使用用INT 21H指指令令,则则调调用用完完毕

80、毕后后,出出口口参参数数AL寄寄存存器器中中就就存存放放了了从从键键盘盘读读入入字字符符的的ASCII码码。可可以以根根据需要对据需要对AL中的值作进一步的处理。中的值作进一步的处理。v再再如如,21H号号中中断断的的02H号号功功能能是是在在显显示示器器上上显显示示输输出出一一个个字字符符,其其入入口口参参数数为为在在DL寄寄存存器器中中存存放放待待显显示示字字符符的的ASCII码码;又又如如,21H号号中中断断的的4CH号号功功能能调调用用是是用用来来结结束程序等。束程序等。酌枝腮逼俏臃膊啡莆咀涎郸鸿疚笺祟污挝上摧桔岔典萄是壹淤奈忽像窃臭汇编语言程序设计第十三章:中断及中断处理程序汇编语言

81、程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.2.3软件中断的访问软件中断的访问v例例13-1DOS系统功能调用示例系统功能调用示例v题目:输入一个字符,原样输出该字符题目:输入一个字符,原样输出该字符v设计思路:设计思路:INT 21H的的1号、号、2号功能调用,分别完成输入输出号功能调用,分别完成输入输出v源程序(源程序(Ex13-1.asm)如下:)如下: CODE SEGMENT ASSUME CS:CODE START:MOV AH,01H INT 21H ;此时此时AL寄存器中为键盘读入字符的寄存器中为键盘读入字符的ASCII码码 MOV DL,AL ;将

82、将AL的值送的值送02H号功能的入口参数寄存器号功能的入口参数寄存器DL MOV AH,02H INT 21H MOV AH,4CH INT 21H CODE ENDS END STARTv程序说明:程序说明:DOS功能调用及其参数设置详见参考资料功能调用及其参数设置详见参考资料26。 DOS中断和中断和BIOS中断是软件中断中两类比较重要的中断,本章下面的内容将重点介绍中断是软件中断中两类比较重要的中断,本章下面的内容将重点介绍这两类中断。这两类中断。夕檬冷围句贡戮沼拆絮哑寨臣稿烁搽陌哀购代呻员韭苞追墟统逼悼江盲粳汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中

83、断处理程序南开大学南开大学 朱耀庭朱耀庭13.3DOS中断服中断服务务 DOS中断服中断服务务的概念的概念 常用的常用的DOS中断中断 13.3.113.3.2适杉获魂万害苗乡汉问晾部篡征拯沦离砒体尸郑最正耘咆叶圾示靠多悦议汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.3.1DOS中断服中断服务务的概念的概念 v中中断断类类型型号号20H27H为为DOS所所使使用用的的中中断断,28H3FH为为DOS所保留。所保留。v用用户户可可以以通通过过INT 20HINT 27H进进入入DOS中中断断服服务务程程序序,称其为对

84、称其为对DOS中断服务程序的调用。中断服务程序的调用。v同同样样通通过过对对入入口口参参数数的的选选择择而而调调用用INT 20HINT 27H服服务务程程序序的的内内部部子子程程序序时时,称称这这一一调调用用为为DOS内内部部功功能能调调用用,简称简称DOS功能调用。功能调用。肋舍格币溶氯讲凯淘坷炊嘉吹拍讫坟抖潞痉多爬绒赂植预帜紫什疆啤歼周汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.3.2常用的常用的DOS中断中断 v例例13-2DOS 25H号中断,按逻辑扇区读盘号中断,按逻辑扇区读盘v题目:从驱动器题目:从驱

85、动器A中的磁盘中逻辑中的磁盘中逻辑0扇区开始读入一个扇区扇区开始读入一个扇区的信息,然后按十六进制的形式显示该扇区的前的信息,然后按十六进制的形式显示该扇区的前8个字节。个字节。v设计思路:用设计思路:用DOS 25H号中断读盘号中断读盘 例例13-2DOS 25H号中断,按逻辑扇区读盘号中断,按逻辑扇区读盘v程序说明:程序说明: 运行结果为:运行结果为:EBH 3CH 90H 44H 4FH 53H 56H 4DH 在在Debug环境下读者也可以直接应用环境下读者也可以直接应用Debug命令命令“L 0 0 0 1”和命和命令令“d 0”,看到,看到A盘的前盘的前8个字节为个字节为EBH 3

86、CH 90H 44H 4FH 53H 56H 4DH,以验证本程序执行的正确性。,以验证本程序执行的正确性。馏公铜贤夸祥绒斌孤乱邦绒坪源睡爵君缸榜码合赘汪轻瘁嘻干融贺仆缸隙汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.4BIOS中断服中断服务务BIOS的概念的概念 BIOS中断服中断服务务的概念的概念 13.4.113.4.213.4.3常见的常见的BIOS中断中断 觉累潦遗舆灰蚜脏硕楚科锁口记箭青嚏燥铭亨信灿定西鼠淆渺漾竿诡邓出汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序

87、南开大学南开大学 朱耀庭朱耀庭13.4.1 BIOS的概念的概念 vBIOS即即Basic Input/Output System,指的是基本,指的是基本输输入入/输输出系出系统统。它是一。它是一组组底底层层的基的基础软础软件程序。当件程序。当执执行行设备驱设备驱动动模模块块或或进进行字符行字符级级I/O操作操作时时,它,它为为用用户户提供了一个相提供了一个相对对简单简单的的编编程接口,使用程接口,使用户户能在不涉及能在不涉及设备设备地址及工作特性地址及工作特性的情况下的情况下编编程,从而避免了了解程,从而避免了了解设备设备状状态态和必和必须编须编制复制复杂杂程序的麻程序的麻烦烦。同。同时时,

88、BIOS形成了程序与硬件之形成了程序与硬件之间间的的缓缓冲,冲,从而保从而保证证了用了用户软户软件在某种程度上的兼容性。件在某种程度上的兼容性。vBIOS驻驻留在系留在系统统板的只板的只读读存存储储器器ROM中,中,计计算机加算机加电电后,后,可以随可以随时调时调用用BIOS程序。程序。BIOS程序独立于任何操作系程序独立于任何操作系统统,因此无因此无论该计论该计算机是运行算机是运行DOS还还是是UNIX等其他操作系等其他操作系统统,用用户户都可以都可以调调用用这这些服些服务务程序。程序。迟楔俩锋智丁疆霞哑腿纲孵喳散耸琶集抡横米摔皑绅圈塌租踢涛励锻掳庇汇编语言程序设计第十三章:中断及中断处理程

89、序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.4.2BIOS中断服中断服务务的概念的概念 vBIOS中中断断类类型型中中1BH,1CH为为伪伪中中断断,1DH1FH为为BIOS的的参参数数表表,10H1AH则则对对应应不不同同的的BIOS例例行行中中断断服服务务程程序序。用用户户可可以以通通过过使使用用INT 10HINT 1AH进进入入中中断断服服务务程程序,序,这这个个过过程就称程就称为为BIOS中断服中断服务务程序程序调调用。用。v在在使使用用不不同同的的BIOS中中断断号号作作BIOS中中断断调调用用时时,如如果果需需要要设设置置入入口口参参数数,进

90、进而而通通过过不不同同的的入入口口参参数数使使用用相相应应中中断断服服务务内内部部的的子子程程序序时时,就就称称为为该该中中断断类类型型的的BIOS功功能能调调用用。常用的常用的BIOS功能功能调调用有用有INT 10H号功能号功能调调用。用。v前面的表前面的表13-3中列出了常中列出了常见见的的BIOS中断中断类类型。型。翼滩说悲园瘫谦骇街兼马瘦咙道蘑匆姿疙瞪就灶杏找越湿歹呀播鼎湾炽甚汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.4.3常见的常见的BIOS中断中断 vBIOS固化在固化在ROM中,中,对对用用户户程

91、序来程序来说说可由特定指令可由特定指令INT n(n为为中断号)通中断号)通过软过软件中断的方式使用,件中断的方式使用,这这种工作方式,种工作方式,称称为为BIOS中断服中断服务务程序的程序的调调用。用。v通常把指令通常把指令INT 10H就称就称为为BIOS功能功能调调用,用,这类这类似于似于INT 21H在在DOS功能功能调调用中的地位。用中的地位。这这里的功能里的功能调调用是指通用是指通过过入口参数的入口参数的选择选择来使用中断服来使用中断服务务程序中的内部功能。程序中的内部功能。背藩铀征佛衍撰索诧巳拥蒜腊狮溯看拂苗眷来洞塔率菠卷矢钡邦奈隋橡刚汇编语言程序设计第十三章:中断及中断处理程序

92、汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.4.3常见的常见的BIOS中断中断v例例13-3屏幕显示方式的设置屏幕显示方式的设置v题目:设置显示方式为题目:设置显示方式为320200彩色,并画彩条彩色,并画彩条v设计思路:调用设计思路:调用INT 10H BIOS功能调用作图功能调用作图 例例13-3屏幕显示方式的设置屏幕显示方式的设置v程序说明:程序说明: BIOS功能功能调调用用INT 10H 的参数的参数设设置置 论哩鳃乒镣贯裴耕篡腆篆俘赃柜脆揽篆篷包狼蛊姓志活哄券道蔷撂耳蹄惰汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及

93、中断处理程序南开大学南开大学 朱耀庭朱耀庭13.5DOS和和BIOS功能功能调调用用实实例例例例13-4DOS21H号中断号中断0AH号功能号的调用号功能号的调用 例例13-5BIOS16H号中断号中断00H号功能号的调用号功能号的调用 例例13-6 在单色显示方式下以闪烁白色背景高亮下划线方在单色显示方式下以闪烁白色背景高亮下划线方式显示式显示5个字符个字符“A” 例例13-7 图像显示方式下作图实例图像显示方式下作图实例 例例13-8 BIOS 10H号中断号中断01H号功能与号功能与02H号功能调用号功能调用例例13-9 BIOS10H号中断号中断06H号功能调用,上卷屏幕号功能调用,上

94、卷屏幕 例例13-10 BIOS 10H号中断号中断13H号功能的调用号功能的调用 谗膛得之附勺桔百厩悄补忿贫烙刑嗽功摩洒缩挝疹烃钻轮蔷撮屉胎绪稚界汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.5DOS和和BIOS功能功能调调用用实实例例例例13-11 在屏幕上动态显示文本鼠标的位置在屏幕上动态显示文本鼠标的位置 例例13-12 设置当前盘号为设置当前盘号为B,读取当前盘号并显示,读取当前盘号并显示 例例13-13 建立一个文件控制块建立一个文件控制块FCB后,建立文件后,建立文件NKU.TXT 例例13-14 建立

95、文件控制表后删除文件建立文件控制表后删除文件NKU.TXT 例例13-15 由程序建立的由程序建立的FCB指定被读文件名参数,顺序读,指定被读文件名参数,顺序读,然后显示,功能与然后显示,功能与DOS下的下的TYPE命令类似命令类似 例例13-16 利用扩充文件功能,建立文件并进行读写操作利用扩充文件功能,建立文件并进行读写操作 例例13-17 将文件将文件HIDDEN.ASM 变成隐含文件变成隐含文件 醛胶代咨题戎济罩关撤幽镣句街宠绽冻港输绦黔侨懂寐锤嗣姜曳黍耘惹钧汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.6

96、典型的中断典型的中断处处理程序理程序实实例例中断处理程序的编程原则中断处理程序的编程原则 读取和设置中断向量读取和设置中断向量 13.6.113.6.2秃阔犊匝易社稀嫉裹吗匙抓近蛛锌颖诬属棠逢奖描卢螺柒遁盅影宦喜精淘汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.6.1中断处理程序的编程原则中断处理程序的编程原则 v在编写中断处理程序时要时刻遵守以下的原则在编写中断处理程序时要时刻遵守以下的原则:(1)由于中断是异步发生的,当它进入时并不考虑系统当)由于中断是异步发生的,当它进入时并不考虑系统当前运行的状态,所以中断处

97、理程序必须具有自我保护的能前运行的状态,所以中断处理程序必须具有自我保护的能力,并能访问到所有当前段基址和堆栈指针,否则一旦出力,并能访问到所有当前段基址和堆栈指针,否则一旦出现异常情况就难以排除。现异常情况就难以排除。(2)在应用具体的中断处理程序之前,应先初始化要处理)在应用具体的中断处理程序之前,应先初始化要处理的中断向量,使该向量指向相应的中断处理程序。注意,的中断向量,使该向量指向相应的中断处理程序。注意,在修改中断向量时,要先关中断以防止发生由其他中断造在修改中断向量时,要先关中断以防止发生由其他中断造成的不可预测的后果,在初始化完毕后再开中断。成的不可预测的后果,在初始化完毕后再

98、开中断。掏织角民吾啮撤却木公抖腹托让恰婪蛮昌督籍附液褒长沃师屹客广李檄鸿汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.6.1中断处理程序的编程原则中断处理程序的编程原则 v在编写中断处理程序时要时刻遵守以下的原则在编写中断处理程序时要时刻遵守以下的原则: (3)当)当CPU响应一个中断时(包括硬件中断和软件中断)响应一个中断时(包括硬件中断和软件中断),中断处理程序接受控制的系统状态是相同的,即状态标,中断处理程序接受控制的系统状态是相同的,即状态标志字、志字、CS和和IP进栈保存并关中断。因而中断处理程序在保进栈保

99、存并关中断。因而中断处理程序在保护好现场后,必要时应立即开中断,以允许高级中断产生。护好现场后,必要时应立即开中断,以允许高级中断产生。(4)开发用以替换系统内中断处理程序或系统异常的中)开发用以替换系统内中断处理程序或系统异常的中断处理程序时,必须遵守系统的有关约定,以免破坏系统断处理程序时,必须遵守系统的有关约定,以免破坏系统向量或使向量或使DOS处于不稳定状态。处于不稳定状态。(5)现在所使用的)现在所使用的DOS版本是不支持重入的,所以在版本是不支持重入的,所以在DOS下运行一个外部硬件中断处理程序时,程序中绝对不下运行一个外部硬件中断处理程序时,程序中绝对不允许使用允许使用INT 2

100、1H。汗廉粉泊砖择菌洪磷龋铰掘曝褪游涧鲍足砒噎奶碴艘醇萝赖哦瘤幼秦于夹汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.6.2读取和设置中断向量读取和设置中断向量 v中断向量是系统用来存放中断服务程序或系统参数的入口中断向量是系统用来存放中断服务程序或系统参数的入口地址。地址。v在通常情况下,程序员不需要对中断向量表作任何操作,在通常情况下,程序员不需要对中断向量表作任何操作,但在开发程序时,若要为某种特殊需要而提供新的中断处但在开发程序时,若要为某种特殊需要而提供新的中断处理程序时,就必须操作中断向量表。理程序时,就必

101、须操作中断向量表。惋懈中瓜掏捏甲发檬赘抄蓬栓邀胶辊翟瘪舔晋丽摩陶染孔此搔磊箕乞屎妒汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭13.6.2读取和设置中断向量读取和设置中断向量读取中断向量读取中断向量 1设置中断向量设置中断向量 2修改中断向量的步骤修改中断向量的步骤 3港顽啪稼常冶上船掠畦鹅憨瓷棋煌籍桅穴疡唯幌劫父诅邮楷膛簧据色妥架汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭1.读取中断向量读取中断向量 (1)DOS功能功能调调用的方法用的方法vD

102、OS提供了用功能提供了用功能调调用的方法来用的方法来读读取中断向量的功能,例取中断向量的功能,例如,其中断如,其中断21H的功能的功能35H就能就能读读取指定中断号的入口地取指定中断号的入口地址。其使用参数如下址。其使用参数如下: 入口参数:入口参数:AH35H,AL中断号中断号 出口参数:出口参数:ES:BX中断中断处处理程序的入口地址理程序的入口地址例例13-18用功能调用的方法把中断用功能调用的方法把中断n=5的入口地址的入口地址保存到双字变量保存到双字变量OldAddr中中 弯雷胜悔挝眠逻芋玛疡膊撩纹滩罐解蜂蚁哑叼店降咱邹午墅吞圃互泄吉揩汇编语言程序设计第十三章:中断及中断处理程序汇编

103、语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭1.读取中断向量读取中断向量 (2)直接直接访问访问存存储单储单元的方法元的方法v由前面的知识可知:由前面的知识可知: 中断向量表是存储在内存的第中断向量表是存储在内存的第0段段 若中断号为若中断号为n,那么,其入口地址在表内的偏移量为,那么,其入口地址在表内的偏移量为4n 例例13-19用直接访问存储单元的方法把中断用直接访问存储单元的方法把中断n=5的的入口地址保存到双字变量入口地址保存到双字变量OldAddr中中 惦缅信饱省碳训炉粒镣茁皱毒戈球钮慷搏蹈勇腾间喂苔寝鸦述撮戌莆饭码汇编语言程序设计第十三章:中断及中断处理程

104、序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭2.设置中断向量设置中断向量 (1)DOS功能功能调调用的方法用的方法v中断中断21H的功能的功能25H可可为为指定的中断号指定的中断号设设置新的入口地址。置新的入口地址。v其使用方法如下:其使用方法如下: 入口参数:入口参数:AH中断号,中断号,DS:DX中断中断处处理程序的入口理程序的入口地址地址 出口参数:无出口参数:无例例13-20用功能调用的方法设置中断用功能调用的方法设置中断n的的中断处理程序中断处理程序 棉淤德安掸文掣嘱券跟狈疚唇慌似肥缎躬精缘赊蒂电酥限樱残畏磺蔑糙苗汇编语言程序设计第十三章:中断及中断处

105、理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭2.设置中断向量设置中断向量 (2)直接直接访问访问存存储单储单元的方法元的方法例例13-21用直接访问存储单元的方法设置用直接访问存储单元的方法设置中断中断n的中断处理程序的中断处理程序 v在上面的程序段中,指令在上面的程序段中,指令CLI是一条值得注意的指令,它用来确保是一条值得注意的指令,它用来确保随后两条随后两条MOV指令可以被连续执行而不被打断。这是因为执行第指令可以被连续执行而不被打断。这是因为执行第一条一条MOV指令后,原中断向量表中的入口地址就被破坏了,这时,指令后,原中断向量表中的入口地址就被破坏

106、了,这时,该入口地址既不指向原处理程序,也不指向新处理程序。如果此该入口地址既不指向原处理程序,也不指向新处理程序。如果此刻正巧发生了该类型的中断请求,那么,系统将转向一个非法的刻正巧发生了该类型的中断请求,那么,系统将转向一个非法的位置。如果程序员能确信此时不会发生该类型的中断请求,当然位置。如果程序员能确信此时不会发生该类型的中断请求,当然也就不必插入关中断指令。也就不必插入关中断指令。v后面的指令后面的指令STI是开中断指令,它允许是开中断指令,它允许CPU响应其后的中断请求响应其后的中断请求 涌钢膀盼过寄搓矫儒龋寞窟汀宣权叮杜添努器雌惜放敌箔估巴规照瑶沧爷汇编语言程序设计第十三章:中断

107、及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭3.修改中断向量的步骤修改中断向量的步骤 v在编程的实际过程中,若要修改某个具体的中断处理程序时,一般需在编程的实际过程中,若要修改某个具体的中断处理程序时,一般需要按下面的操作过程来完成:要按下面的操作过程来完成:(1)读取指定中断的中断处理程序的入口地址,并把它保存在存储单元)读取指定中断的中断处理程序的入口地址,并把它保存在存储单元内;内;(2)把用户编写的程序段设置为指定中断的新处理程序;)把用户编写的程序段设置为指定中断的新处理程序;(3)在用户程序结束之前)在用户程序结束之前(或不需要新的处理程

108、序时或不需要新的处理程序时),把步骤(,把步骤(1)保存)保存的入口地址恢复成处理该中断的入口地址。的入口地址恢复成处理该中断的入口地址。 程序员按以上程序员按以上3步来编程,可保证:在其程序运行过程中,该指定的步来编程,可保证:在其程序运行过程中,该指定的中断将按新的处理程序来处理,程序结束后,中断系统又恢复成原来中断将按新的处理程序来处理,程序结束后,中断系统又恢复成原来的处理方式。所以,这种中断向量的改变对其他程序或使用者来说是的处理方式。所以,这种中断向量的改变对其他程序或使用者来说是透明的,当然也就不会影响它们的正常运作。透明的,当然也就不会影响它们的正常运作。下面用一个具体的例子来

109、说明中断程序的写法下面用一个具体的例子来说明中断程序的写法 :例例13-22重写重写INT 5中断处理程序中断处理程序 鸦逛灿严夺垣究侣泳韵翌搬尔尹恢矣跑滚度烈诲犊片扣澄存嗣件涸篇蜀肛汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭-朱耀庭夷溉背贼免捅枝雾斜扯蔓醉立小甚窥花计潮灯杆诀疥裴秩岂湖辊柯注旷贺汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序南开大学南开大学 朱耀庭朱耀庭蒜蓄名物肺呐双甲淬羽氰卯撵粱荣羔馒踊镣洋柒趁膨逮惶高蹿槛皋监奈关汇编语言程序设计第十三章:中断及中断处理程序汇编语言程序设计第十三章:中断及中断处理程序

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号