1、1,第5章 中断技术,主要内容:1、中断的基本概念 2、IBM-PC微机中断系统 3、可编程中断控制器8259A 4、8259A在微机系统中的应用重点内容: 可编程中断控制器8259A及其应用,2,第5章 中断技术,5.1 中断的基本概念,一、中断,CPU执行程序时,由于发生了某种随机的事件(外部或内部),引起CPU暂时中断正在运行的程序,转去执行一段特殊的服务程序(称为中断服务程序或中断处理程序), 以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程称为中断。,二、引入中断的原因,(1)提高数据传输率(2)避免了CPU不断检测外设状态的过程,提高了CPU的利用率(3)实现对特殊
2、事件的实时响应,3,第5章 中断技术,三、中断工作方式的特点,1、并行处理能力 有了中断功能,可以实现CPU和多个外设同时工作,仅仅 在它们相互需要交换信息时,才进行“中断”。这样CPU可以控 制多个外设并行工作,提高了CPU的使用效率。 2、实时处理能力 计算机应用于实时控制时,现场的许多事件需要CPU能迅 速响应、及时处理, 而提出请求的时间往往又是随机的。有 了中断系统,才能实现实时处理。3、故障处理能力 在CPU运行过程中,有时会出现一些故障,可以利用中断 系统,通过执行故障处理程序进行处理,不影响其他程序的 运行。,4,第5章 中断技术,4、多道程序或多重任务的运行 在操作系统的调度
3、下,使CPU运行多道程序或多重任务。一个 程序需要等待外设I/O操作结果时,就暂时“挂起”, 同时启动另一 道程序运行。I/O操作完成后,挂起的程序再排队等待运行。这样, 多个程序交替运行。 从大的时间范围来看,多道程序在“同时”运 行。 也可以给每道程序分配一个固定的时间间隔,利用时钟定时 中断进行多道程序的切换。 由于CPU速度快,I/O设备速度慢,各 道程序感觉不到CPU在做其他的服务,好像专为自己服务一样。,5,第5章 中断技术,四、中断源与中断识别,1、中断源,引发CPU中断的信息源。,(1)硬中断,外设中断:交换信息,硬件中断:电源掉电、奇偶错,(2)软中断,指令中断:DOS和BI
4、OS功能调用,程序中断:程序运行出错。溢出、 非法操作码、非法除,2、中断识别,CPU寻找中断源,目的是形成中断服务程序入口地址。,方法,向量中断:中断向量指示中断服务程序入口地址。,查询中断:用软件或硬件查询技术确定中断源。,6,第5章 中断技术,五、中断向量和中断向量表,1、中断向量,中断服务程序入口地址,包括中断程序的段基址CS和偏移量IP。,2、中断向量表,是中断号与该中断号对应的中断服务程序入口地址之间关系的链接表。,通过中断号可找到中断服务程序入口地址在内存单元中地址。PC机在内存0000H03FFH共1024单元中存放00H号FFH号共256个中断服务程序的中断向量。,7,第5章
5、 中断技术,六、中断号与中断向量指针,1、中断号 00HFFH,(1)外设中断(可屏蔽中断):由8259A提供(2)指令中断:由程序直接给出 int 21h(3)不可屏蔽中断和内部特殊中断:由系统预先设置,8,第5章 中断技术,2、中断向量指针,中断向量所在的存储单元的地址。,3、中断号与中断向量指针间的关系,中断号4 = 中断向量的低字节的指针, 从该指针开始四个存储单元地址依次存放的是中断程序的偏移量IPL和IPH及段基址CSL和CSH 。,9,第5章 中断技术,4、类型0类型4已由系统定义,不允许用户做任何修改。类型 5类型31是系统备用中断,占用表地址 00014H0007FH。 类型
6、32类型255,中断矢量表地址00080H003FFH,可供用 户使用。,七、中断向量表的初始化,例:将中断向量码为 48H的服务程序入口地址放入向量表中断向 量表的初始化 MOV AX,0000H MOV DS,AX MOV SI,0120H MOV BX,OFFSET INT1 MOV SI,BX MOV BX,SEG INT1 MOV SI+2,BX,10,第5章 中断技术,八、中断向量的装入与修改,1、中断向量的装入,分系统装入和用户装入两种情况;系统设置的中断服务程序,其中断向量由系统负责装入。其中,由BIOS提供的服务程序,其中断向量是在系统加电后由BIOS负责装入;由DOS提供服
7、务程序,其中断向量在启动DOS时由DOS负责装入。 用户开发的中断系统,在编写中断服务程序时,其中断向量由用户负责装入,其方法可采用MOV指令直接对中断向量表中填写中断向量。,11,第5章 中断技术,例:中断类型号为60H,中断服务程序的段基址为seg_intr, 偏移量是offset_intr(006DH),写出装入中断向量的 程序代码。,CLI ; 关中断CLD ; 内存地址加1MOV AX , 0 ;MOV ES , AX ;给ES赋值为0MOV DI , 4*60h ; 中断向量指针IDMOV AX , offset_intr ;中断服务程序偏移量AXSTOSW ; AX DI及DI+
8、1单元中, DI+2 DIMOV AX ,seg_intr ;中断服务程序偏移量AXSTOSW ; AX DI+2及DI+3单元中, DI+4 DISTI ; 开中断,(1)用mov指令装入,12,第5章 中断技术,(2)将中断向量直接写入中断向量表,MOV AX , 00H ;MOV ES , AX ;给ES赋值为0MOV BX , 4*60h ; 中断向量指针IDMOV AX , 006DH ;中断服务程序偏移量AXMOV ES:BX , AX ; 将中断向量偏移量装向量表PUSH CS ;将CS压入堆栈POP AX ;将CS AXMOV ES:BX+2 , AX ;将中断向量段基址装向量
9、表,13,第5章 中断技术,2、中断向量的修改,在PC机中用户不直接装中断向量,通过修改中断向量来使用系统的中断资源。 中断向量的修改是利用DOS功能调用 int 21H中的35H号和25H号功能来完成的。,(1) int 21H的35H号功能,功 能:读取中断向量入口参数:AH=35H,AL=中断号出口参数:ES:BX=中断向量,(2) int 21H的25H号功能,功 能:写入中断向量入口参数:AH=25H,AL=中断号出口参数:DS:DX=要写入的中断向量,14,第5章 中断技术,(3)中断向量修改的步骤, 用35H号功能获取原中断向量,并保存在字变量中; 用25H号功能设置新中断向量,
10、取代原中断向量,转 到新中断服务程序中; 新中断服务程序执行完毕,再用25H号功能将保存在 字变量中的原中断向量写回去,恢复原中断向量。,例:假设原中断程序的中断号为n,新中断程序的入 口地址的段基地址为 SEG_INTR , 偏移地址为 OFFSET_INTR。,15,第5章 中断技术,分析下列各段程序功能:,MOV AH,35H ;取原中断向量MOV AL,nHINT 21HMOV OLD_OFF,BXMOV BX,ESMOV OLD_SEG,BX ;保存原中断向量(其它程序段)MOV AH,25H ;设置新中断向量MOV AL,nH ;中断号MOV DX,SEG_INTRMOV DS,D
11、X ;DS指向新中断程序段地址MOV DX,OFFSET_INTR ;DX指向新中断程序偏移地址INT 21H,16,第5章 中断技术,(其它程序段)MOV AH,25H ;恢复原中断向量MOV AL,nHMOV DX,OLD_SEGMOV DS,DXMOV DX,OLD_OFFINT 21H,17,第5章 中断技术,四、中断处理过程,1、中断请求 当外部设备要求CPU为他服务时,要向CPU发中断请求信号,申请中断。 (1)外部中断源 由外部硬件产生可屏蔽或不可屏蔽中断的请求信号; (2)内部中断源 在程序运行过程中发生了指令异常或其他情况。,2、中断响应 中断源提出中断请求后,必须满足一定的
12、条件,CPU才可响应中断。 (1)响应可屏蔽中断必须同时具备以下条件 CPU处于允许中断状态(IF=1); 没有不可屏蔽中断请求和总线请求; 当前指令执行结束。,18,第5章 中断技术,(2)响应不可屏蔽中断必须同时满足以下条件 没有总线请求; 当前指令执行结束。(3)响应内部中断的条件 当前指令执行结束。(4)CPU接受中断请求后转入中断响应周期。在中断响应周期 识别中断源,取得中断源的中断类型; 将标志寄存器FLAGS和CS、IP(断点)先后压入堆栈保存; 清除自陷标志位TF和中断允许标志位IF; 获得相应的中断服务程序入口地址,转入中断服务程序。,19,第5章 中断技术,3、中断服务 (
13、1)保护现场 在执行中断服务程序时,先保护中断服务时要使用的寄存器的 内容,中断返回前再将其内容恢复。这样,中断处理程序的运 行不会影响主程序的运行。具体的做法是将这些寄存器的内容 压入堆栈。 (2)开中断 以便在执行中断服务程序时,能响应较高级别的中断请求。 (3)中断处理 执行输入输出或非常事件的处理,执行过程中允许CPU响应较 高级别设备的中断请求。 (4)关中断 保证在恢复现场时不被新的中断打扰。 (5)恢复现场 中断服务程序执行结束前,应将堆栈中保存的内容按入栈相反 的顺序弹出,送回到原来的CPU寄存器,从而保证被中断的程 序能够正常地继续执行。,20,第5章 中断技术,4、中断返回
14、 (1)在中断服务程序的最后,需要安排一条中断返回 指令,用于将堆栈中保存的IP,CS,FLAGS 的值 弹出,使程序回到被中断的地址,并恢复被中断 前的状态。 (2)保护和恢复现场的操作在8086 CPU中由软件完成。 有的微处理机如 MC68000,保护现场操作在中断 响应周期由硬件完成,恢复现场、中断返回用一 条返回指令来完成。,21,第5章 中断技术,五、中断指令,1、开中断(STI)和关中断(CLI)指令 (1)这两条指令用来操纵CPU标志寄存器的中断允许标志位IF。 (2)对可屏蔽中断INTR起作用。2、软中断指令INT n (1)该指令功能是调用n号中断服务程序。N为中断号。 (
15、2)完成以下操作: 标志寄存器内容进栈保存 使标志位TF置0,禁止单步操作;使IF标志位置0,关闭 中断,防止外部中断进入 被中断的程序的断点地址CS和IP,先后进栈保存 CPU将指令中的中断号n*4,作为地址指针,从中断向量 表中,取出n号中断服务程序的入口地址,装入CS和IP。,22,第5章 中断技术,3、中断返回指令IRET 这是一条中断服务程序的出口指令,其功能是对中断 的程序的断点地址和标志寄存器做恢复操作。4、暂停指令HLT 该指令的功能是暂时停止执行主程序,而等外部中断 的发生。,23,第5章 中断技术,五、中断向应周期及INTA信号的作用,24,第5章 中断技术,练习1、中断向
16、量地址是( ) A、子程序入口地址 B、中断服务程序入口地址 C、中断服务程序入口地址的地址 D、中断地址2、在下面中断中,只有( )需要硬件提供中断类型码。 A、INT 0 B、INT n C、NMI D、INTR3、硬中断可分( )和( )两种。4、8086/8088最多能处理( )种中断。5、非屏蔽中断的中断类型号是( )。6、对于掉电的处理。8086/8088是通过( )来处量的。7、 CPU接收中断号,将它左移( )位,形成中断向量 的指针。,25,第5章 中断技术,5.4 8259A在PC中的应用1、IBM PC/XT初始化PC/XT 系统中使用了1片8259A来提供8级中断请求
17、IRQ0IRQ7, 分别用于日时钟、键盘、保留、串行口2、串行口1、 硬盘、软盘、打印机中断,中断类型号从08H0FH。8级中断请求均 为边沿触发,采用全嵌套方式工作,IRQ0 优先级最高,IRQ7 优先级 最低。端口地址使用20H、21H。系统对8259A初始化的程序段如下: INTA00 EQU 20H ;8259A端口 INTA01 EQU 21H CLI ;关中断 MOV AL,13H ;ICW1边沿触发、单片 OUT INTA00,AL MOV AL,08 OUT INTA01,AL ;ICW2中断类型号的高5位,从8开始 MOV AL,09 ;ICW4全嵌套,8088系统、正常结束
18、、缓冲方式 OUT INTA01,AL STI ;开中断 ,26,第5章 中断技术,2、IBM PC/AT 初始化 IBM PC/AT系统使用了2片8259A级连成15级中断,如图所示。 使用特点是,主片、从片的中断请求均为边沿触发。采用全嵌套 方式,优先级顺序从高到低依次为IRQ0、IRQ1、IRQ8IRQ15、 IRQ3IRQ7。主片使用端口地址20H和21H,从片使用端口地址 0A0H和0A1H。主片中断类型号从8开始,从片中断类型号从70H 开始。,27,第5章 中断技术,系统初始化8259A的程序段如下:;端口地址定义INTA00 EQU 20H ;8259A主片端口0INTA01
19、EQU 21H ;8259A主片端口1INTB0 EQU 0A0H;8259A从片端口0INTBB1 EQU 0A1H;8259A从片端口1;主片初始化CLI ;关中断MOV AL,11H ;边沿触发、多片、16位系统OUT INTA00,ALMOV AL,08 ;中断类型号从8开始OUT INTA01,ALMOV AL,04H ;ICW3主片的IR2引脚接有从片OUT INTA01,ALMOV AL,01H ;ICW4非缓冲、全嵌套方式、16位系统、正常结束OUT INTA01,AL,28,第5章 中断技术,;从片初始化MOV AL,11H ;边沿触发、多片、16位系统OUT INTB00,
20、ALMOV AL,70H ;中断类型号从70H开始OUT INTB01,ALMOV AL,02 ;从片接主片的IR2(即标识码=010)OUT INTB01,ALMOV AL,01H ;ICW4非缓冲、全嵌套、16位系统、正常结束OUT INTB01,ALSTI ;开中断,29,第5章 中断技术,3、中断服务程序的编制 编写PC DOS下的硬件中断服务程序,有几点需要注意: (1) 由于系统引导过程已完成8259A的初始化,所以应用程序一般 不再重新初始化,但为了正确转入用户自己的中断服务程序, 应对中断向量表进行修改。方法是:根据用户中断类型号先从 中断向量表取出相应的中断向量,并保存在事先
21、定义的变量中; 然后,向存放原中断向量的单元写入新中断服务程序的入口地 址;最后,在应用程序终止退出之前,从保存的变量中取回原 中断向量恢复到中断向量表中。 修改中断向量表应避免使用 MOV 型传送指令, 可通过调用 DOS 系统功能获取中断向量 (35H功能)和设置中断向量(25H功能),具体用法可参考下 面的程序。通常,修改中断向量之前要用CLI指令关中断。 (2) 为确保中断能够产生,在使用STI开中断指令之前还要用OCW1 命令对IMR寄存器操作,解除用户中断级对应的屏蔽位。这样, 一旦CPU开中断可立即响应外部中断请求。,30,第5章 中断技术,(3) 如果要实现中断嵌套, 应该在中
22、断服务程序入口处立即开中断 (使用STI指令)。(4) 中断程序结束前必须发EOI命令和IRET指令。 如果是从片,则 服务程序结束前必须向主片和从片分别发EOI命令。以下是运行在PC上的一个完整的中断处理程序。程序功能是,对输入到IRQ7引脚的中断请求次数进行统计并显示, 计满9次后返回DOS操作系统。 STACK SEGMENT STACK “STACK” DB 100 DUP(?) STACK ENDS DATA SEGMENT INT_SEG DW ? ;定义变量,以保存中断向量段址 INT_OFF DW ? ;定义变量,以保存中断向量偏移量 CNT DB ? ;保存中断次数 DATA
23、 ENDS,31,第5章 中断技术,CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA;以下为主程序START: MOV AX,DATA MOV DS,AX MOV AL,0FH ;0FH为中断类型号(IR7对应的中断类型号) MOV AH,35H ;获取中断向量功能号 INT 21H ;调用后,中断向量段址在ES中,偏移量在BX中 MOV INT_SEG, ES ;保存原中断向量段址 MOV INT_OFF, BX ;保存原中断向量偏移量 CLI ;关中断 MOV AL,0FH ;中断类型号 MOV AH,25H ;设置中断向量功能号 MO
24、V DX,SEG INT_PRO ; MOV DS, DX ;DS指向新中断向量段址 MOV DX,OFFSET INT_PRO ;DX指向新中断向量偏移量 INT 21H MOV AX,DATA ;恢复数据段寻址,32,第5章 中断技术,MOV DS,AX IN AL,21H ;解除IR7的屏蔽位 AND AL,7FH OUT 21H,AL MOV BL,0 ;计数器初值 MOV CNT,0 ;计数单元初值为0L1: STI CMP CNT,BL ;比较判断,相同CPU循环等待 JZ L1 ;每产生一次中断,BL增1 MOV DL,BL ;准备调用显示功能 ADD DL,30H ;转换成AS
25、CII码 MOV AH,2 INT 21H ;屏幕显示 MOV CNT,BL ;保存 CMP BL,9 JZ L2 ;计满9 次转移 JMP L1L2: CLI ;恢复中断向量前关中断,33,第5章 中断技术,MOV AL,0FH ;中断类型号 MOV AH,25H ;设置原中断向量功能号 MOV DX,INT_OFF ;DX装入原中断向量偏移量 MOV BX,INT_SEG MOV DS,BX ;DS装入原中断向量段址 INT 21H IN AL,21H ;屏蔽IR7位 OR AL,80H OUT 21H,AL STI MOV AX,4C00H ;返回操作系统 INT 21H;以下为中断服务
26、程序INT_PRO PROCFAR STI INC BL MOV AL,20H ;中断结束命令(OCW2) OUT 20H,AL,34,第5章 中断技术,IRET ;中断返回INT_PRO ENDP ;中断程序结束CODE ENDS END START ;主程序结束注:以上实例没有用停机(HLT)指令等待中断, 主要原因是为了避免由于系统定时器中断而造 成中断次数的重复显示。,35,第5章 中断技术,4、综合应用 利用8086学习机,使用8254计数器0,采用工作方式3,产生1kHz 的方波脉冲信号;通过计数器1,采用工作方式4,用OUT1作计数 脉冲,计满100次向CPU发一次中断申请, C
27、PU响应这一中断后继 续写入计数值100,重新开始计数;通过计数器2,采用工作方式0, 每隔1秒钟向CPU发一次中断请求,使8个指示灯闪动。编写程序, 并画出硬件连接图。设 8254 芯片地址为 4C0H、 4C2H、 4C4H、 4C6H,8259芯片地址为4B0H,4B2H,74LS373芯片地址04A0H。分析:(1)由于CLK0=2.5MHz,T=0.4s,由计数器0产生的1kHz的 单拍负脉冲信号,T=1ms,所以初值为2500,即09C4H。 (2)因为计数器1和计数器2分别工作在方式4和方式0,当 GATE=1时,依靠计数初值启动定时或计数,因而初始 化时要先对中断控制器8259
28、A初始化,再对计数器1和计 数器2初始化,装入时间常数后立即执行。 (3)CLK2与OUT0连接在一起,输入时钟为1kHz,T=1ms。 计数器2每隔1秒钟向CPU发一次中断请求,计时工作时 间常数等于1000。,36,第5章 中断技术,37,第5章 中断技术,START: MOV DX,04C6H ;设置8253控制口地址 MOV AL,00 11 011 0B;二进制,方式3,写16位,计数器0 OUT DX,AL ;控制字写入计数器0的控制寄存器 MOV DX,04C0H ;设置8253计数器0地址 MOV AX,09C4H ;计数初值 OUT DX,AL MOV AL,AH OUT D
29、X,AL ;写入初值高8位 MOV BL,00H ;灯亮或灭的标志 CLI MOV DX,04B0H ;8259A的偶地址 MOV AL,00010011B;设置ICW18259初始化控制字ICW1 OUT DX,AL ;写入ICW1 MOV DX,04B2H ;8259A的奇地址 MOV AL,50H ;设置8259A初始化控制字ICW2 OUT DX,AL ;写入ICW2 MOV AL,0000001B ;设置8259A初始化控制字ICW4 OUT DX,AL ;写入ICW4,38,第5章 中断技术,MOV AL,0FCH ;设置IR0、IR1不可屏蔽操作控制字OCW1OUT DX,AL
30、;写入OCW1MOV AX,OFFSET INTR1 ;设置中断服务程序INTR1的偏移地址MOV WORD PTR 140H,AX ;中断矢量表地址为50H4MOV AX,SEG INTR1 ;设置中断服务程序INTR1所在段地址MOV WORD PTR 142H,AXMOV AX,OFFSET INTR2 ;设置中断服务程序INTR2偏移地址MOV WORD PTR 144H,AX ;中断矢量表地址为51H4MOV AX,SEG INTR2 ;设置中断服务程序INTR2所在段地址MOV WORD PTR 146H,AXMOV DX,04C6H ;设置8253控制口地址MOV AL,01 0
31、1 100 0B ;二进制数,方式4,写低字节,计数器1计数OUT DX,AL ;将控制字写入计数器1的控制寄存器MOV DX,04C6H ;设置8253控制口地址MOV AL,10 11 000 0B ;BCD数,方式0,写16位数,计数器2定时OUT DX,AL ;控制字写入计数器2的控制寄存器MOV DX,04C2H ;设置8253计数器1地址,39,第5章 中断技术,MOV AL,64H ;设置计数初值 OUT DX,AL ;计数初值写入8253计数器1 MOV DX,04C4H ;设置8253计数器2地址 MOV AX,1000H OUT DX,AL MOV AL,AH OUT DX
32、,AL STI ;开中断AA: HLT ;等待中断 JMP AAINTR1 PROC FAR CLI ;禁止中断 MOV DX,04C2H ;设置8253计数器1地址 MOV AX,100 MOV DX,AL MOV AL,AH OUT DX,AL STI ;开中断 MOV AL,20H MOV 20H,AL IRETINTR1 ENDP,40,第5章 中断技术,INTR2 PROC FAR CLI ;禁止中断 MOV DX,04A0H ;74LS373的地址 CMP BL,00H ;灯闪烁判断 JZ AA2 ;BL=00灯亮 MOV AL,00H ;BL=01灯灭 OUT DX,AL MOV BL,00H ;重新设标志 JMP AA3AA2 MOV AL,0FFH ;灯亮 OUT DX,AL MOV BL,01H ;重新设标志AA3 STI ;开中断 MOV AL,20H MOV 20H,AL IRETINTR2 ENDPCODE ENDS END START,