1、第第7章章 中断控制器中断控制器 2022-12-1627.1 中断基本概念 一、中断和中断源一、中断和中断源 MOV AX,DATA MOV DS,AX ADD AL,BX断点断点 ADC AH,0 中断请求中断请求内部内部事件发生事件发生外部外部INTRIFNMI外部中断源外部中断源(I/OI/O 请求请求,定时定时,A/DA/D 等等)内部中断源内部中断源(溢出溢出,软中断等软中断等)?!?!响应中断响应中断事件处理事件处理?!?!事件事件1处理处理 事件事件2处理处理 事件事件n处理处理 事件处理结束事件处理结束主程序主程序中断中断中断源中断源(事件)(事件)中断请求中断请求中断承认中
2、断承认中断源识别中断源识别中断服务中断服务中断响应中断响应中断处理过程中断处理过程断点保护断点保护2022-12-1637.1 中断基本概念 中断 CPU接到请求,暂停正在执行的程序而转向请求的处理程序,处理结束后又回到被中止的程序继续执行,这一过程称中断;中断源的分类;内部中断:由处理器内部产生的中断;外部中断:外部设备在中断申请引脚上产生的中断;可屏蔽中断与不可屏蔽中断 可屏蔽中断:能被处理器屏蔽掉而不被响应的中断(INTR)。不可屏蔽中断:不能被处理器屏蔽掉的中断(NMI)。2022-12-1647.1 中断基本概念 中断请求 在INTR上外设给出高电平,1)持续到被CPU响应;2)CP
3、U响应后及时撤消。中断承认(中断响应的条件)满足下列条件进入中断响应周期:a,INTR有中断请求;b,IF=1开中断;c,无RESET、HOLD和NMI或更高级的中断;d,一条指令执行结束。2022-12-1657.1 中断基本概念(1)关中断:CPU硬件自动清IF(关中断,禁止其它中断)。(2)断点保护:CPU硬件自动将PSW、CS、IP依次压栈,以便中断结束能 够返回断点。(3)中断源识别:1)软件查询(软件做)2)中断向量表(硬件自动做)软件查询方法:CPU收到INTR 读入D0D7 测试哪一位 确 定中断源 对其中断服务。软软件件查查询询硬硬件件电电路路 端端口口地地址址输输入入端端口
4、口译译码码ENABDBCPUINTRI IN NT T1 1(自自 1 1#设设备备)I IN NT T2 2(自自 2 2#设设备备)I IN NT Tn n(自自 n n#设设备备)1 1 软软件件查查询询流流程程I IN NT T1 1?I IN NT T2 2?INT1?I IN NT Tn n?1#中中断断服服务务 2#中中断断服服务务 n#中中断断服服务务2022-12-1667.1 中断基本概念中断响应 (1)保护现场:断点保护未保护的&主程序用的&中断服务也用的 寄存器 堆栈 (2)开中断(指令STI):采用软件查询方法的中断源识别。(3)中断服务:对中断事件的处理。(4)关中
5、断(指令CTI)(5)现场恢复:保护现场的逆过程,堆栈 寄存器 (6)开中断(指令STI):允许新的中断。(7)中断返回(指令IRET):从堆栈中依次弹出IP、CS、PSW,返回 原断点处,断点保护逆过程。2022-12-1677.1 中断基本概念 多个中断源同时请求中断,先响应中断优先级高的 中断优先级 根据各中断源的重要性确定其响应的优先次序。中断优先级控制原则:(1)多个同时请求,先响应高优先级,再响应低优先级;(2)当CPU执行某中断服务程序时,出现新的高优先级请求 中断,则:暂停低 处理高,高服务结束返回低,继续 低服务。主主程程序序 INT4I IN NT T4 4中中断断服服务务
6、子子程程序序 返返回回INT3I IN NT T2 2中中断断服服务务子子程程序序 返返回回INT2I IN NT T3 3中中断断服服务务子子程程序序 返返回回2022-12-1687.2 8086/8088的中断系统 内内 部部 种种 类类 中中断断 类类型型码码 获获取取类类型型 码码方方法法 除除法法错错中中断断:商商 CPU 可可表表示示的的最最大大值值 0 自自动动 单单步步中中断断:TF=1 产产生生中中断断,CPU 在在每每条条指指令令执执行行结结束束 1 自自动动 测测试试 TF,用用于于调调试试,DEBUG中中的的 T 命命令令 断断点点中中断断:指指令令 INT3 产产生
7、生中中断断,用用于于调调试试,可可置置于于程程 3 自自动动 序序中中任任何何位位置置,通通常常显显示示中中间间结结果果 R/M 溢溢出出中中断断:指指令令 INTO测测试试 OF,OF=1 时时产产生生中中断断 4 自自动动 软软中中断断:指指令令 INT n 产产生生中中断断 n(用用户户确确定定)从从指指令令自自动动 NMI:灾灾难难性性事事件件,不不受受 IF 屏屏蔽蔽,当当前前指指令令执执行行 2 自自动动 完完后后立立即即响响应应 INTR:一一般般外外部部事事件件,当当 IF=1 时时响响应应 n(用用户户确确定定)8259 自自动动送送 外外 部部 2022-12-1697.2
8、 8086/8088的中断系统n二、中断优先级l除法错、INT n、INTO优先级最高lNMI次之lINTR较低l单步最低n 三、中断源识别l 中断类型码 每一中断都有一个表示中断源编号的8位二进制数称中断类 型码(号),从0255,共256个。2022-12-16107.2 8086/8088的中断系统l中断向量 每一中断类型码对应一个中断向量,该中断向量指明了该类型码所对应的中断服务程序的入口地址l中断向量表 8086/8088系统将内存前1024个单元作为中断向量表,存放256个中断向量,每一中断向量占4个单元,前二字节是中断服务程序入口地址的偏移地址,后二字节是段地址。l中断向量表地址
9、:4*中断类型码n。l中断向量表的中断源识别方法 (1)CPU收到中断请求 获取中断类型码 查中断向量表 得到该中断源的中断服务子程序入口地址 转向服务子程序进行中断服务2022-12-16117.2 8086/8088的中断系统 (2)查表方法:中断类型码n*4(左移2位)得到表地址从表地址所指单元连续取4个字节数据得到IP、CS该CS:IP即为该中断源的中断服务子程序入口地址2022-12-16127.2 8086/8088的中断系统【例【例7.2】设用户自定义中断的类型号为24H,已编好的中断服务子程序为ISUB,试完成中断向量表初始化。解:中断向量表存放首地址为24H4,中断服务子程序
10、段地址为SEG ISUB,偏移地址为OFFSET ISUB。所以中断向量表初始化程序段如下。MOV AX,00HMOV DS,AX;向量表段地址置0000HMOV BX,24HSHLBXSHLBX;向量表存放首址MOV AX,OFFSET ISUB;中断服务程序入口偏移MOV BX,AX;偏移地址存入向量表MOV AX,SEG ISUB;中断服务子程序MOV BX+2,AX;段地址存入向量表2022-12-16137.2 8086/8088的中断系统l不可屏蔽中断NMI(1)上升沿提出中断请求。(2)不受IF=0的影响。(3)不要中断响应总线周期,自动进入中断类型2。(4)其它同INTR。l内
11、部中断(1)中断类型号或是指令码给出,或由硬件决定,都不要中断响应总线周期。(2)不受IF控制,但单步中断受TF控制。(3)其它同INTR,但要考虑优先级2022-12-16147.2 8086/8088的中断系统n 五、中断与中断返回指令l中断指令 INTO 测试OF,若OF=1执行中断,否则不操作。INT n 执行中断类型号为n的中断,n=00HFFH。(1)断点保护:SP-2 SP,PSW SP+1:SP;清PSW的 IF与TF;SP-2 SP,CS SP+1:SP;SP-2 SP,IP SP+1:SP。(2)中断源识别与跳转:n*4+1:n*4 IP;n*4+3:n*4+2 CS;程序
12、将自动跳转到CS:IP处执行该中断服务子程序l中断返回指令:IRET 执行中断返回时,CPU自动做恢复断点:SP+1:SP IP,SP+2 SP;SP+1:SP CS,SP+2 SP;SP+1:SP PSW,SP+2 SP2022-12-16157.3 可编程中断控制器8259Al 引脚:D0D7:双向数据线 /WR、/RD:写读控制信号,/CS片选 A0:地址线,选择内部寄存器 INT:中断请求输出 /INTA:中断响应输入线 IR0IR7:是外接中断源输入线。CAS0CAS2:级联时用。SP/EN:作输入是/SP,控制8259作 主片或从 片,1主0从。用作输出是/EN,控制三态门,大系统
13、中用。2022-12-16167.3 可编程中断控制器8259Al 结构框图 中断请求寄存器IRR:存放IR0 IR7中断请求 服务寄存器ISR:存放IR0 IR7中正在服务的源 中断屏蔽寄存器IMR(interrupt mask)4个8位初始化命令字ICW 3个8位操作命令字OCW2022-12-16177.3 可编程中断控制器8259A(1)中断外设在IR0IR7上产生n条中断请求8259,8259将相应的IRR位置1;(2)IRR中断请求+设定的IMR屏蔽 优先级分析器,最高优先级的请求送到INT CPU;(3)CPU收到INT响应:发送连续二个总线周期的/INTA;8259在第一个/I
14、NTA,该中断源对应的IRR位复位,ISR位置位,从而禁止较低优先级的中断。8259在第二个/INTA:送出8位的中断类型码 D0D7。(4)8259中断结束 自动结束方式:第二个/INTA结束时ISR复位相应位;非自动方式:收到EOI命令才复位,以开放低级中断申请(5)CPU读取中断类型码查中断向量表转服务子程序2022-12-16187.3 可编程中断控制器8259Al 优先级管理 (1)固定优先级(完全嵌套排序方式):IR0 IR1 IR7 (2)自动循环优先级(等优先级方式):优先级循环,刚服务过的最低,下一个变为最高。如5级刚服务过,6级变为最高,7级次之。(3)特殊循环优先级:优先
15、级循环,通过命令字指定最低优先级。l 屏蔽方式 (1)一般屏蔽方式:一个中断请求被响应 8259禁止所有同级、低级的请求 (2)特殊屏蔽方式:解除这种禁止,允许同级、低级的请求,即 IRi被响应 ISR、IMR设置的位对应的IR禁止请求,其他所有级别的IR允许请求2022-12-16197.3 可编程中断控制器8259Al 中断结束方式 (1)非自动EOI:软件发EOI命令字结束 普通EOI:清除ISR中已置位的优先级最高的位,适用于固定优 先级、自动循环优先级;特殊EOI:清除命令字指定的ISR位,适用于所有优先级方式,特别是特殊循环优先级 (2)自动EOI:硬件自动EOI CPU响应中断请
16、求后,向8259发连续2个/INTA周期,在第二个 /INTA结束时8259自动执行普通EOI的工作(复位ISRi).l 中断触发方式 (1)电平触发方式 (2)边沿触发方式 2022-12-16207.3 可编程中断控制器8259A2022-12-16217.3 可编程中断控制器8259A【例【例7.3】某8086系统中,使用单片8259A,中断请求信号为高电平触发,需要设置ICW4,8259A端口地址为20H、21H,写出初始化命令字ICW1以及设置ICW1的 命令。解:高电平触发、单片8259A以及需要设置ICW4,初始化命令字为00011011B=1BH。写ICW1的命令如下。MOV
17、AL,1BHOUT 20H,AL;写ICW1用偶地址2022-12-16微机原理227.3 可编程中断控制器8259A【例【例7.4】某PC机中有8个可屏蔽中断(IR0IR7),其中IR0的中断类型号为18H,8259A端口地址为20H、21H,请问ICW2是怎样设置的?用指令设置ICW2。解:由于IR0的中断类型号是18H,所以ICW2的内容是00011000B=18H。写ICW2的命令如下。MOV AL,18H OUT 21H,AL;写ICW2用奇地址2022-12-16237.3 可编程中断控制器8259A2022-12-16247.3 可编程中断控制器8259A2022-12-1625
18、7.3 可编程中断控制器8259A2022-12-16267.3 可编程中断控制器8259A【例【例7.5】IBM PC机的ROM BIOS关于8259A的初始化程序段如下。INTA00 EQU20H;8259A偶地址INTA01 EQU21H;8259A奇地址MOV AL,13H;单片8259A,边沿触发,需要ICW4OUT INTA00,ALMOV AL,08H;中断类型号8HOUT INTA01,ALMOV AL,09H;8086/8088,缓冲,从片8259A,非自动结束,正常全嵌套OUT INTA01,AL2022-12-16277.3 可编程中断控制器8259A【例【例 7.6】某
19、微机系统中有8259A,满足下列条件:工作在8086系统,单片8259A,中断请求信号为电平触发。中断类型码为40H47H。中断优先级采用普通全嵌套方式,中断结束采用自动EOI方式,系统中未使用数据缓冲器。系统分配给8259A的端口地址为20H和21H,试对该8259A进行初始化。解:初始化程序如下所示。MOV AL,00011011B;写ICW1OUT 20H,ALMOV AL,01000000B;写ICW2OUT 21H,ALMOV AL,00000011B;写ICW4OUT 21H,AL2022-12-16287.3 可编程中断控制器8259A五、操作命令字OCW 2022-12-162
20、97.3 可编程中断控制器8259A五、操作命令字OCW 【例【例 7.7】某微机系统中有8259A,如果要将IR1、IR6两个引脚上的中断请求屏蔽,请问应如何设置OCW1?并用命令写入OCW1。假设地址为20H、21H。解:由于IR1和IR6上的中断请求被屏蔽,所以OCW1的第0位和第6位应该置“1”。OCW1为01000010B。写入程序如下所示。MOV AL,01000010BOUT 21H,AL2022-12-16307.3 可编程中断控制器8259A2022-12-16317.3 可编程中断控制器8259A【例【例7.8】非自动EOI下用OCW2发布结束命令撤销ISR中断标志结束中断
21、。假设地址为20H,21H。解:程序如下所示。MOV AL,20H;20H是命令字,EOI=1OUT 20H,AL;A0=0,20H是OCW2地址2022-12-16327.3 可编程中断控制器8259A【例【例7.9】如果8086系统中的8259A的优先级顺序为IR4、IR5、IR6、IR7、IR0、IR1、IR2、IR3,设8259A的偶地址为20H,试用程序实现之。解:要实现题目中的优先级,应先确定OCW2,然后写入偶地址。OCW2=11000011B。程序如下所示。MOV AL,11000011BOUT 20H,AL2022-12-16337.3 可编程中断控制器8259A2022-1
22、2-16347.3 可编程中断控制器8259A【例【例7.10】设8259A的IR3输入引脚上有中断请求,但此时8086 CPU的IF=0,8086 CPU如何才能知道8259A的IR3上有中断请求?设偶地址为20H。解:可用中断查询命令来解决这个问题,先发查询命令OCW3,然后读偶地址,就可以知道IR3是否有中断申请。OCW3应该取00001100B。程序如下所示。MOV AL,00001100B;P=1,查询命令OUT 20H,AL;输出查询命令IN AL,20H;读8259A的查询字 读到的信息如下:0 表示IR3上没有中断请求。1 0 1 1 表示IR3上有中断请求。2022-12-1
23、6357.3 可编程中断控制器8259A【例【例7.11】编写一段程序,将8086系统中8259A的IRR、ISR、IMR 3个寄存器的内容读到后,写入存储器从0090H开始的数组中,设8259A的端口地址为20H和21H。MOV AL,00001010B;指出读IRR,OCW3=00001010BOUT 20H,ALIN AL,20H ;读IRR的内容MOV 0090H,AL ;将IRR的内容写入数组中MOV AL,0BHOUT 20H,AL ;指出读ISR,OCW3=00001011BIN AL,20HMOV 0091H,AL ;将ISR的内容写入数组中IN AL,21H ;直接从奇地址端
24、口读取IMR的内容MOV 0092H,AL ;将IMR的内容写入数组中2022-12-16367.3 可编程中断控制器8259An六六 8259寄存器的访问控制:寄存器的访问控制:n8259的的9个寄存器只占个寄存器只占2个地址个地址(只有只有A0地址线地址线),如何区分如何区分?2022-12-16377.3 可编程中断控制器8259A中断系统的应用方法n(1)分配合适的中断级;n(2)设计中断请求逻辑:n(3)对8259A初始化n(4)编写中断服务子程序n(5)中断向量表初始化2022-12-16387.4 8259的应用n一、一、8259与系统总线的连接与系统总线的连接8259A的偶地址
25、:A1=0,地址为0FF00H、0FF01H、0FF04H、0FF05H中的任意一个。8259A的奇地址:A1=1,地址为0FF02H、0FF03H、0FF06H、0FF07H中的任意一个2022-12-16397.4 8259的应用n二、初始化及操作控制二、初始化及操作控制nSET59A:MOVDX,0FF00H;A0=0nMOVAL,00010011B;ICW1:D3=LTIM=0沿触发沿触发,D1=1单片,单片,D0=1要要ICW4nOUTDX,ALnMOVDX,0FF02H;A0=1nMOVAL,00011000B;ICW2:中断类型码中断类型码n IR0IR7类型码类型码18H1FH
26、nOUTDX,ALnMOVAL,00000011B;ICW4:8086/8088,n 自动自动EOI,非缓冲非缓冲,正常全嵌套正常全嵌套n OUTDX,AL2022-12-16407.4 8259的应用在某些情况下,如果不希望看到某些中断发生,我们可以通过操作命令字OCW1的设置来屏蔽那些中断。同时也可以检查对某些中断的屏蔽是否成功。程序如下。MOV DX,0FF02H MOV AL,0;OCW1为00H,没有屏蔽中断 OUT DX,AL IN AL,DX;读IMR OR AL,AL;检查是否屏蔽?JNZ IMERR;不为0出错 MOV AL,0FFH;OCW1为FFH,全部屏蔽 OUT DX
27、,AL IN AL,DX;读IMR ADD AL,1;检查是否有屏蔽?JNZ IMERR;不为全1出错2022-12-16417.4 8259的应用8259A连接到CPU上,通过数据总线可以读取ISR、IRR的内容,命令如下。MOV DX,0FF00H ;OCW3用偶地址 MOV AL,00001011B ;OCW3的 P=0,设置读ISR OUT DX,AL IN AL,DX ;读出ISR MOV AL,00001010B ;OCW3的 P=0,设置读IRR OUT DX,AL IN AL,DX ;读出IRR2022-12-16427.5 小型案例实训n案例案例1-8259实现电子钟实现电子
28、钟n利用利用20ms一次的定时中断服务一次的定时中断服务程序,建立时、分、秒电子钟程序,建立时、分、秒电子钟n(1)编写)编写20ms中断服务程序中断服务程序n每次中断(每次中断(20ms)n1=n1+1n n1 50 中断返回;中断返回;n n1=50second=second+1,n1=0nsecond 60 中断返回;中断返回;n second=60 minute=minute+1,second=0nminute 60 中断返回;中断返回;n minute=60 hour=hour+1,minute=0 nhour 24 中断返回;中断返回;n hour=24 hour=0 8086 总
29、总线线 8259D0 D7IR0外外设设INTRINT 20ms MTIMER:20ms 方方波波计计数数 n1 Second(压压缩缩 BCD)Minute(压压缩缩 BCD)Hour (压压缩缩 BCD)TIMER+1TIMER+2TIMER+32022-12-16437.5 小型案例分析 电子钟n中断服务子程序:中断服务子程序:nCLOCKPROC FARn PUSHDSnPUSHAX;现场保护;现场保护nPUSHSInMOVAX,SEG TIMER;中断服务;中断服务nMOVDS,AXnMOVSI,OFFSET TIMERnMOVAL,SInINCAL;n1+1nMOVSI,AL保存保
30、存 新新n1nCMPAL,50;1秒到秒到?nJNZTRNEDnMOVAL,0 ;1秒到秒到 则则n1=0nMOVSI,AL2022-12-16447.5 小型案例分析 电子钟n MOVAL,SI+1nADDAL,1;second+1 n DAAn MOVSI+1,AL;保存;保存 新新secondn CMPAL,60H;一分钟到?;一分钟到?n JNZTRNEDn MOVAL,0n MOVSI+1,ALn MOVAL,SI+2nADDAL,1nDAAnMOVSI+2,ALnCMPAL,60H;一小时到?;一小时到?nJNZTRNED2022-12-1645n MOVAL,0n MOVSI+2
31、,ALn MOVAL,SI+3n ADDAL,1nDAAnMOVSI+3,ALnCMPAL,24H;24小时到?小时到?nJNZTRNEDnMOVAL,0nMOVSI+3,ALnTRNED:POPSI;现场恢复;现场恢复nPOPAXn POPDSn STI;开中断;开中断nIRET;中断返回;中断返回nCLOCKENDP2022-12-1646 SET8259A:MOV DX,0FF00H;偶地址MOV AL,00010011B;ICW1,D3的LTIM=0边沿触发,D1=1 ;单片,D0=1要ICW4OUT DX,ALMOV DX,0FF01H;奇地址MOV AL,00011000B;ICW
32、2:中断源IR0IR7类型码18H1FHOUT DX,ALMOV AL,00000011B;ICW4:8086/8088,自动EOI,非缓冲,正常 ;全嵌套OUT DX,AL2022-12-1647n(3)初始化中断向量表:初始化中断向量表:nINITB:MOV AX,0n MOV DS,AXn MOVSI,18Hn SHLSI,1;中断类型码;中断类型码*4n SHLSI,1n MOV DX,OFFSET CLOCKn MOVSI,DXn MOV DX,SEG CLOCKn MOVSI+2,DXn2022-12-1648 DATA SEGMENT TIMER DB 4 DUP(0)DATA
33、ENDS STACK SEGMENT PARA STACK STACK DB 100 DUP(0)STACK ENDS CODESEGMENTASSUME DS:CODE,DS:DATA,SS:STACK START:MOV AX,0;主程序初始化中断向量表程序段 MOV DS,AX;初始化中断向量表程序段 MOV SI,18H SHL SI,1 SHL SI,12022-12-1649 MOV DX,OFFSET CLOCK MOV SI,DX MOV DX,SEG CLOCK MOV SI+2,DX MOV DX,0FF00H;初始化8259A程序段MOV AL,00010011B OUT
34、 DX,ALMOV DX,0FF01HMOV AL,00011000BOUT DX,ALMOV AL,00000011B OUT DX,AL2022-12-1650 STI;开中断WAIT:HLT;等待20ms中断请求 JMPWAITCLOCK PROC FAR;中断服务子程序 PUSH AX PUSH SI MOV AX,SEG TIMER MOV DS,AX MOV SI,OFFSET TIMER MOV AL,SI INC AL MOV SI,AL CMP AL,50 JNZ TRNED MOV AL,0 MOV SI,AL MOV AL,SI+12022-12-1651 ADD AL,
35、1 DAA MOV SI+1,AL CMP AL,60H JNZ TRNED MOV AL,0 MOV SI+1,AL MOV AL,SI+2 ADD AL,1 DAA MOV SI+2,AL CMP AL,60H JNZ TRNED MOV AL,0 MOV SI+2,AL MOV AL,SI+3 2022-12-1652 ADD AL,1 DAA MOV SI+3,AL CMP AL,24H JNZ TRNED MOV AL,0 MOV SI+3,ALTRNED:POP SI POP AX STI IRETCLOCK ENDPCODE ENDS END START人有了知识,就会具备各种分析能力,明辨是非的能力。所以我们要勤恳读书,广泛阅读,古人说“书中自有黄金屋。”通过阅读科技书籍,我们能丰富知识,培养逻辑思维能力;通过阅读文学作品,我们能提高文学鉴赏水平,培养文学情趣;通过阅读报刊,我们能增长见识,扩大自己的知识面。有许多书籍还能培养我们的道德情操,给我们巨大的精神力量,鼓舞我们前进。