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

上传人:xian****hua 文档编号:244975194 上传时间:2024-10-06 格式:PPT 页数:72 大小:1.07MB
返回 下载 相关 举报
《汇编语言程序设计》第十三章中断及中断处理程序_第1页
第1页 / 共72页
《汇编语言程序设计》第十三章中断及中断处理程序_第2页
第2页 / 共72页
《汇编语言程序设计》第十三章中断及中断处理程序_第3页
第3页 / 共72页
点击查看更多>>
资源描述
单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,南开大学 朱耀庭,单击此处编辑母版标题样式,汇编语言程序设计,-,朱耀庭,第,13,章中断及中断处理程序,中断在计算机科学中占有十分重要的地位,是计算机科学中最基本的概念之一。如果没有中断以及中断机制的引入与应用,就不可能有计算机操作系统的出现,也就不可能有今天如此高效率的计算机。使用计算机时,操作健盘、移动鼠标之所以能够被计算机感知并且予以及时响应处理,这完全得益于计算机的中断处理。,本章将重点介绍,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,中断及中断相关概念,中断的基本概念,中断向量表,中断源及中断源的识别,中断的分类,中断处理机制,CPU,响应中断的条件,中断的优先级,南开大学 朱耀庭,中断的基本概念,在计算机系统中,引入中断的最初目的是为了提高系统的输入输出性能,随着计算机应用的发展,中断技术也应用到计算机系统的许多领域,如:多道程序、分时系统、实时处理、程序监视和跟踪等领域。,中断就是使中央处理器暂时挂起当前正在进行的工作程序,转向某紧急事件的服务与处理程序,并在执行完该服务与处理程序后,再返回到曾经被其中止和挂起的原有程序处继续完成原有工作的整个过程。,南开大学 朱耀庭,中断向量表,在中断发生后,中断处理程序需要对因各种原因触发的相应中断进行处理。,80X86,中断系统能处理,256,种类型的中断,同时给每种中断安排了一个中断类型号,即,0H0FFH,号中断,每种类型的中断都有相应的中断处理程序。,如何有效地管理和保存如此多的中断及其对应的中断处理程序呢?那就是利用中断向量表。,中断向量表是一个特殊的线性表,它保存着系统所有中断服务程序的入口地址。,在,80X86,微机系统中,该表保存的,256,个中断向量分别对应于,256,种中断类型,每个表项占,4,个字节,其中两个字节存放中断处理程序的段地址,另两个字节存放中断处理程序的段内偏移量,所以中断向量表为,1K,字节,它起止于存储器中地址,0000H3FFH,处,如图,13-1,所示,:,南开大学 朱耀庭,中断向量表,图,13-1,中断向量表,南开大学 朱耀庭,中断向量表,各个中断处理程序的入口地址在中断向量表中是按中断类型号顺序存放的,因此将中断类型号乘以,4,就得到对应中断向量的地址。,例如,溢出中断的中断类型号为,04H,,则它的中断向量的地址为,04H4=10H,,内存地址从,10H,开始的,4,个字节中,,10H,和,11H,两字节中存放溢出中断程序的偏移地址,,12H,和,13H,两字节中存放溢出中断程序的段地址,在发生溢出中断时,将这个偏移地址和段地址分别取出送给寄存器,IP,和,CS,,,CPU,即转向溢出中断处理程序。,南开大学 朱耀庭,中断向量表,表,13-1,中断类型号和中断向量地址,中断类型号,中断向量地址,中断的含义,00H1FH,00000H0007FH,BIOS,中断向量,20H3FH,00080H000FFH,DOS,中断向量,40H5FH,00100H0017FH,扩充,BIOS,中断向量,60H67H,00180H0019FH,用户中断向量,68H6FH,001A0H001BFH,保留,70H77H,001C0H001DFH,I/O,设备中断向量,78H7FH,001E0H001FFH,保留,80H0FDH,00200H003C3H,BASIC,0F1H0FFH,003C4H003FFH,保留,南开大学 朱耀庭,中断向量表,图,13-2,以,DOS,中断,INT 20H,为例,说明,CPU,处理各类中断的过程,该过程主要包括以下,5,个步骤:,(,1,)取中断的中断类型号,(,2,)计算中断向量地址,(,3,)取出中断向量,4,字节单元中的内容,将其中两字节代表中断处理程序段地址的内容送入,CS,寄存器,两字节代表中断处理程序偏移量的内容送入,IP,寄存器,(,4,)转向相应的中断处理程序,(,5,)中断返回到原中断指令的下一条指令处,南开大学 朱耀庭,中断向量表,图,13-2,中断处理过程,演示动画,注意:,这里假设被中断的程序的下一条指令是“,MOV AX,,,0”,,事实上也可能是其他指令,南开大学 朱耀庭,中断源及中断源的识别,在中断过程中,我们称引起紧急事务的事件为中断源,计算机系统有上百种可以发出中断请求的中断源,但最常见的中断源是:外设的输入,/,输出请求,例如,键盘输入引起的中断,通信端口接收信息引起的中断等,还有一些计算机内部的异常事件,例如,,0,作除数、奇偶校验错等,80X86,的常见中断源如图,13-3,所示:,南开大学 朱耀庭,中断源及中断源的识别,图,13-3,80X86,中断源,演示动画,南开大学 朱耀庭,中断源及中断源的识别,常见的中断源大致分为,CPU,外部产生的中断和,CPU,内部产生的中断。其中外部中断源包括通过,NMI,引脚传递的非屏蔽中断请求产生的中断和通过,Intel 8259A,可编程中断控制器的,INTR,引脚传递的由外部设备产生的中断等。,CPU,内部中断则包括除法出错中断、单步中断、,INTO,指令产生的溢出中断和程序中安排的,INT n,中断指令产生的中断等。,外部设备的中断通过,8259A,的,INTR,引脚给,CPU,传送中断信号,,8259A,还可以使用级联的方式增加连接的外部设备数目。如此多的中断源,,CPU,是如何确定,INTR,引脚上的中断信号是来自中断源中的哪一个呢?,CPU,是通过一定的查询电路来完成的。,南开大学 朱耀庭,中断源及中断源的识别,查询中断识别法,1,向量中断识别法,2,南开大学 朱耀庭,1.,查询中断识别法,查询中断识别法主要是软件查询法,在接受中断请求信号之后,中断识别程序逐个查询连接到系统上的每个设备。当被检查设备的中断请求触发器被置位时,中断识别程序便转向相应的中断服务程序的入口地址处。,对于中断源较多的大系统来说,查询中断花费在查询上的时间就太多了,并且还需要有附加的中断识别程序,因此多数系统采用另一种更加方便、快速的中断识别方法,向量中断识别法。,南开大学 朱耀庭,2.,向量中断识别法,向量中断识别法要求输入,/,输出设备提供中断信号和设备的标识码,即中断向量,或者提供中断服务程序的入口地址。当,CPU,响应了某设备的中断请求后,控制逻辑就将该设备的中断服务程序的地址传送至,CPU,,使,CPU,跳转到相应的中断服务程序,进而完成中断服务。,向量中断识别虽然识别中断源十分快捷,但它需要增加硬件的开销,因此将查询中断识别法和向量中断识别法结合起来使用效果会更好。目前有许多计算机系统就是这样做的。,南开大学 朱耀庭,中断的分类,计算机系统有上百种中断,如何对这些中断的类型进行划分呢?,由图,13-3,中,80X86,系统的常见中断源可知,可以将中断按中断源划分为内部中断和外部中断。,按中断源的特性,中断也可以分为硬件中断和软件中断。,硬件中断按中断的屏蔽性质,又可以分为可屏蔽中断和不可屏蔽中断。,下面详细介绍一下这几种划分以及它们之间的相互关系。,南开大学 朱耀庭,中断的分类,外部中断,1,内部中断,2,南开大学 朱耀庭,1.,外部中断,外部中断一般是指外部硬件中断,它是处理器外部的硬件设备产生而发向处理器的中断。它分为可屏蔽中断和不可屏蔽中断两种,分别由,INTR,引脚和,NMI,引脚的信号触发。,(,1,)不可屏蔽中断,不可屏蔽中断是用来处理一些紧急情况,如电源故障、内存或,I/O,总线的奇偶错误等异常事件。它不能由用户通过指令进行屏蔽,也不受中断允许标志,IF,的限制。一旦,CPU,接收到,NMI,引脚上的信号,就必须立即响应,转向,NMI,的中断服务程序,硬件将自动完成断点保护和现场保护,并在中断返回时执行一条,RETN,指令。,南开大学 朱耀庭,1.,外部中断,(,2,)可屏蔽中断,可屏蔽中断通常来自外部设备,可以通过指令设置中断控制器的屏蔽参数来禁止某些指定的中断。例如中断控制器,8259A,有,IR0IR7,共,8,级中断,,8259A,接收来自外设的中断请求信号,并将中断源的中断类型号发送到,CPU,。在外设发出中断请求到,CPU,响应中断的过程中有两个控制条件:一是该外设的中断请求是否被屏蔽,该条件由,8259A,的中断屏蔽寄存器,(IMR),控制;另一个是,CPU,是否允许响应中断,该条件由,CPU,的标志寄存器,(FLAGS),中的中断允许位,IF,来控制。,可以通过置中断屏蔽寄存器来屏蔽相应的中断申请。,8259A,的中断屏蔽寄存器,I/O,端口地址是,21H,,该寄存器的,8,位对应控制,8,个外部设备。若某位为,0,,表示允许该位对应外设的中断请求;若某位为,1,,则表示该位对应外设的中断请求被屏蔽。,南开大学 朱耀庭,1.,外部中断,例如,如图,13-3,所示,假设只允许系统定时器中断,系统定时器的中断请求对应,8259A,的,IRQ0,,于是可如下设置中断屏蔽寄存器:,MOVAL,11111110B,OUT21H, AL,CPU,是否响应外设发出的中断请求还与标志寄存器中的中断标志位,IF,有关。,IF,为,0,,,CPU,禁止响应任何外设请求的中断;,IF,为,1,,则,CPU,可以响应外设的中断请求。在程序中可以通过以下两条指令来设置和清除,IF,位。,STI;,开中断,,IF=1,CLI;,关中断,,IF=0,在任何类型的中断发生时,,CPU,将当前的,FLAGS,入栈,并置,IF,为,0,,然后进入中断处理程序。当中断处理程序完成,执行到中断返回指令,IRET,时,从栈中恢复原,FLAGS,的值,将,IF,置,1,,这时允许新的中断发生。如果需要在一个中断处理程序的执行过程中允许响应另外的中断,也可以使用开中断指令,STI,。,南开大学 朱耀庭,2.,内部中断,内部中断主要包括内部硬件中断和软件中断,内部硬件中断是指由某些特殊指令触发的中断,如单步中断,除法出错中断,溢出中断,软件中断则是指由指令,INT n,引起的非屏蔽中断,如,DOS,中断、,BIOS,中断和其他自由中断,南开大学 朱耀庭,2.,内部中断,(,1,)除法出错中断,除法错的中断类型号为,0,。除法运算中除数不能为,0,,因此在程序中不慎写入了除数为零的除法运算,就会产生除数为零的中断。还有一种情况,那就是在除法运算中,所得的商大于某一确定的极值也将引起除法出错中断。例如:,MOV DX,34H,MOV AX,5678H,MOV BX,1,DIV BX,上面的,4,条指令,是一个双字除以字的运算。结果将商放在,AX,寄存器中,余数放在,DX,寄存器中。对于无符号数商的最大允许值为,65535,,而这里除数,BX,为,1,,所以商,345678H,必然大于,65535,,因此也将产生一个除法错误。,南开大学 朱耀庭,2.,内部中断,(,2,)溢出中断,溢出中断的中断类型号为,4,。在指令序列中,若上一个指令由于某些特殊的原因使溢出标志,OF,置,1,,那么当执行溢出中断指令,INTO,时会立即产生,04H,类中断,若,OF,标志为,0,,则,INTO,不起作用。,(,3,)单步中断和断点中断,在使用,DEBUG,调试程序时,会经常使用到,T,命令和,P,命令,而这两个命令的执行恰好是利用了内部硬件中断之一的单步中断,INT 01H,和断点中断,INT 03H,,它的特征是将陷阱标志,TF,置位,这样当程序运行时,会在每一条指令的后面产生一个单步中断,从而终止指令的继续执行。,南开大学 朱耀庭,2.,内部中断,(,4,)软件中断,CPU,在执行完一条,INT n,指令后,就会立即产生,n,类软件中断,调用系统中相应的中断处理程序完成中断的功能。其中,INT n,指令的,n,为中断类型号。,例如,对系统定时器进行控制,则可以在程序中安排一条中断指令:,INT1CH,当,CPU,执行到这条指令时,则从中断向量表中,1CH4=70H,至,73H,处取,4,个字节的内容(它们是中断服务程序的偏移量和段地址),自动将其送到,IP,和,CS,,然后转向对应的中断服务程序。,INT,指令可以指定,0H0FFH,中的任何中断类型号。除系统占用的中断类型号外,用户可以利用保留的中断类型号扩充新的中断处理功能。,南开大学 朱耀庭,中断处理机制,计算机系统中的中断源大致可分为几类,如一般的,I/O,设备、软件中断、实时钟、故障源等。一个中断系统如果要合理地响应如此多的中断源,就需要具备以下十分完善的“中断处理机制”。,(,1,)当中断源向,CPU,发出中断请求时,,CPU,能有权决定是否响应此中断请求,在响应中断请求的情况下要能保护断点,中断处理程序执行完毕后能够正确返回断点处继续执行。,(,2,)中断应具有优先级。在某一时刻如果有许多中断源同时发出中断请求,,CPU,应能够实现中断优先级排队,即按中断请求的级别来决定先响应哪一个中断,保证首先响应优先级高的中断请求,但同时又要防止低级中断源的中断请求一直得不到,CPU,响应的现象出现。,南开大学 朱耀庭,中断处理机制,(,3,)能够实现中断的嵌套。中断源向,CPU,发出的中断请求是连续不断的,即使已经是响应了某个中断请求而进入相应的中断服务程序,如果这时又有了一个级别更高的中断请求,,CPU,应该能暂时挂起正在进行的中断服务程序,转而去响应更高优先级的中断请求,响应结束后再返回到原中断处理程序。例如当自己编写的中断服务程序中用到,DOS,或,BIOS,提供的中断时,它们就相当于更高级别的中断请求,当,CPU,响应并进入自己编写的中断服务程序时,如果遇到,DOS,或,BIOS,中断,就需暂时挂起自己的中断服务程序转而去响应,DOS,或,BIOS,中断。,南开大学 朱耀庭,CPU,响应中断的条件,CPU,一般是在执行现行指令的最后一个机器指令周期时检测是否有中断请求的,所以在硬件上需要每个中断源都接有一个中断请求触发器,以便能够将中断源产生的中断请求信号锁存起来,并保持到,CPU,检测完之后。,同时,为了在多个中断源请求中断的情况下能够增加控制的灵活性,在硬件上还需要一个中断屏蔽触发器,以决定中断请求被通过还是被屏蔽。,此外,在,CPU,内部还要有一个中断允许触发器,它可以通过,STI,和,CLI,指令来设置。即通过,STI,开中断,使,CPU,能正常响应中断源的中断请求;而通过,CLI,关中断,使,CPU,不响应任何中断请求。,南开大学 朱耀庭,CPU,响应中断的条件,因此,,CPU,响应某个中断请求须满足以下,3,个条件:,(,1,)中断源置中断请求触发器。由于,CPU,在每条指令周期结束时才检测是否有中断请求信号,所以中断请求触发器包含一个锁存器,它将中断请求信号锁存起来直到,CPU,来检测之后再清除。,(,2,)中断源的中断屏蔽触发器未被置位,否则该中断源的所有中断请求将被屏蔽掉。若干中断源的屏蔽触发器可以组成一个中断屏蔽寄存器。,(,3,),CPU,内的中断允许触发器置位。当,CPU,响应中断之后,,CPU,自动将中断允许触发器复位,即关中断。因此,在中断服务程序中,保护现场后一般情况下应该使用,STI,指令开中断,使,CPU,能够继续响应来自其他中断源的更高级别的中断请求,来实现所谓的中断嵌套。,当上述,3,个条件都满足时,如果此时,CPU,正好处在指令周期的结束并检测到有中断请求时,那么就响应中断并进入中断响应周期。,南开大学 朱耀庭,中断的优先级,多数中断是随机发生的,所以必然会出现某一时刻有多个中断源同时请求中断的情况。,CPU,在某一时刻只能处理一个中断,因此,它需要决定首先为哪一个中断源服务。,CPU,根据中断源请求的轻重缓急,预先定义好中断处理的优先级,首先响应紧急的、级别高的中断请求,然后响应级别轻缓的中断请求。,当,CPU,正在处理某一中断时,它还应该能够响应优先级更高的中断请求,而屏蔽掉同级或较低级的中断请求。,南开大学 朱耀庭,中断的优先级,软件查询法,1,硬件查询法,2,南开大学 朱耀庭,1.,软件查询法,软件查询优先级的方法十分简单,它将所有外设的中断请求触发器组合成一个寄存器端口。,当,CPU,接收到中断请求信号时,由一个查询程序来逐位检测中断请求寄存器的状态。先被检测的位,它所对应的中断源是高优先级的;后检测的位,它所对应的中断源是低优先级的。,由于软件查询法是通过程序实现查询的,所以当中断源较多时软件查询的时间就会较长。,南开大学 朱耀庭,2.,硬件查询法,硬件查询是一种广泛使用的中断优先级排队方式,它通过使用优先权控制器,(PIC),莱实现优先级排队。优先权中断控制器是由优先权编码器和比较器等构成的电路,再加上中断请求寄存器、中断屏蔽寄存器共同组成了一个比较完整的中断控制系统。,优先权控制器,PIC,可同时接收,8,个中断输入。与每一个中断请求位对应的有一个中断屏蔽位,程序设计者可以对中断屏蔽寄存器编程以选择允许的中断。这样可以灵活地调整中断优先级,并可防止出现低级中断永远也得不到响应的情况出现。没有被屏蔽掉的请求信号被送往优先级编码器,其中具有高优先级的中断级由一个,8-3,编码器转换成,3,位码,用这个,3,位码与,3,位的优先级寄存器进行比较,这个,3,位的优先级寄存器是由用户自己设定的。用户设定了某一值后,只有优先级高于这个值的中断才能产生中断请求,而等于或低于这个值的所有中断将被屏蔽掉。此外优先级寄存器内还有一位可由用户设置的禁止位,设置禁止位后可使中断优先级比较失效,使中断检测信号不经过比较而直接送到,CPU,的中断请求线上。,南开大学 朱耀庭,中断嵌套,中断嵌套是指当,CPU,正在执行某一低级别的中断服务程序时,允许响应更高级别的中断源的中断请求,于是暂时挂起正在处理中的中断,转而进入更高级别的中断服务,待高优先级中断服务结束后,再返回到刚才被中断的那一级,继续执行。,由于多重嵌套中断的某些特点,决定了它与单级中断在处理过程中有以下不同之处。,(,1,)在响应更高级中断之前要先屏蔽掉本级和较低级的中断请求,防止干扰;,(,2,)在进行本级中断服务前保护现场后要先开中断,以允许更高级的中断响应,实现中断嵌套;,(,3,)中断服务程序结束后,为了在恢复现场时不受任何中断请求的干扰,必须先关中断;而在中断返回前恢复现场后再执行开中断指令,以允许,CPU,响应新的中断请求。,南开大学 朱耀庭,13.2,软件中断,通过中断向量表管理众多的中断,用户就可以十分方便地为自己建立一个软件中断。,当用户想要编制和使用自己的中断服务程序时,先应该确定中断类型;根据中断类型确定该中断在中断向量表中的位置;然后将自己编制的中断服务程序,(,可以是驻留内存的,也可以是非驻留内存的,),所在段的段地址和位移填入中断向量表中对应位置的两个字中。,对于软件中断,用户可通过指令,INT n,中的类型,n,进行安排。,南开大学 朱耀庭,13.2,软件中断,软件中断的处理过程,软件中断的分类,13.2.,1,软件中断的访问,南开大学 朱耀庭,软件中断的处理过程,还是以,DOS,系统功能调用中断,INT 20H,为例,来说明由软件引起的非屏蔽型中断,当中断指令向,CPU,发出中断请求时,,CPU,的处理过程如下。,在程序中遇到,INT 20H,时,该指令产生中断类型号为,20H,的中断,该中断在中断向量表中的地址为,20H4=80H,,如图,13-2,所示。如果在,DEBUG,提示符“,-”,后输入命令,D 0000:0080 L4,,就会得到如下结果:,0000:0080 72 10 A7 00 r,D,是显示内存单元命令;,0000:0080,是要显示的内存单元的起始地址,冒号前,4,位,16,进制数是待显示内存单元的段地址,冒号后,4,位,16,进制数是待显示内存单元的偏移量;,L,定义显示的长度,单位为字节,,4,表示显示长度值。,结果中的“,72 10 A7 00”,就代表以,0000:0080,开始的,4,字节内存单元的,16,进制内容,结果最右边的“,r”,是相应字节的,ASCII,表示,对不可见的字符以“,.”,代替。,南开大学 朱耀庭,软件中断的处理过程,根据显示的结果看出,INT 20H,所对应的中断服务程序的入口地址为,00A7:1072(,注意内存中数据的存放格式是由高到低的,),。,在接收,INT 20H,指令后,,CPU,将自动进行如下的操作。,(,1,)将标志寄存器,(FLAGS),压入堆栈。,(,2,)用清中断标志,(IF),和陷阱标志,(TF),禁止硬件中断,即关中断。当用户编制自己的中断服务程序时,必要时在程序内可以用,STI,指令开中断,即打开由硬件自动关闭的中断允许触发器,使之能够响应更高级的中断。,(,3,)将当前代码段寄存器,(CS),的内容压栈。,(,4,)将当前指令指针,(IP),压栈,步骤(,3,)、(,4,)的目的是确保中断处理完毕之后能够正确地返回中断调用处。,(,5,)转向内存地址,00A7:1072,处进入中断服务程序。,南开大学 朱耀庭,软件中断的处理过程,在中断服务程序执行完后,即,CPU,接收到,IRET,指令时,又将产生如下的操作。,(,1,)从堆栈中将保存的原指令指针,IP,的内容弹出到,IP,中。,(,2,)从堆栈中将保存的原段寄存器,CS,的内容弹出到,CS,中。,(,3,)从堆栈中保存的原标志寄存器的状态,再弹出到,FLAGS,,恢复中断时的标志寄存器状态。,由中断处理过程可以看出,软件中断指令非常类似于子程序调用的,CALL,指令,即:暂停当前程序的执行,转而执行另一程序段,当该程序段执行完时,,CPU,都自动恢复原程序的执行。,南开大学 朱耀庭,软件中断的处理过程,但两者之间还是有明显区别的。它们的主要差异有以下几点。,(,1,)子程序调用是程序员在编写源程序时事先安排好的,而中断是由中断源根据自身的需要产生的,是不可预见的,(,用指令,INT,引起的中断除外,),。,(,2,)子程序调用是用,CALL,指令来实现的,但没有调用中断的指令,只有发出中断请求的事件,(,指令,INT,是发出内部中断信号,而不要理解为调用中断服务程序,),。,(,3,)子程序的返回指令是,RET,,而中断服务程序全部是段间的调用,所以在结束时的返回指令是,IRET/IRETD,。且软件中断的,IRET,指令具有自动恢复断点和标志的功能。,(,4,)在通常情况下,子程序是由应用系统的开发者来编写的,而中断服务程序是由系统软件设计者来编写的。,南开大学 朱耀庭,软件中断的分类,DOS,中断,1,BIOS,中断,2,自由中断,3,南开大学 朱耀庭,1. DOS,中断,DOS,中断占用的中断类型号为,20H3FH,,目前使用了其中的,20H27H,和,2FH,,其余的为保留中断。其中每种,DOS,中断类型号与其对应的功能见表,13-2,。,中断类型号,中断向量地址,功能,20H,00080H00083H,程序终止,21H,00084H00087H,DOS,系统功能调用,22H,00088H0008BH,程序终止,DOS,返回地址,23H,0008CH0008FH,Ctrl_C,中断向量,24H,00090H00093H,严重错误向量,25H,00094H00097H,绝对磁盘读,26H,00098H0009BH,绝对磁盘写,27H,0009CH0009FH,结束并驻留内存,28H,000A0H000A3H,键盘忙循环,29H,000A4H000A7H,快速写字符,2AH,000A8H000ABH,Microsoft,网络接口,2EH,000B8H000BBH,基本,SHELL,程序装入,2FH,000BCH000BFH,多路转接接口,30H3FH,000C0H000FCH,保留给,DOS,南开大学 朱耀庭,2. BIOS,中断,BIOS,中断占用的中断号为,10H1FH,。它主要是供,I/O,驱动程序使用,提供了应用程序、,DOS,与设备的接口功能。用户可以忽略对具体设备硬件上的了解,直接应用这些功能调用完成对具体设备的控制,其中常见的,BIOS,中断类型号与其对应的功能见表,13-3,。,中断类型号,中断向量地址,功能,10H,00040H00043H,显示器,I/O,11H,00044H00047H,取设备信息,12H,00048H0004BH,取内存容量,13H,0004CH0004FH,磁盘,I/O,14H,00050H00053H,RS-232,串行口,I/O,15H,00054H00057H,磁带,I/O,16H,00058H0005BH,键盘,I/O,17H,0005CH0005FH,打印机,I/O,18H,00060H00063H,ROM BASIC,入口代码,19H,00064H00067H,引导装入程序,1AH,00068H0006BH,时钟,1BH,0006CH0006FH,键盘终止地址,(Ctrl_Break),1CH,00070H00073H,定时器,1DH,00074H00077H,显示器参数,1EH,00078H0007BH,软盘参数表,1FH,0007CH0007FH,图形字符扩展码,南开大学 朱耀庭,3.,自由中断,自由中断是由系统或应用程序设置开发的。可以理解为这类中断是系统或应用程序为了完成特定的功能而扩展出来的中断,它们占用了中断向量表中,80H0FFH,的位置。系统给自身和应用程序留下了很大的余地。,这几类软件中断之间存在一定的层次关系。在用户程序中,若直接通过端口来操作硬件或外设,处理速度是最快的,但这样做,使用户程序存在很大的局限性。硬件环境的改变将直接影响程序的正常运行。,若用户程序通过调用,DOS,功能来实现其所需功能,那么,应用程序与低层硬件相距较远,操作最终的对象需要经过中间环节,处理速度肯定受到一定的损失,但这种应用程序适应性强、应用范围广、对硬件的依赖性最小。,南开大学 朱耀庭,3.,自由中断,由于,BIOS,介于,DOS,和具体硬件之间,所以,调用,BIOS,的功能是一个很好的折中方案。用户可在以下,3,种情况下考虑使用,BIOS,的功能:,(,1,),BIOS,提供的功能,而,DOS,没有提供该功能。,(,2,)不能利用,DOS,功能调用的情况,(,可能因为某些具体应用的限制,),。,(,3,)基于处理速度的考虑,需要绕过,DOS,层的情况。,可以看出使用中断的层次越高,它与硬件设备相关程度就越低,处理速度也就越低,但用户程序的适用范围较广;使用中断的层次越低,它与硬件设备相关程度越高,处理速度越快,用户程序的适用范围较小。因此程序员可根据应用程序的要求、对硬件环境的熟悉程度等因素来选用不同层次的中断。,南开大学 朱耀庭,软件中断的访问,软件中断的访问在不同的环境中有不同的形式,这里仅介绍一下汇编语言对软件中断的访问。用汇编语言申请一个标准,DOS,或,BIOS,中断是非常简单的,用户程序通过规定的寄存器与中断服务程序之间进行内定的规范信息交换。,DOS,中断和,BIOS,中断都是在中断调用前将功能号装入,AH,寄存器,将子功能号装入,AL,寄存器,此时对于大部分的中断处理程序都有一个入口和出口,在,CPU,的相应寄存器中装入入口参数,在中断请求完毕之后就可通过特定的,CPU,寄存器获得出口参数返回值。这里需要注意的是,进行中断调用时,在,INT,指令中指明的是中断类型号,而在,AH,或,AL,寄存器中装入的是功能号,其余寄存器在调用中断处理程序前用来保存入口参数,,AH,或,AL,寄存器与其余寄存器在中断处理完毕后可能保存的是出口参数值。这里可以将,DOS,中断和,BIOS,中断每类不同中断类型号中的各种功能号的调用称为,DOS,功能调用和,BIOS,功能调用。,南开大学 朱耀庭,软件中断的访问,它们一般包含以下步骤,步骤的过程如图,13-4,所示:,(,1,)将调用参数装入指定寄存器;,(,2,)如需功能号,将它装入,AH,寄存器;,(,3,)如需子功能号,将它装入,AL,寄存器;,(,4,)按中断类型号使用,INT,指令调用,DOS,或,BIOS,中断;,(,5,)检查返回参数是否正确。,南开大学 朱耀庭,软件中断的访问,图,13-4,n,号中断功能调用步骤,演示动画,南开大学 朱耀庭,软件中断的访问,例如,,DOS,系统功能调用的,21H,号中断,其,01H,号功能调用是用来从键盘读一个字符到,AL,寄存器,并在屏幕上显示。,该功能调用没有其他入口参数,只需往,AH,寄存器中装入,01H,,然后使用,INT 21H,指令,则调用完毕后,出口参数,AL,寄存器中就存放了从键盘读入字符的,ASCII,码。可以根据需要对,AL,中的值作进一步的处理。,再如,,21H,号中断的,02H,号功能是在显示器上显示输出一个字符,其入口参数为在,DL,寄存器中存放待显示字符的,ASCII,码;又如,,21H,号中断的,4CH,号功能调用是用来结束程序等。,南开大学 朱耀庭,软件中断的访问,例,13-1,DOS,系统功能调用示例,题目:输入一个字符,原样输出该字符,设计思路:,INT 21H,的,1,号、,2,号功能调用,分别完成输入输出,源程序(,Ex13-1.asm,)如下:,CODE SEGMENT,ASSUME CS:CODE,START:MOV AH,01H,INT 21H ;,此时,AL,寄存器中为键盘读入字符的,ASCII,码,MOV DL,AL ;,将,AL,的值送,02H,号功能的入口参数寄存器,DL,MOV AH,02H,INT 21H,MOV AH,4CH,INT 21H,CODE ENDS,END START,程序说明:,DOS,功能调用及其参数设置详见参考资料,26,。,DOS,中断和,BIOS,中断是软件中断中两类比较重要的中断,本章下面的内容将重点介绍这两类中断。,南开大学 朱耀庭,13.3,DOS,中断服务,DOS,中断服务的概念,常用的,DOS,中断,13.3.,1,南开大学 朱耀庭,DOS,中断服务的概念,中断类型号,20H27H,为,DOS,所使用的中断,,28H3FH,为,DOS,所保留。,用户可以通过,INT 20HINT 27H,进入,DOS,中断服务程序,称其为对,DOS,中断服务程序的调用。,同样通过对入口参数的选择而调用,INT 20HINT 27H,服务程序的内部子程序时,称这一调用为,DOS,内部功能调用,简称,DOS,功能调用。,南开大学 朱耀庭,常用的,DOS,中断,例,13-2,DOS 25H,号中断,按逻辑扇区读盘,题目:从驱动器,A,中的磁盘中逻辑,0,扇区开始读入一个扇区的信息,然后按十六进制的形式显示该扇区的前,8,个字节。,设计思路:用,DOS 25H,号中断读盘,例,13-2,DOS 25H,号中断,按逻辑扇区读盘,程序说明:,运行结果为:,EBH 3CH 90H 44H 4FH 53H 56H 4DH,在,Debug,环境下读者也可以直接应用,Debug,命令“,L 0 0 0 1”,和命令“,d 0”,,看到,A,盘的前,8,个字节为,EBH 3CH 90H 44H 4FH 53H 56H 4DH,,以验证本程序执行的正确性。,南开大学 朱耀庭,13.4,BIOS,中断服务,BIOS,的概念,BIOS,中断服务的概念,13.4.,1,常见的,BIOS,中断,南开大学 朱耀庭,BIOS,的概念,BIOS,即,Basic Input/Output System,,指的是基本输入,/,输出系统。它是一组底层的基础软件程序。当执行设备驱动模块或进行字符级,I/O,操作时,它为用户提供了一个相对简单的编程接口,使用户能在不涉及设备地址及工作特性的情况下编程,从而避免了了解设备状态和必须编制复杂程序的麻烦。同时,,BIOS,形成了程序与硬件之间的缓冲,从而保证了用户软件在某种程度上的兼容性。,BIOS,驻留在系统板的只读存储器,ROM,中,计算机加电后,可以随时调用,BIOS,程序。,BIOS,程序独立于任何操作系统,因此无论该计算机是运行,DOS,还是,UNIX,等其他操作系统,用户都可以调用这些服务程序。,南开大学 朱耀庭,BIOS,中断服务的概念,BIOS,中断类型中,1BH,,,1CH,为伪中断,,1DH1FH,为,BIOS,的参数表,,10H1AH,则对应不同的,BIOS,例行中断服务程序。用户可以通过使用,INT 10HINT 1AH,进入中断服务程序,这个过程就称为,BIOS,中断服务程序调用。,在使用不同的,BIOS,中断号作,BIOS,中断调用时,如果需要设置入口参数,进而通过不同的入口参数使用相应中断服务内部的子程序时,就称为该中断类型的,BIOS,功能调用。常用的,BIOS,功能调用有,INT 10H,号功能调用。,前面的表,13-3,中列出了常见的,BIOS,中断类型。,南开大学 朱耀庭,常见的,BIOS,中断,BIOS,固化在,ROM,中,对用户程序来说可由特定指令,INT n,(,n,为中断号)通过软件中断的方式使用,这种工作方式,称为,BIOS,中断服务程序的调用。,通常把指令,INT 10H,就称为,BIOS,功能调用,这类似于,INT 21H,在,DOS,功能调用中的地位。这里的功能调用是指通过入口参数的选择来使用中断服务程序中的内部功能。,南开大学 朱耀庭,常见的,BIOS,中断,例,13-3,屏幕显示方式的设置,题目:设置显示方式为,320200,彩色,并画彩条,设计思路:调用,INT 10H BIOS,功能调用作图,例,13-3,屏幕显示方式的设置,程序说明:,BIOS,功能调用,INT 10H,的参数设置,南开大学 朱耀庭,13.5,DOS,和,BIOS,功能调用实例,例,13-4,DOS21H,号中断,0AH,号功能号的调用,例,13-5,BIOS16H,号中断,00H,号功能号的调用,例,13-6,在单色显示方式下以闪烁白色背景高亮下划线方式显示,5,个字符“,A”,例,13-7,图像显示方式下作图实例,例,13-8 BIOS 10H,号中断,01H,号功能与,02H,号功能调用,例,13-9 BIOS10H,号中断,06H,号功能调用,,,上卷屏幕,例,13-10 BIOS 10H,号中断,13H,号功能的调用,南开大学 朱耀庭,13.5,DOS,和,BIOS,功能调用实例,例,13-11,在屏幕上动态显示文本鼠标的位置,例,13-12,设置当前盘号为,B,,读取当前盘号并显示,例,13-13,建立一个文件控制块,FCB,后,建立文件,NKU.TXT,例,13-14,建立文件控制表后删除文件,NKU.TXT,例,13-15,由程序建立的,FCB,指定被读文件名参数,顺序读,然后显示,功能与,DOS,下的,TYPE,命令类似,例,13-16,利用扩充文件功能,建立文件并进行读写操作,例,13-17,将文件,HIDDEN.ASM,变成隐含文件,南开大学 朱耀庭,13.6,典型的中断处理程序实例,中断处理程序的编程原则,读取和设置中断向量,13.6.,1,南开大学 朱耀庭,中断处理程序的编程原则,在编写中断处理程序时要时刻遵守以下的原则,:,(,1,)由于中断是异步发生的,当它进入时并不考虑系统当前运行的状态,所以中断处理程序必须具有自我保护的能力,并能访问到所有当前段基址和堆栈指针,否则一旦出现异常情况就难以排除。,(,2,)在应用具体的中断处理程序之前,应先初始化要处理的中断向量,使该向量指向相应的中断处理程序。注意,在修改中断向量时,要先关中断以防止发生由其他中断造成的不可预测的后果,在初始化完毕后再开中断。,南开大学 朱耀庭,中断处理程序的编程原则,在编写中断处理程序时要时刻遵守以下的原则,:,(,3,)当,CPU,响应一个中断时(包括硬件中断和软件中断),中断处理程序接受控制的系统状态是相同的,即状态标志字、,CS,和,IP,进栈保存并关中断。因而中断处理程序在保护好现场后,必要时应立即开中断,以允许高级中断产生。,(,4,)开发用以替换系统内中断处理程序或系统异常的中断处理程序时,必须遵守系统的有关约定,以免破坏系统向量或使,DOS,处于不稳定状态。,(,5,)现在所使用的,DOS,版本是不支持重入的,所以在,DOS,下运行一个外部硬件中断处理程序时,程序中绝对不允许使用,INT 21H,。,南开大学 朱耀庭,读取和设置中断向量,中断向量是系统用来存放中断服务程序或系统参数的入口地址。,在通常情况下,程序员不需要对中断向量表作任何操作,但在开发程序时,若要为某种特殊需要而提供新的中断处理程序时,就必须操作中断向量表。,南开大学 朱耀庭,读取和设置中断向量,读取中断向量,1,设置中断向量,2,修改中断向量的步骤,3,南开大学 朱耀庭,1.,读取中断向量,(1)DOS,功能调用的方法,DOS,提供了用功能调用的方法来读取中断向量的功能,例如,其中断,21H,的功能,35H,就能读取指定中断号的入口地址。其使用参数如下,:,入口参数:,AH,35H,,,AL,中断号,出口参数:,ES:BX,中断处理程序的入口地址,例,13-18,用功能调用的方法把中断,n=5,的入口地址保存到双字变量,OldAddr,中,南开大学 朱耀庭,1.,读取中断向量,(2),直接访问存储单元的方法,由前面的知识可知:,中断向量表是存储在内存的第,0,段,若中断号为,n,,那么,其入口地址在表内的偏移量为,4n,例,13-19,用直接访问存储单元的方法把中断,n=5,的入口地址保存到双字变量,OldAddr,中,南开大学 朱耀庭,2.,设置中断向量,(1)DOS,功能调用的方法,中断,21H,的功能,25H,可为指定的中断号设置新的入口地址。,其使用方法如下:,入口参数:,AH,中断号,,DS:DX,中断处理程序的入口地址,出口参数:无,例,13-20,用功能调用的方法设置中断,n,的中断处理程序,南开大学 朱耀庭,2.,设置中断向量,(2),直接访问存储单元的方法,例,13-21,用直接访问存储单元的方法设置中断,n,的中断处理程序,在上面的程序段中,指令,CLI,是一条值得注意的指令,它用来确保随后两条,MOV,指令可以被连续执行而不被打断。这是因为执行第一条,MOV,指令后,原中断向量表中的入口地址就被破坏了,这时,该入口地址既不指向原处理程序,也不指向新处理程序。如果此刻正巧发生了该类型的中断请求,那么,系统将转向一个非法的位置。如果程序员能确信此时不会发生该类型的中断请求,当然也就不必插入关中断指令。,后面的指令,STI,是开中断指令,它允许,CPU,响应其后的中断请求,南开大学 朱耀庭,3.,修改中断向量的步骤,在编程的实际过程中,若要修改某个具体的中断处理程序时,一般需要按下面的操作过程来完成:,(,1,)读取指定中断的中断处理程序的入口地址,并把它保存在存储单元内;,(,2,)把用户编写的程序段设置为指定中断的新处理程序;,(,3,)在用户程序结束之前,(,或不需要新的处理程序时,),,把步骤(,1,)保存的入口地址恢复成处理该中断的入口地址。,程序员按以上,3,步来编程,可保证:在其程序运行过程中,该指定的中断将按新的处理程序来处理,程序结束后,中断系统又恢复成原来的处理方式。所以,这种中断向量的改变对其他程序或使用者来说是透明的,当然也就不会影响它们的正常运作。,下面用一个具体的例子来说明中断程序的写法,:,例,13-22,重写,INT 5,中断处理程序,南开大学 朱耀庭,南开大学 朱耀庭,Thank You !,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!