汇编与接口-中断技术详解-精课件.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《汇编与接口-中断技术详解-精课件.pptx》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 接口 中断 技术 详解 课件
- 资源描述:
-
1、中断技术中断基本原理 Intel系列微处理器的对外的中断引脚包括两个申请中断的硬件引脚(INTR和NMI),一个响应INTR中断的硬件引脚(INTA)Intel系列CPU最多包含256个中断向量,其中前5个在8086Pentium的所有Intel系列的微处理器中是相同的,一般保留前32个为Intel各种微处理器系列成员专用,用户可以使用后面224个向量。保护模式下,把外部中断称为“中断”(Interrupt),把内部中断称为“异常”(Exception)。中断 分为可屏蔽中断和不可屏蔽中断。CPU只有一个INTR引脚,外部中断源有很多,因此一般需要中断控制器对外部中断源进行管理,选择优先级最高
2、的中断请求发送到CPU的INTR引脚,常见的中断控制器有8259芯片异常 异常是不可屏蔽的,每一种异常类别具有不同的异常号码。异常分为故障(Fault)、陷阱(Trap)和中止(Abort)3种故障 故障是在引起异常的指令之前,把异常情况通知给系统的一种情况。故障的特点是可排除的。当控制转移到故障处理程序时,在堆栈中保存的断点CS及EIP的值指向引起故障的指令。这样在故障处理程序将故障排除后,执行IRET返回到引起故障的程序,刚才引起故障的指令可重新得到执行。陷阱 陷阱是在引起异常的指令执行之后触发的一种情况。软中断指令“INT n”、单步异常等是陷阱的例子。故障处理完毕后继续执行这一条指令,
3、陷阱处理完毕后执行下一条指令。中止 中止是在系统出现严重的不可恢复的事件时触发的一种异常,产生中止后,正执行的程序不能被恢复执行,系统要重新启动才能恢复正常运行状态。NMI和INTR引脚接收外部中断源产生的中断请求,由CPU外部中断源发出的中断请求叫做外部中断,实线框里面列出的是在CPU内部中断源产生的中断,叫做内部中断。中断服务程序 响应中断时,CPU暂停当前正在执行的程序转而执行中断服务程序。中断服务程序包括保护现场、处理中断、发送中断结束命令、恢复现场、中断返回几个部分。(1)中断服务程序入口设置 中断服务程序的入口必须设置到中断向量表或者中断描述符表中,才会被CPU在中断响应时调用。因
4、此,在初始化时主程序需要设置中断向量,在设置新的中断向量之前要保存旧的中断向量,以便恢复。(2)DS、ES的赋值 要用DS、ES访问程序自己的数据段,那么必须先给它们赋值。可以使用被中断的程序的堆栈。(3)软件中断的返回结果 对于某些软件中断(例如INT 21H服务程序),其返回参数保存在寄存器中,这时中断服务程序就不需要在堆栈中保存这些寄存器。实模式的中断处理 当中断发生以后,CPU都能得到一个中断类型号。CPU以中断类型号做为索引,通过查找内存中的中断向量表来寻找中断服务程序的入口。中断向量表(Interrupt Vector Table,IVT)就是各种中断类型的处理程序的地址表。中断向
5、量表实质上就是由程序预先设置好的一块内存区域。256个中断服务程序的入口地址(段地址和偏移量,即中断向量)按中断类型码从小到大顺序存放。8086/8088的中断向量表位于存储器的00000H003FFH单元,占据1024个字节,这1024个字节被分为256个中断向量,每个中断向量占4个字节。这个4字节的中断向量包含了中断服务程序的段地址和偏移量。中断处理过程 标志寄存器的内容压入堆栈,保护各个标志位。清除中断标志(IF)和陷阱标志(TF),禁止可屏蔽中断INTR引脚和陷阱或单步功能。保存断点;将断点逻辑地址(返回地址)压入堆栈,先将代码段(CS)内容压入堆栈,然后指令指针(IP)内容压入堆栈。
6、从中断类型号乘4的主存地址中取出中断向量内容,送CS和IP。开始执行中断服务程序。当执行到中断服务程序的指令IRET时,IRET指令从堆栈中移出6个字节:IP两个字节,CS两个字节以及FLAGS两个字节。弹出的断点值(返回地址)送CS和IP寄存器,同时弹出标志寄存器,使IF和TF回到中断前的状态。写中断向量表 Old40DD?;保存旧的中断向量 New40PROC FAR;中断必须被定义为far程序;新的40号中断服务程序的主体 IRET;中断服务程序必须有IRET New40ENDP;初始化 Start:MOV AX,0;寻址0000H段 MOV DS,AX MOV AX,DS:40h*4+
7、0H;得到40H号中断的偏移地址 MOV WORD PTR CS:old40,AX;保存旧的偏移地址 MOV AX,DS:40h*4+2H;得到40H号中断的段地址 MOV WORD PTR CS:old40+2,AX;保存旧的段地址 MOV CS:40h*4+0H,OFFSET new40;放入新的偏移地址 MOV CS:40h*4+2H,CS;放入新的段地址DOS系统功能调用 除了直接修改中断向量表主存内容之外,还可以调用DOS功能调用INT 21H的25H、35H功能来设置和读取中断向量。(1)中断服务程序入口地址获取 功能号:AH=35H 入口参数:AL=中断向量号 出口参数:ES:B
8、X为中断服务程序入口地址(段基址:偏移地址)利用INT 21H获取40h号中断服务程序入口地址。MOV AX,3540H;利用DOS功能35H号 INT21H;获取原40H中断服务程序入口地址 MOV old40,BX;保存偏移地址 MOV old40+2,ES;保存段基地址中断服务程序入口地址设置 功能号:AH=25H 入口参数:AL=中断向量号,DS:DX为中断服务程序入口地址(段基址:偏移地址)设置新中断服务程序入口地址。PUSHDS MOV DX,OFFSET new40;取中断程序偏移地址 MOV AX,SEG new40;取中断程序段地址 MOV DS,AX MOV AX,2540
9、H INT21H POP DS保护模式的中断处理 保护模式下使用中断描述符表(Interrupt Descriptor Table,IDT)来存储256个中断向量。中断类型号作为中断描述符表IDT中描述符的索引,取得一个描述符,从中得到中断/异常处理程序的入口地址。单核系统中只有一个中断描述符表IDT,多核系统中每个CPU核都有自己的IDT 中断描述符表寄存器IDTR指示IDT在内存中的位置。通过SIDT指令可以获得IDT的地址 中断描述符表IDT所包含的描述符只能是中断门、陷阱门和任务门门描述符格式中断和异常的处理过程 1、中断和异常响应 如果是异常处理,首先根据异常类型确定返回地址(CS:
10、EIP),对于故障,CS:EIP指向引起故障的指令;对于陷阱,CS:EIP指向引起陷阱的指令的下一条指令。如果有出错代码,就把出错码压入堆栈。为了保证堆栈指针按双字边界对齐,16位的出错码以32位的形式压入,其中高16位的值为0。判断中断类型号要索引的门描述符是否超出IDT的界限。若超出界限,就触发通用保护故障。从IDT中取得对应的门描述符,分解出选择符、偏移量和属性字节,并进行权限相关的检查。根据门描述符类型,分别转入中断或异常处理程序。如果中断类型号所指示的门描述符是中断门或陷阱门,那么控制转移到当前任务的一个处理程序过程,并且可以变换特权级。跳转到中断服务程序(1)通过中断门或者陷阱门的
11、跳转 使用中断门或陷阱门实现由中断/异常处理程序进行处理,不进行任务切换,运行环境在当前的任务中(2)通过任务门的跳转 如果以中断类型号为索引,在中断描述符中取出的是一个任务门描述符,那么控制将转移到新的任务。将任务门放在IDT表中,在响应对应的中断或异常时,可根据该任务门实现任务的自动调度。中断或异常处理后的返回 中断返回指令IRET用于从中断或异常处理程序中返回。该指令的执行根据任务嵌套标志NT位是否为1分为两种情形。由任务门转入中断或异常处理程序时,NT位被置1;由中断门或陷阱门转入中断或异常处理程序时,NT位被清0。NT位为1时,IRET执行的是嵌套任务的返回。当前TSS中的链接字段保
12、存前一任务的TSS的选择符,取出该选择符进行任务切换就完成了返回。这种情形在通过任务门转入的处理程序返回时出现。NT位为0时,IRET执行的是当前任务内的返回。这种情形在通过中断门或陷阱门转入的处理程序返回时出现。可编程中断控制器8259 一片8259可以管理8个硬件中断源,最多支持64个中断源,包括1个主片和8个从片。每一个中断源的请求都可以通过程序进行屏蔽或者许可。在中断响应周期,8259提供中断源的中断类型号。8259有多种工作方式,可以通过编程来选择设置。外部引脚及功能(1)面向CPU的信号14个 D7D0:三态8位双向数据总线,与CPU数据总线连接,完成命令、状态信息的传送,中断类型
13、号也是由数据缓冲器送到CPU。CS#:片选使能输入信号,低电平有效。WR#:接CPU的写选通信号(IOW#),写控制输入信号。RD#:接CPU的读选通信号(IOR#),读控制输入信号。A0:地址信号,接CPU的地址总线,用来对8259内部不同命令字进行选择。INT:中断输出引脚,高电平有效。主8259的INT与微处理器的INTR相连,从8259的INT接主片8259的IR引脚。INTA#:中断响应,与微处理器的INTA#引脚相连。(2)面向外设的信号8个 IR7IR0:8个中断请求输入信号,高电平或上升沿有效(可编程决定),用于接收外部设备(中断源)的中断请求。在电平触发方式下,IR引脚变为高
14、电平,表示向CPU申请中断。CPU响应中断后,必须将IR恢复为低电平,否则会引起第2次重复中断。在边沿触发方式下,IR引脚从低电平变为高电平时,表示向CPU申请中断。对于外设来说,实现这种方式比较简单,没有重复中断的问题。(3)面向同类芯片的信号4个 CAS2CAS0:级联信号。由多片8259构成的主从结构中,只有一个主片,一个或多个从片,从片最多有8个。主片和从片的CAS2CAS0全部对应相连,在中断响应时主片发送从片的标识码(07)。在第2个INTA#脉冲期间,只有标识码匹配的从片才把中断类型码送至数据总线。SP#/EN#:主从/使能信号。当8259工作在缓冲方式时,SP#/EN#是输出信
15、号,用作数据总线缓冲器的使能信号(EN#),即用它来控制数据收发器的工作;当8259工作在非缓冲方式时,SP#/EN#是输入信号,用来指明该8259是主片还是从片。SP#/EN#=0时,8259为从片;=1时,为主片。8259是否工作在缓冲方式也是由CPU编程来决定的。内部模块及功能(1)数据总线缓冲器 8位的双向三态缓冲器与CPU数据总线D7D0连接,完成命令、状态信息的传送,中断类型号也是由数据缓冲器送到CPU。(2)读写控制逻辑 接收来自CPU的读写命令,完成规定的操作。操作过程由CS#、A0、RD#、WR#等输入信号共同控制。在CPU写8259时,把数据送至相应的命令寄存器中。在CPU
16、读8259时,将相应寄存器的内容输出到数据总线上。(3)级联缓冲/比较器 级联缓冲/比较器用于实现多个8259之间的级联,使得中断源由8个扩展至最多64个。(4)控制逻辑 控制逻辑按初始化设置的工作方式控制8259的全部工作。该电路可根据中断请求寄存器的内容和优先权判断结果向CPU发中断请求信号INT,并接受CPU发回的中断响应信号INTA#,使8259进入中断服务状态。(5)中断请求寄存器 IRR是与外部接口的中断请求线相连的寄存器,请求中断处理的外设通过IR0IR7向8259请求中断服务,并把中断请求信号锁存在中断请求寄存器中。有中断请求发生时,对应位置为1,同时有多个中断源发出中断请求时
17、,IRR里面会有多个1,如当引脚IR0、IR1上有中断请求发生时,IRR的内容为03H。IRR的内容为0FH表示引脚IR0IR3上有中断请求输入,IR4IR7引脚上没有中断请求输入等。(6)中断屏蔽寄存器 IMR用来设置中断请求的屏蔽信息。当IMR中某一位设为1时,8259就屏蔽对应IR引脚发出的中断请求信号,不向CPU发送该中断源的中断请求。如设置IMR中断屏蔽字为FF,表示屏蔽所有8259芯片8个IR引脚的中断请求输入。(7)中断服务寄存器 ISR用于存放当前正在进行处理的中断源。ISR中Di为1表示IRi正在服务,为0表示没有被服务。ISR中置1的位在中断响应时由8259清除,也可以由C
18、PU向8259发送中断结束命令来清除,具体的清除方式可以由程序控制。(8)优先权电路 检测到来自IR引脚的中断请求后,优先权电路负责检查该中断源的优先级,并与ISR中记录的中断(正在服务的中断)进行比较,以确定是否将这个中断请求送给CPU。假定它比正在服务中的中断具有更高的优先级,则PR就使INT线变为高电平,送给CPU,提出中断申请,并在中断响应时将它记入ISR的对应位中。如果它等于或低于正在服务中的中断优先级,则PR不为其提出申请,直到ISR中比它优先级高的位被清除。8259中断过程 单片8259的中断处理过程为:当一条或多条中断请求线IR0IR7变高时,设置相应的IRR位为1;然后PR对
19、中断优先权和中断屏蔽寄存器的状态进行判断之后,如果某中断优先权最高且为允许中断状态,就向CPU发高电平中断请求信号INT,请求中断服务;要注意与NMI不同,CPU的可屏蔽中断INTR是电平触发的,因此INT请求时必须保持高电平直到中断申请被CPU识别为止。CPU响应中断时,送出中断响应信号INTA#。CPU响应中断时会发出两个INTA#。8259接到来自CPU的第一个INTA#信号时,将当前中断服务寄存器中相应位置位,并把IRR中相应位复位。同时,8259准备向数据总线发送中断类型码。在第二个INTA#负脉冲期间,中断类型码被读入CPU,如果是在AEOI(自动结束中断)方式下,在第二个INTA
展开阅读全文