汇编语言课件第14章中断

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2020年3月2日12020年3月2日12020年3月2日12020年3月2日12020年3月2日12020年3月2日1第14章x86PC的中断系统20:331DECHEXBIN140E00001110汇编语言与接口技术2020年3月2日2第14章x86PC的中断系统学习本章后:1、明确中断的概念2、会处理中断3、会管理和应用中断服务程序4、会编写中断应用程序第14章x86PC的中断系统本章的主要内容:14.18088/86中断14.1.1中断源14.1.2中断服务程序14.2x86PC及中断分配14.3中断应用程序2020年3月2日314.18088/86中断中断概述中断:产生了一种外部事件,通知CPU有设备需要服务。{计算机在执行正常程序的过程中,当出现异常事件或事先安排好的事件,迫使CPU暂时中止现行程序的执行,转去执行另一处理程序。当处理完后,CPU再返回到被暂时中止的程序,接着执行被暂时中止的程序。此过程称为中断。}类型:8088/86中共有256中类型的中断:INT0,INT1,…,INTFF。0,1,…,FF,为中断向量号或者中断类型码。保护:处理中断前保护有关寄存器到固定的内存单元:FR,IP,CS中断服务程序入口:(中断向量号*4)IP(中断向量号*4+2)CS2020年3月2日514.18088/86中断例如:中断向量表(右表)INT0:0号中断除法错INT1:1号中断单步INT2:2号中断NMI14.18088/86中断14.1.1中断源中断源:引起中断的事件。例如:外设输入/输出请求,计算机异常事故或其他内部原因。14.18088/86中断14.1.1中断源(续)中断分类按照引起中断的方式,中断可分为:①硬件中断(或外中断):外设控制器或协处理器引起的中断②软件中断或内中断:程序中的中断指令INT或CPU错误结果产生的中断14.1.1中断源(续)硬件中断由外部硬件产生,也称外部中断硬件中断分两类:非屏蔽中断(NMI:NonMaskableInterrupt)通过8086/8088的NMI脚引入,它不受中断允许标志IF的屏蔽;中断类型号=2可屏蔽中断(MaskableInterrupt)可屏蔽中断通过CPU的INTR脚引入,只有当标志寄存器的中断屏蔽标志IF为1时,才能引起中断开中断指令:STI,设置中断允许位(IF=1)关中断指令:CLI,清除中断允许位(IF=0)14.18088/86中断14.1.1中断源(续)中断数目的扩展:8259可编程中断控制器x86用于中断的引脚INTR,INTA;Intel提供了8259可编程中断控制器芯片,使得扩展中断数目的工作变得很容易。14.18088/86中断2020年3月2日1014.18088/86中断不受中断标志位IF屏蔽:1)非屏蔽中断(NMI):电源错、内存和总线奇偶等异常,中断类型号=22)程序中INT指令、运算结果异常等受中断标志位IF屏蔽:可屏蔽的外部设备中断请求(INTR)0n8259A可编程中断控制器中断逻辑INTR2NMI41CPU不可屏蔽中断请求INTnINTO除法错单步IR0IR1IR3IR4IR5IR6IR7IR2系统定时器(08)键盘(09)彩色/图形接口(0A)串行通讯口2(0B)串行通讯口1(0C)硬盘(并行口)(0D)软盘(0E)打印机(0F)8259A中断级联一片8259A管理8级中断,当申请中断的外设多于8级时可以将8259A级联使用,第一级为8259A主片,第二级为8259A从片,主片可接1~8片8259A从片,这样最多可管理64级中断源。8259A中与中断相关寄存器中断屏蔽寄存器(IMR)中断命令寄存器14.18088/86中断8259A的中断屏蔽寄存器(IMR)IMR的I/O端口地址21H8位对应8个外部设备,允许/禁止某设备产生中断=0时,允许产生中断=1时,禁止产生中断例:只允许键盘中断,设置中断屏蔽字MOVAL,11111101BOUT21H,AL例:新增设允许键盘中断,设置中断屏蔽字INAL,21HANDAL,11111101BOUT21H,ALCPU可以响应某设备的中断服务请求的条件中断屏蔽寄存器中对应位=0,同时IF=1打印机软盘硬盘定时器彩显COM2COM1键盘76502341中断命令寄存器I/O端口地址20H8位含义L2-l0:指定IR0-IR7中哪个中断优先级最低R(rotate),SL(setlevel)控制IR0-IR7中断优先顺序EOI:中断结束,当EOI=1时,将当前中断请求被清除中断服务程序中,中断处理结束前,应将EOI置1结束硬件中断指令INAL,20HORAL,20HOUT20H,ALRSLEOIL0L200L176502341②软件中断②软件中断软件中断也称内部中断,由3种情况引起1.程序中的中断指令INTn操作数n指出中断类型号,0—FFH如INT12H;存储器容量测试2.CPU的某些运行结果除法错中断:除数为零/商超出表数范围,中断类型号为0的内部中断溢出中断:运算结果溢出,OF=1,INTO指令将引起类型为4的内部中断3.调试程序(DEBUG)设置的中断单步中断:标志位TF=1时,中断类型号=1断点中断:将程序分段,每段设置一个断点(INT3),中断类型号=3软件中断不受中断屏蔽标志IF影响14.18088/86中断14.1.2中断服务程序每个中断都有一个相关的程序。发生中断时,要执行该程序完成特定的任务,这个程序称为中断服务程序。中断发生时,CPU自动执行中断服务程序。如何找到中断服务程序?14.1.2中断服务程序x86有256种类型的中断每种中断有一个中断类型号,类型号0-FFH每种类型中断都由相应的中断处理程序处理中断向量表各类型中断处理程序的入口地址表在存储器中,1KB(00000H-003FFH)每类型中断向量占4字节,对应中断处理程序入口CS、IP值每类中断向量表地址=4×中断类型号n类型0中断处理程序入口地址IPCS00000H类型1中断处理程序入口地址IPCS00004H类型2中断处理程序入口地址IPCS00008H类型0中断处理程序入口地址IPCS003FCH类型3中断处理程序入口地址IPCS0000CH003FFH……除法错单步NMI断点INTn中断向量表2020年3月2日18第14章x86PC的中断系统14.18088/86中断14.1.1中断源14.1.2中断服务程序14.2x86PC及中断分配14.3中断应用程序2020年3月2日1814.2x86PC及其中断分配在x86的256种可能的中断中,有些用于PC外设硬件BIOS,有些被操作系统使用,剩下的由软件编程人员使用。14.2x86PC及其中断分配2020年3月2日20中断向量地址表-表示法1--2中断向量地址一览表分类中断类型码地址(0000H段)功能系统内中断(BIOS)00000H~0003H被零除10004H~0007H单步20008H~000BH不可屏蔽3000CH~000FH断点40010H~0013H溢出50014H~0017H打印屏幕60018H~001BH保留7001CH~001FH保留分类中断类型码地址(0000H段)功能系统8级外中断(BIOS)80020H~0023H日时钟90024H~0027H键盘A0028H~002BH保留B002CH~002FH异步通信(2)C0030H~0033H异步通信(1)D0034H~0037H硬盘E0038H~003BH软盘F003CH~003FH打印机分类中断类型码地址(0000H段)功能设备驱动(BIOS)100040H~0043H显示110044H~0047H设备配制120048H~004BH存储容量13004CH~004FH硬盘I/O140050H~0053H通信I/O150054H~0057H盒式磁带I/O160058H~005BH键盘I/O17005CH~005FH打印机I/O180060H~0063HROMBASIC190064H~0067H系统自举1A0068H~006BH日时钟I/O1B006CH~006FH键盘中断地址1C0070H~0073H定时器报时1D0074H~0077H显示器参数1E0078H~007BH软盘参数1F007CH~007FH图形字符扩展分类中断类型码地址(0000H段)功能DOS20~2F0080H~00BFHDOS调用30~3F00C0H~00FFH为DOS保留这些功能可以用中断方式调用INTn存取中断向量的DOS功能调用(21H)设置中断向量预置:AH=25HAL=中断类型号DS:DX=中断向量(中断程序入口地址)执行:INT21H取中断向量预置:AH=35HAL=中断类型号执行:INT21H返回:ES:BX=中断向量(中断程序入口地址)*如何读取/改变中断向量表中的中断程序入口地址(中断向量)例8.4使用DOS功能调用存取中断向量…MOVAL,NMOVAH,35HINT21HPUSHESPUSHBXPUSHDSMOVAX,SEGINTHANDMOVDS,AXMOVDX,OFFSETINTHANDMOVAL,NMOVAH,25HINT21HPOPDS……POPDXPOPDSMOVAL,NMOVAH,25HINT21HRET用户自定义中断程序INHAND:……IRET保存原中断向量设置新中断向量恢复原中断向量取中断向量预置:AH=35HAL=中断类型号执行:INT21H返回:ES:BX=中断向量设置中断向量预置:AH=25HAL=中断类型号DS:DX=中断向量执行:INT21H2020年3月2日25第14章x86PC的中断系统14.18088/86中断14.1.1中断源14.1.2中断服务程序14.2x86PC及中断分配14.3中断应用程序2020年3月2日2514.3中断应用程序本节通过举例说明中断应用程序的编写方法。例子1.用户自定中断程序设计方法例子2.利用系统提供的中断的中断程序设计方法14.3中断应用程序例1.用户自定义中断完成AL中的数据显示,中断类型号78H(保留);主程序中设置中断向量MOVAX,segint78MOVDS,AXMOVDX,offsetint78MOVAH,25HMOVAL,78HINT21H;中断处理程序int78:………;中断服务功能处理;显示AL中的高四位;显示AL中的低四位IRET参看INTEXP.ASM14.3中断应用程序例2要求每10秒响铃一次,并显示“Thebellisring!”要点:如何设计中断处理程序;如何进入中断处理程序系统定时器中断处理程序INT1CHIRETIRETBIOS中可用资源:系统定时器(中断类型8,每秒中断18.2次)系统定时器的中断处理程序中,有一条指令INT1CH,但嵌套调用后BIOS中只有IRET指令。用户可实现完成某些周期性工作,但影响系统时钟系统定时器中断处理程序INT1CHIRETIRETBIOS中系统定时器中断处理程序INT1CHIRETIRET我们的中断程序设计中断处理程序系统定时器中断10*18.2=182=B6H次,响铃一次,并显示“Thebellisring!”系统定时器中断中读时钟,如果到10秒,响铃一次,并显示“Thebellisring!”如何进入中断处理程序改变INT1CH的中断向量,使系统定时器中的嵌套中断指向我们设计的中断处理程序将我们设计的中断处理程序放在INT1CH嵌套调用的BIOS处替换掉IRET指令。BIOS是固件,不可行在INT1CH嵌套调用的BIOS中将IRET指令替换为跳转指令,指向我们设计的中断处理程序。要修改编译内核中断类型1CH作为用户使用的中断类型,可能已被其他功能的程序使用,所以在编写新的临时中断程序时,应做如下工作:1、在主程序的初始化部分,先保存当前1CH的中断向量,再设置新的中断向量。2、在主程序结束部分恢复保存的1CH中断向量。类型0中断处理程

1 / 33
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功