ch6输入输出和中断技术内容摘要:

个设备产生中断。 识别中断源有两个方法:  软件查询。 将中断信号从数据总线读入,用程序进行判别,如教材图。  中断矢量法。 由中断源提供中断类型号, CPU根据类型确定中断源。 ( 8086/8088即采用此种方法) )中断判优  多个中断源产生中断, CPU首先为谁服务。 ——中断优先级排队问题。  中断优先级控制要处理两种情况:  对同时产生的中断:应首先处理优先级别较高的中断;若优先级别相同,则按先来先服务的原则处理;  对非同时产生的中断:低优先级别的中断处理程序允许被高优先级别的中断源所中断 ——即允许中断嵌套。  中断优先级的控制方法  硬件判优 ——链式判优、并行判优(中断向量法)  软件判优 ——顺序查询中断请求,先查询的先服务(即先查询的优先级别高)  通常将 中断判优 与 中断源识别 合并在一起进行处理。  x86系统中,这项任务由 PIC和 CPU共同完成。 INTAin CPU INTA INTR 外设 1 外设 2 外设接口 1 菊花链 逻辑电路 外设接口 2 外设 3 外设接口 3 ≥1 菊花链 逻辑电路 菊花链 逻辑电路 ┇ IREQ IREQ IREQ 中断确认 链式判优电路原理图(教材图 ) INTAin INTAin 中断确认 中断确认 菊花链逻辑电路 INTAin IREQ INTR amp。 =1 ≥1 INTAout DB 三态门 中 断 向 量 码 E 外设接口 中断确认 菊花链 逻辑电路 3)中断响应  在每条指令的最后一个时钟周期, CPU检测INTR或 NMI信号。 若以下条件成立,则 CPU响应中断:  当前指令执行完。 对 INTR, 还应满足以下条件  当前指令是 STI和 IRET,则下条指令也要执行完。  当前指令带有 LOCK、 REP等指令前缀时,则把它们看成一个整体,要求完整地执行完;  对 INTR, CPU应处于开中断状态,即 IF=1;  当前没有复位 (RESET)和保持 (HOLD)信号。  若 NMI和 INTR 同时发生,则首先响应 NMI。 3)中断响应(续)  CPU中断响应时,要做下述三项工作:  向中断源发出 INTA中断响应信号;  断点保护,包括 CS、 IP和 PSW( FLAGS)。 这主要是保证中断结束后能返回被中断的程序。  获得中断服务程序首地址(入口)。 如何得到中断处理程序的首地址。  固定入口法  中断向量法 ——常用 4)中断处理(中断服务)  中断服务子程序特点  为 ”远”过程(类型为 FAR)  要用 IRET指令返回  中断服务子程序要做的工作  保护现场 (PUSH reg’s)  开中断 (STI)  进行中断处理  恢复现场 (POP reg’s)  中断返回 (IRET) 5)中断返回  执行中断返回指令 IRET  IRET指令将使 CPU把堆栈内保存的断点信息弹出到 IP、 CS和 FLAG中,保证被中断的程序从断点处能够继续往下执行。 IPL IPH CSL CSH FLAGL FLAGH SP IPL IPH CSL CSH FLAGL FLAGH SP IP CS FLAG 进入中断服务程序时 中断返回后 8088的中断系统  与中断有关的控制线为: NMI、 INTR、 INTA  8088系统的中断源  内部中断  除法溢出:类型号 0,商大于目的操作数所能表达的范围时产生。  单步中断:类型号 1, TF=1时产生(当前指令需执行完)  断点中断:类型号 3,这是一个软件中断,即 INT 3指令。  溢出中断:类型号 4,这是一个软件中断,即 INTO指令。  软件中断:即 INT n指令,类型号 n(0255)。  外部中断  非屏蔽中断 NMI:类型号 2,不可用软件屏蔽, CPU必须响应它。  可屏蔽中断 INTR:类型号由 PIC提供。 IF=1时 CPU才能响应。 NMI INTR 中断逻辑 软件中断指令 溢出中断 除法错 单步中断 非屏蔽中断请求 中断控 制器 8259A PIC 8086/8088CPU内部逻辑 断点中断 8086/8088中断源类型 可 屏 蔽 中 断 请 求 n 4 3 0 1 2 中断源的识别  8088系统采用中断类型码来识别不同的中断源, 每个中断源都有一个与它相对应的中断类型码。  溢出、断点、除法溢出、单步、非屏蔽中断的类型码为 固定值  软件中断的类型码 由指令给出  可屏蔽中断的类型码 由 PIC给出  CPU响应 INTR中断时,会产生两个中断响应总线周期 (教材图 ),要求 PIC在第 2个中断响应总线周期把中断类型码放到数据总线上,供 CPU读入。 中断向量表( IVT)  存放各类中断的 中断服务程序的入口地址(段和偏移) ——中断向量  表的地址位于内存的 00000H~ 003FFH,大小为 1KB,共 256个中断向量  每个中断向量占用 4 Bytes,低字为段内偏移,高字为段基址  根据中断类型号 获得中断服务程序入口的方法 : (n为 中断类型号 )  中断向量在 IVT中的存放地址= 4 n 中断向量表的初始化  初始化 ——将中断服务程序的入口地址放入向量表 例:中断类型码为 48H的中断处理子程序的名字为 int48h,编写程序段将该中断处理子程序的入口地址放入向量表。 中断向量表的初始化 CLI MOV AX, 0 MOV DS, AX MOV SI, 48H*4 MOV AX, OFFSET int48h MOV [SI], AX MOV AX, SEG int48h MOV [SI+2], AX STI 8086/8088 CPU的中断响应过程  内部中断响应过程  无 INTA周期  中断类型码固定或由指令给出  响应过程主要步骤: ① PUSH FLAG ② IF=0 ③ PUSH CS ④ PUSH IP ⑤ 取中断向量送入 IP和 CS 中断响应过程(续)  外部中断响应过程  非屏蔽中断,与内部中断响应过程类似  可屏蔽中断 (时序见教材图 ) ① INTA( 1) , PIC进行优先级排队判优处理 ② INTA( 2) , PIC把中断类型码放到 DB上 , CPU读入 ③ PUSH FLAG ④ IF=0 ⑤ PUSH CS ⑥ PUSH IP ⑦ 取中断向量送入 IP和 CS 与内部中断一样 8088系统中各中断的优先级  优先级从高到低顺序如下:  内部中断  NMI  INTR  单步中断 N Y N Y N N N N N Y Y 执行指令 执行完 否 ? 取指令 IF=1? 内部中 断 ? NMI ? INTR ? TF=1 ? 类型码 =0~ 255 类型码 =2 类型码 =1 中断响应, 读回类型码 FLAG入栈 TEMP←TF TF=TF=0 CS、 IP入栈 计算向量表地址 高字 →CS 低字 →IP 执行中断 服务程序 NMI? TEMP= 1? 转入中断服务程序 恢复 CS和 IP 恢复 FLAGS 返回被中断 的程序 Y Y Y Y N IRET指令的操作 8086/8088的中断处理流程 NMI、 INTR、单步和除法错中断同时产生时的中断处理过程 DIV TF=1 IF=1 INTR NMI PUSH FLAGS、 CS、 IP CLEAR IF amp。 TF,中断入口 →CS:IP 除法错 NMI(IF、 TF = 0) PUSH FLAGS、 CS、 IP CLEAR IF amp。 TF,中断入口 →CS:IP NMI中断处理程序 除法错中断处理程序 (IF、 TF = 0) 返回 执行下条指令 识别出 INTR (IF、 TF = 1) 返回 INTR仍然有效 继续单步执行程序 INTR中断处理程序 INTR PUSH FLAGS、 CS、 IP CLEAR IF amp。 TF,中断入口 →CS:IP 单步 (IF、 TF = 0) PUSH FLAGS、 CS、 IP CLEAR IF amp。 TF,中断入口 →CS:IP 单步中断处理程序 (IF、 TF = 0) 返回 (IF、 TF = 1) 返回 可编程中断控制器 8259A  PIC, Programmable Interrupt Controller  可对 8个中断源实现优先级控制  可扩展至对 64个中断源实现优先级控制  可编程设置不同工作方式  根据中断源向 x86提供不同中断类型码  引脚分配及功能见教材图 . 8259A的内部结构  8259A的内部结构( 教材图 )  中断请求寄存器 IRR  保存从 IR0~ IR7来的中断请求信号,某位 =1表示对应的 IRi有中断请求  中断服务寄存器 ISR  保存所有正在服务的中断源,某位 =1表示对应的 IRi中断正在被服务  中断屏蔽寄存器 IMR  存放中断屏蔽字,某位 =1表示对应。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。