第八章-中断及异常-4.ppt

上传人:s****8 文档编号:68964181 上传时间:2022-12-30 格式:PPT 页数:54 大小:280KB
返回 下载 相关 举报
第八章-中断及异常-4.ppt_第1页
第1页 / 共54页
第八章-中断及异常-4.ppt_第2页
第2页 / 共54页
点击查看更多>>
资源描述

《第八章-中断及异常-4.ppt》由会员分享,可在线阅读,更多相关《第八章-中断及异常-4.ppt(54页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、中断程序设计一、中断向量的保存、设置和恢复一、中断向量的保存、设置和恢复二、软中断程序设计二、软中断程序设计三、可屏蔽硬中断程序设计三、可屏蔽硬中断程序设计四、问题讨论四、问题讨论一、中断向量的保存、设置和恢复1.1.保存中断向量保存中断向量(35(35H H功能功能)入口参数入口参数 AL=AL=要保存向量的中断类型号要保存向量的中断类型号N N功能号功能号 AH=35HAH=35H类型号类型号 21 21H H出口参数出口参数 BX=(0:N4)BX=(0:N4)ES=(0:N4+2)ES=(0:N4+2)实现功能实现功能 将类型号将类型号N N 的中断向量保存在的中断向量保存在ESES、

2、BXBX中中方法一:用堆栈保存中断向量MOV AL,09H MOV AL,09H ;取中断向量取中断向量 MOV AH,35HMOV AH,35HINT 21HINT 21HPUSH ES ;PUSH ES ;用堆栈保存用堆栈保存PUSH BXPUSH BX.例1 保存09H类型的中断向量(如何保存如何保存(ES),(BX)ES),(BX)方法二方法二:用变量保存中断向量用变量保存中断向量 save_save_cs cs DW?DW?;定义变量定义变量 save_save_ip ip DW?DW?.MOV AX,SEG save_ MOV AX,SEG save_cscs MOV DS,AXM

3、OV DS,AX MOV AL,09H MOV AL,09H ;取中断向量取中断向量 MOV AH,35HMOV AH,35H INT 21H INT 21H MOV save_ MOV save_cscs,ES ,ES ;用变量保存用变量保存 MOV save_MOV save_ipip,BX,BX 入口参数入口参数 AL=AL=要设置向量的中断类型号要设置向量的中断类型号N N DS:DX=DS:DX=中断子程的入口地址中断子程的入口地址(中断向量中断向量)功能号功能号 AH=25HAH=25H 类型号类型号 21 21H H 出口参数出口参数 无无 实现功能实现功能 将类型将类型N N的

4、中断向量设置在向量表中的中断向量设置在向量表中,即即 (0:(0:N 4)=N 4)=类型类型N N中断子程入口地址的中断子程入口地址的偏移值偏移值 (0:(0:N 4+2)=N 4+2)=类型类型N N中断子程入口地址的中断子程入口地址的段值段值2.2.设置中断向量设置中断向量(25(25H H功能功能)例2 设置中断子程设置中断子程Sound Sound 的中断向量,类型号为的中断向量,类型号为6060H Hcode SEGMENTcode SEGMENT ASSUME CS:code ASSUME CS:codestart:.start:.MOV AX,SEG sound MOV AX,

5、SEG sound MOV DS,AX MOV DS,AX MOV DX,Offset sound MOV DX,Offset sound MOV AL,60H MOV AL,60H MOV AH,25H MOV AH,25H INT 21H INT 21H .MOV AHMOV AH,4CH4CH INT 21H INT 21H ;中断子程中断子程 sound PROC sound PROC .IRET IRET sound ENDP sound ENDP code ENDS code ENDS END start END start二、软中断程序设计软中断子程与子程序的编写类似软中断子程与

6、子程序的编写类似,其不同点在于:其不同点在于:1 1子程用子程用CALLCALL指令调用;中断子程用指令调用;中断子程用INTINT指令调用指令调用2 2子程用子程用RETRET指令返回;中断子程用指令返回;中断子程用IRETIRET指令返回指令返回3 3CALLCALL指令直接用过程名做操作数指令直接用过程名做操作数,即由过程名提供子程的入口地址即由过程名提供子程的入口地址INTINT指令由类型号指令由类型号N N到中断向量表中固定的单元到中断向量表中固定的单元 获得中断子程的入口地址获得中断子程的入口地址 对比对比-软中断程序与子程序的编写软中断程序与子程序的编写其不同点在其不同点在于于:

7、1.1.应在主程中将中断子程的入口地址应在主程中将中断子程的入口地址(中断向量中断向量)放入中断向量表中。(可用放入中断向量表中。(可用2525H H系统功能完成)系统功能完成)2.2.主程中用主程中用INTINT指令调用中断子程指令调用中断子程3.3.中断子程应用中断子程应用IRETIRET返回返回.例3:用子程编写和用一个用子程编写和用一个6060H H类型的中断子程编写,类型的中断子程编写,功能是将功能是将BXBX寄存器的内容以寄存器的内容以16 16 进制形式显示出来。进制形式显示出来。list PROC list PROC ;子程子程 MOV CH,4 MOV CH,4 MOV CL

8、,4 MOV CL,4next:next:ROL BX,CL ROL BX,CL MOV DL,BL MOV DL,BL AND DL,0FH AND DL,0FH ADD DL,30H ADD DL,30H CMP DL,39H CMP DL,39H JLE print JLE print ADD DL,07H ADD DL,07H print:MOV AH,2H print:MOV AH,2H INT 21H INT 21H DEC CH DEC CH JNZ next JNZ next RET RET ;子程返回子程返回 list ENDP list ENDP code ENDS cod

9、e ENDS END start END startcode SEGMENTcode SEGMENT ASSUME CS:code ASSUME CS:codestart:start:CALL list CALL list ;调用子程调用子程 MOV AH,4CHMOV AH,4CH INT 21H INT 21H ;返回返回DOSDOS若用子程编写:若用子程编写:code SEGMENTcode SEGMENT ASSUME CS:code ASSUME CS:codestart:start:MOV AX,SEG list MOV AX,SEG list ;用用2525H H功能功能 MOV

10、 DS,AX MOV DS,AX ;将中断子程将中断子程listlist LEA DX,list LEA DX,list ;的入口地址的入口地址 MOV AL,60H MOV AL,60H ;设置到设置到 MOV AH,25H MOV AH,25H ;中断向量表中中断向量表中 INT 21HINT 21H INT 60H INT 60H ;调用中断子程调用中断子程 MOV AH,4CHMOV AH,4CH INT 21H INT 21H ;返回返回DOSDOS list list PROC ;PROC ;中断子程中断子程list list MOV CH,4 MOV CH,4 MOV CL,4

11、MOV CL,4next:ROL BX,CL next:ROL BX,CL MOV DL,BL MOV DL,BL AND DL,0FH AND DL,0FH ADD DL,30H ADD DL,30H CMP DL,39H CMP DL,39H JLE print JLE print ADD DL,07H ADD DL,07Hprint:MOV AH,2H print:MOV AH,2H INT 21H INT 21H DEC CH DEC CH JNZ next JNZ next IRET ;IRET ;中断返回中断返回list list ENDP ENDP code ENDScode E

12、NDS END start END start用用INT 60HINT 60H中断子程编写:中断子程编写:三、可屏蔽硬中断程序设计分三大步骤:分三大步骤:1.1.了解了解IBM PC/XTIBM PC/XT系统可屏蔽硬中断的响应过程系统可屏蔽硬中断的响应过程,据连线确定外设中断申请对应的中断类型号据连线确定外设中断申请对应的中断类型号;2 2主程中做好外设发出中断申请,主程中做好外设发出中断申请,CPUCPU能够响应的准备工作能够响应的准备工作;3 3编写可屏蔽硬中断子程,完成中断源请求的任务编写可屏蔽硬中断子程,完成中断源请求的任务.1.1.了解了解IBM PC/XTIBM PC/XT系统可

13、屏蔽硬中断的响应过程系统可屏蔽硬中断的响应过程,据连线确定外设中断申请对应的中断类型号。据连线确定外设中断申请对应的中断类型号。例例 接口的中断申请连接口的中断申请连 IRQ3 IRQ3 类型号类型号0 0BHBH 接口的中断申请连接口的中断申请连 IRQ5 IRQ5 类型号类型号0 0DHDHIRQ2IRQ3IRQ4IRQ5IRQ6IRQ7CS8259AA0RDWRD0D7SP/ENCA0CA1CA2GNDIR0IR1IR2IR3IR4IR5IR6IR7Vcc+5V用于多片用于多片8259A级连情况级连情况INTAINT数数 据据 线线片片选选译译码码203FHIOWA0总线总线 IORA5

14、A9D0D7 INTA INTR08H09H0AH0BH0CH0DH0EH0FH18.218.2HzHz方波方波键键 盘盘PC/XT总线总线在主程序中应做的工作:在主程序中应做的工作:CPUCPU关中断关中断 (用用CLICLI置置 IF=0 IF=0)保存原中断向量保存原中断向量(用用3535H H系统功能系统功能)设置中断向量设置中断向量 (用用2525H H系统功能系统功能)设设置置82598259A A的的中中断断屏屏蔽蔽字字,使使2121H H端端口口对对应应位位为为0 0,允许中断申请进入优先级裁决器允许中断申请进入优先级裁决器 CPUCPU开中断开中断 (用用STISTI置置IF

15、=1)IF=1)2 2主程中做好外设发出中断申请,主程中做好外设发出中断申请,CPUCPU能够响应的准备工作。能够响应的准备工作。准备工作做好后,此后若该级有中断申请,准备工作做好后,此后若该级有中断申请,准备工作做好后,此后若该级有中断申请,准备工作做好后,此后若该级有中断申请,则则则则CPUCPU响应中断,执行相应类型的中断子程。响应中断,执行相应类型的中断子程。响应中断,执行相应类型的中断子程。响应中断,执行相应类型的中断子程。主程在返回主程在返回DOS前,应恢复原中断向量。前,应恢复原中断向量。(用用25H系统功能系统功能)8088INTR主主 板板IF键键 盘盘18.2Hz 方波方波

16、8259AINT中断屏蔽寄存器中断屏蔽寄存器键盘键盘中断申请中断申请IR1IR2IR7IR0当前当前中断中断服务服务寄存器寄存器键盘键盘接口接口IRQ2IRQ7PC总总线线外外设设接接口口外外设设08h09h0Ah0FhIBM PC/XTIBM PC/XT微机可屏蔽中断响应过程示意图微机可屏蔽中断响应过程示意图 处理中断源申请任务部分的编写与普通子程类似处理中断源申请任务部分的编写与普通子程类似 在中断子程结束前,在中断子程结束前,发中断结束命令清除发中断结束命令清除 8259 8259A A 中中ISRISR的记录;的记录;否则,响应一次中断后否则,响应一次中断后,同级中断和低级中断将被优先

17、级裁决器屏蔽同级中断和低级中断将被优先级裁决器屏蔽 用用IRETIRET中断返回指令返回主程被中断处中断返回指令返回主程被中断处 3 3编写硬中断子程,完成中断源请求的任务编写硬中断子程,完成中断源请求的任务编写硬中断子程,完成中断源请求的任务编写硬中断子程,完成中断源请求的任务返回返回DOSCLI关中断关中断保存原中断向量保存原中断向量设置新中断向量设置新中断向量设置设置8259A的中断屏蔽字的中断屏蔽字中断子程中断子程有关量的初始化有关量的初始化STI开中断开中断主程其它工作处理主程其它工作处理恢复原中断向量恢复原中断向量开始开始主主程程序序保护现场保护现场发中断结束命令发中断结束命令EO

18、I完成中断源完成中断源申请的任务申请的任务恢复现场恢复现场IRET中断返回中断返回开始开始中断子程中断子程可可屏屏蔽蔽硬硬中中断断程程序序流流程程图图例例4 4 利用连接在利用连接在82598259A IR0A IR0上的时钟信号,上的时钟信号,编写具有定时功能程序,编写具有定时功能程序,要要 求求 每每 隔隔 5 5秒秒 在在 屏屏 蔽蔽 上上 显显 示示 一一 个个 字字 符符 AA。8088INTR主主 板板IF18.2Hz 方波方波8259AINT中断屏蔽寄存器中断屏蔽寄存器IR0当前当前中断中断服务服务寄存器寄存器08h时钟信号连接在时钟信号连接在IR0IR0上,申请的中断类型号为上

19、,申请的中断类型号为0808H H。时钟信号是一个频率为时钟信号是一个频率为18.218.2HZHZ的方波信号的方波信号,即每秒向即每秒向82598259A A发出发出18.218.2次的中断申请。次的中断申请。如果如果CPUCPU响应该中断申请,响应该中断申请,则以每秒则以每秒18.218.2次的频率执行次的频率执行0808H H类型的中断子程类型的中断子程。分析分析80888259AINTR IR018.2Hz方波信号方波信号INT中断申请的任务是每中断申请的任务是每5 5秒显示一个字符秒显示一个字符 AA1 1秒执行秒执行18.218.2次,则次,则5 5秒执行秒执行18.25=9118

20、.25=91次,次,只在执行到第只在执行到第9191次时显示次时显示 AA,其它不显示。其它不显示。在中断子程中用一个量来计数中断子程被执行的次数在中断子程中用一个量来计数中断子程被执行的次数,即即CPUCPU响应响应IR0IR0中断申请的次数。中断申请的次数。当当达达到到9191次次,则则显显示示 AA,并并将将计计数数值值清清0 0,重重新新计计数数;其它情况只计数,不显示其它情况只计数,不显示 AA。中断子程的最后应发中断结束命令中断子程的最后应发中断结束命令EOIEOI。主程序主程序中断子程中断子程CLI关中断关中断保存原保存原08H中断向量中断向量设置新设置新08H中断向量中断向量设

21、置设置8259A的中断屏蔽字的中断屏蔽字,允许允许IR0中断中断 08H中断子程中断子程 执行次数初值执行次数初值0STI开中断开中断主程其它工作处理主程其它工作处理恢复原恢复原08H中断向量中断向量返回返回DOS开始开始CX发中断结束命令发中断结束命令EOI恢复现场恢复现场IRET中断返回中断返回保存现场保存现场开始开始中断子程被执行一次中断子程被执行一次CX CX+1 NY调调02H DOS功能功能显示字符显示字符A CX 0 重新记数重新记数到到91次,即次,即5秒时间到秒时间到?code SEGMENT code SEGMENT ASSUME CS:code ASSUME CS:cod

22、estart:start:CLI CLI ;关中断关中断MOV AL,08H MOV AL,08H MOV AH,35HMOV AH,35HINT 21H ;INT 21H ;取系统取系统0808H H类型中断向量类型中断向量PUSH ES ;PUSH ES ;用堆栈保存用堆栈保存 PUSH BXPUSH BXPUSH DS PUSH DS MOV DX,OFFSET display ;MOV DX,OFFSET display ;设置设置0808H H 类型中断向量类型中断向量 MOV AX,SEG displayMOV AX,SEG displayMOV DS,AXMOV DS,AXMOV

23、 AL,08HMOV AL,08HMOV AH,25HMOV AH,25HINT 21HINT 21HPOP DSPOP DS程序清单程序清单:IN AL,21H ;IN AL,21H ;设置设置82598259A A中断屏蔽字中断屏蔽字,AND AL,1111 1110B ;AND AL,1111 1110B ;允许允许IR0IR0中断中断 OUT OUT 21H,AL 21H,ALMOV CX,0 ;MOV CX,0 ;置中断子程计数器初值为置中断子程计数器初值为0 0STI ;CPUSTI ;CPU开中断开中断MOV SI,8000H ;MOV SI,8000H ;用双重循环延时,用双重

24、循环延时,w2:MOV DI,8000H ;w2:MOV DI,8000H ;模拟模拟CPUCPU对其他任务的处理对其他任务的处理 w1:DEC DI ;DI,SIw1:DEC DI ;DI,SI的值可修改的值可修改,控制主程执行时间控制主程执行时间JNZ w1JNZ w1DEC SIDEC SIJNZ w2JNZ w2POP DX ;POP DX ;恢复系统恢复系统0808H H类型中断向量类型中断向量 POP DSPOP DSMOV AL,08HMOV AL,08HMOV AH,25HMOV AH,25HINT 21HINT 21HMOV AH,4CH ;MOV AH,4CH ;返回返回D

25、OSDOSINT 21HINT 21H display display PROC PROC ;自编的自编的0808H H类型中断子程类型中断子程 PUSH AX PUSH AX ;保护现场保护现场 INC CX ;INC CX ;执行中断子程一次,计数值加执行中断子程一次,计数值加1 1 CMP CX,91CMP CX,91 JNZ exit ;JNZ exit ;到到9191次了吗?未到跳转至次了吗?未到跳转至exitexit MOV DL,A ;MOV DL,A ;到,显示到,显示 AA MOV AH,02 MOV AH,02 INT 21H INT 21H MOV CX,0 ;MOV C

26、X,0 ;清计数值为清计数值为0 0,重新计时,重新计时exit:MOV AL,20H ;exit:MOV AL,20H ;发中断结束命令发中断结束命令EOIEOI OUT 20H,AL OUT 20H,AL POP AX POP AX ;恢复现场恢复现场 IRET ;IRET ;中断返回中断返回display display ENDP ENDPcode ENDScode ENDS END start END startsys08 PROCsys08 PROC.MOV AX,0040HMOV AX,0040HMOV DS,AXMOV DS,AX.INT INT 1CH 1CH.MOV AL,2

27、0HMOV AL,20HOUT 20H,ALOUT 20H,ALIRETIRETsys08 ENDPsys08 ENDPDOSDOS系统提供的系统提供的0808H H类型中断子程类型中断子程:sys1c PROCsys1c PROC IRET IRETsys1c ENDPsys1c ENDPDOSDOS系统提供系统提供的的1 1CHCH类型中断子程类型中断子程:系统系统0808H H类型中断子程要点类型中断子程要点:进入子程后,修改了进入子程后,修改了DSDS段寄存器的值;段寄存器的值;程序中调用了程序中调用了1 1CHCH类型中断子程,类型中断子程,每执行一次每执行一次0808H H中断子程

28、中断子程,执行一次执行一次1 1CHCH中断子程;中断子程;程序最后发中断结束命令程序最后发中断结束命令EOIEOIsys08 PROCsys08 PROC.MOV AX,0040HMOV AX,0040HMOV DS,AXMOV DS,AX.INT INT 1CH 1CH.MOV AL,20HMOV AL,20HOUT 20H,ALOUT 20H,ALIRETIRETsys08 ENDPsys08 ENDP1 1CHCH类型是软中断,按编写软中断子程方法编写:类型是软中断,按编写软中断子程方法编写:系统系统0808H H中断子程改变中断子程改变DSDS值,故:值,故:1 1CHCH中断子程用

29、到定义的变量,须在子程中给中断子程用到定义的变量,须在子程中给DSDS赋值。赋值。1 1CHCH类型是软中断,不需要发中断结束命令。类型是软中断,不需要发中断结束命令。1 1CHCH类型是系统为用户保留的定时中断子程类型是系统为用户保留的定时中断子程 系统系统1 1CHCH中断子程只有一条中断返回语句,中断子程只有一条中断返回语句,确保确保0808H H中断子程调用后能返回。中断子程调用后能返回。用户可通过编写用户可通过编写1 1CHCH中断子程实现具有定时功能的任务中断子程实现具有定时功能的任务sys1c PROCsys1c PROC IRET IRETsys1c ENDPsys1c END

30、P例5 编写编写0909H H类型的键盘中断子程类型的键盘中断子程键键盘盘接接口口键键盘盘键盘键盘中断申请中断申请8259AIR1INTAINT8088INTRINTA60H端口端口61H端口端口8255A应答信号应答信号扫描码扫描码辅辅助助电电路路主主 板板IR018.2Hz方方 波波说明:说明:键盘接口通过键盘接口通过82598259A A的的IR1IR1发中断申请发中断申请,类型号类型号0909H H 键盘接口对按下键和释放键都向键盘接口对按下键和释放键都向82598259A A发出中断申请,发出中断申请,即若即若CPUCPU满足响应条件,对键盘上的一个按键操作,满足响应条件,对键盘上的

31、一个按键操作,CPUCPU将执行两次将执行两次0909H H类型的中断子程:类型的中断子程:按下键一次,释放键一次按下键一次,释放键一次CPUCPU可从可从6060H H端口读取操作键的扫描码,端口读取操作键的扫描码,每个键对应有一个扫描码每个键对应有一个扫描码由扫描码的由扫描码的D6D0D6D0判断操作的是哪一个键,判断操作的是哪一个键,由扫描码的由扫描码的D7D7位判断是按下键,还释放键。位判断是按下键,还释放键。D7=1D7=1,释放键(断码);释放键(断码);D7=0D7=0,按下键(通码)按下键(通码)键盘中断子程中应发中断结束命令键盘中断子程中应发中断结束命令 在在IBM PC/X

32、TIBM PC/XT机上,机上,从从6060H H端口读取扫描码后,端口读取扫描码后,应向键盘接口(应向键盘接口(6161H H)置应答信号,置应答信号,使键盘接口为接收下一个按键的扫描码做好准备。使键盘接口为接收下一个按键的扫描码做好准备。不设应答信号,键盘接口不能正常工作。不设应答信号,键盘接口不能正常工作。在在286286以上微机,读取扫描码后,可不置键盘应答。以上微机,读取扫描码后,可不置键盘应答。key key PROC PROC IN AL,60H ;IN AL,60H ;从从6060H H端口读入扫描码端口读入扫描码 PUSH AX ;PUSH AX ;保存堆栈中保存堆栈中 IN

33、 AL,61H ;IN AL,61H ;置键盘应答控制信号:置键盘应答控制信号:OR AL,80H OR AL,80H ;先将先将6161H H端口的端口的D7D7位置位置1 1 OUT 61H,AL OUT 61H,AL AND AL,7FH ;AND AL,7FH ;再将再将6161H H端口的端口的D7D7位置位置0 0 OUT 61H,AL OUT 61H,AL POP AX ;POP AX ;从堆栈中取出扫描码从堆栈中取出扫描码 TEST AL,80H ;TEST AL,80H ;检查扫描码的检查扫描码的D7D7位位 JNZ exit ;D7=1JNZ exit ;D7=1,表示释放

34、键操作,转至出口表示释放键操作,转至出口 .exit:exit:MOV AL,20H ;MOV AL,20H ;发中断结束命令发中断结束命令EOIEOI OUT 20H,AL OUT 20H,AL IRET IRET ;中断返回中断返回key ENDPkey ENDP IBM PC/XTIBM PC/XT机上机上键盘中断子程的编写:键盘中断子程的编写:key key PROC PROC IN AL,60H ;IN AL,60H ;从从6060H H端口读入扫描码端口读入扫描码 TEST AL,1000 0000B ;TEST AL,1000 0000B ;检查扫描码的检查扫描码的D7D7位位

35、JNZ exit ;D7=1JNZ exit ;D7=1,表示释放键操作,转至出口表示释放键操作,转至出口 、exit:exit:MOV AL,20H ;MOV AL,20H ;发中断结束命令发中断结束命令EOIEOI OUT 20H,AL OUT 20H,AL IRET ;IRET ;中断返回中断返回key ENDPkey ENDP 586586机上机上键盘中断子程的编写:键盘中断子程的编写:有关键盘有关键盘 键盘通过键盘接口电路与计算机连接。键盘通过键盘接口电路与计算机连接。键盘上的键有三种类型键盘上的键有三种类型:字符键字符键 AZ,09AZ,09等等 功能键功能键 F1F12,Page

36、 UpF1F12,Page Up等等 组合控制键组合控制键 Shift,Ctrl,AltShift,Ctrl,Alt等等 键盘上的每个键都有一个扫描码。键盘上的每个键都有一个扫描码。据扫描码可确定操作的是哪个键、是按下键还是释放键;据扫描码可确定操作的是哪个键、是按下键还是释放键;扫描码用一个字节表示。扫描码用一个字节表示。低低7 7位是扫描码的数字编码位是扫描码的数字编码,与键盘上的键一一对应;与键盘上的键一一对应;最高位最高位D7D7位表示键的操作状态:位表示键的操作状态:当按下键时当按下键时,D7=0;D7=0;当释放键时当释放键时,D7=1D7=1 键盘中断子程功能(键盘中断子程功能(

37、0909H H类型中断子程)类型中断子程)从键盘接口读取操作键的扫描码;从键盘接口读取操作键的扫描码;将扫描码转换成字符码;将扫描码转换成字符码;大大部部分分键键的的字字符符码码为为ASCIIASCII码码,无无ASCIIASCII码码键键(如如组组合合键键ShiftShift、CtrlCtrl等等)的的字字符符码码为为0 0。将将键键的的扫扫描描码码、字字符符码码存存放放在键盘缓冲区在键盘缓冲区,供其它有关键盘的中断子程应用。供其它有关键盘的中断子程应用。键盘接口对按下键和释放键均向计算机发出中断申请键盘接口对按下键和释放键均向计算机发出中断申请,如果中断响应条件满足如果中断响应条件满足,C

38、PUCPU转去执行键盘中断子程。转去执行键盘中断子程。键盘中断子程类型号为键盘中断子程类型号为0909H H。例6:编写键盘中断子程,编写键盘中断子程,完完 成成 每每 操操 作作 键键 盘盘 上上 任任 意意 键键,屏屏 幕幕 上上 显显 示示 HeLLoHeLLo!主程序主程序键盘中断子程键盘中断子程CLI关中断关中断保存原保存原09H中断向量中断向量设置新设置新09H中断向量中断向量设置设置8259A的中断屏蔽字的中断屏蔽字,允许允许IR1中断中断STI开中断开中断主程其它工作处理主程其它工作处理恢复原恢复原09H中断向量中断向量返回返回DOS开始开始保存现场保存现场开始开始 从从60H

39、端口读入扫描码端口读入扫描码N判断是否是按下键?判断是否是按下键?Y调调09H功能功能显示字符串显示字符串Hello!发中断结束命令发中断结束命令EOI恢复现场恢复现场IRET中断返回中断返回data data SEGMENT SEGMENTstring DB Hello!,0ah.0dh,$string DB Hello!,0ah.0dh,$data ENDSdata ENDScode SEGMENTcode SEGMENT ASSUME CS:code,DS:data ASSUME CS:code,DS:datastart:CLI ;start:CLI ;关中断关中断,IF=0IF=0MO

40、V AL,09H MOV AL,09H MOV AH,35HMOV AH,35HINT 21H ;INT 21H ;取系统取系统0909H H类型中断向量类型中断向量PUSH ES PUSH ES ;用堆栈保存用堆栈保存 PUSH BXPUSH BXPUSH DS ;PUSH DS ;设置设置0909H H 类型中断向量类型中断向量 MOV DX,OFFSET displayMOV DX,OFFSET displayMOV AX,SEG displayMOV AX,SEG displayMOV DS,AXMOV DS,AXMOV AL,09HMOV AL,09HMOV AH,25HMOV AH

41、,25HINT 21HINT 21HPOP DSPOP DS程序清单程序清单 IN AL,21H ;IN AL,21H ;设置设置82598259A A中断屏蔽字中断屏蔽字 AND AL,11111101B ;AND AL,11111101B ;允许允许IR1IR1键盘键盘中断中断OUT 21H,ALOUT 21H,AL STI ;STI ;开开中断中断,IF=1IF=1 MOV SI,8000H ;MOV SI,8000H ;用双重循环延时用双重循环延时w2:MOV DI,8000H ;w2:MOV DI,8000H ;模拟模拟CPUCPU对其他任务的处理对其他任务的处理 w1:DEC DI

42、 ;DI,SIw1:DEC DI ;DI,SI的值可修改,控制主程执行时间的值可修改,控制主程执行时间 JNZ w1JNZ w1DEC DEC SI SIJNZ JNZ w2 w2POP DX POP DX ;恢复系统恢复系统0909H H类型中断向量类型中断向量 POP POP DS DSMOV AL,09HMOV AL,09HMOV AH,25HMOV AH,25HINT INT 21H 21HMOV AH,4CH ;MOV AH,4CH ;返回返回DOSDOSINT 21HINT 21Hdisplay PROC ;display PROC ;自编的自编的0909H H类型中断子程类型中断

43、子程 PUSH AX PUSH AX ;保存现场保存现场 IN AL,60H ;IN AL,60H ;读入字符扫描码读入字符扫描码 TEST AL,80H TEST AL,80H ;判断是否是按下键操作?判断是否是按下键操作?JNZ exit JNZ exit MOV AX,data ;MOV AX,data ;是,显示是,显示 Hello!Hello!MOV DS,AX MOV DS,AX LEA DX,string LEA DX,string MOV AH,09 MOV AH,09 INT 21H INT 21Hexit:MOV AL,20H ;exit:MOV AL,20H ;发中断结束

44、命令发中断结束命令EOIEOI OUT 20H,AL OUT 20H,AL POP AX ;POP AX ;恢复现场恢复现场 IRET ;IRET ;中断返回中断返回display ENDPdisplay ENDPcode ENDScode ENDS END start END start四、问题讨论 中断嵌套问题 中断向量的保存、恢复问题l 中断嵌套问题1.嵌套的概念嵌套的概念2.内中断引起的嵌套内中断引起的嵌套3.可屏蔽硬中断引起的嵌套可屏蔽硬中断引起的嵌套4.可屏蔽硬中断嵌套的条件可屏蔽硬中断嵌套的条件n nCPUCPU正在执行某一中断子程,又被其它中断源中断正在执行某一中断子程,又被其

45、它中断源中断n n使使CPUCPU转去执行另一中断子程,这个过程叫中断嵌套转去执行另一中断子程,这个过程叫中断嵌套 1.1.嵌套的概念嵌套的概念中断子程序中断子程序中断子程序中断子程序1 1中断申请中断申请中断申请中断申请CPUCPU执行流程执行流程执行流程执行流程中断子程序中断子程序中断子程序中断子程序2 2在中断子程中,在中断子程中,用用INTINT指令调用中断子程,引起了中断嵌套指令调用中断子程,引起了中断嵌套,这种嵌套就是内中断引起的嵌套。这种嵌套就是内中断引起的嵌套。2.2.内中断引起的嵌套内中断引起的嵌套CPU执行流程执行流程中断子程序中断子程序n1中断子程序中断子程序n2INT

46、n1INT n2 内中断引起的嵌套不受内中断引起的嵌套不受 IF IF 和和 8259 8259A A 的控制,的控制,嵌套的层次受限于堆栈的大小。嵌套的层次受限于堆栈的大小。在响应了某级可屏蔽硬中断后,在响应了某级可屏蔽硬中断后,又有新的可屏蔽中断申请发出,又有新的可屏蔽中断申请发出,若满足响应条件,若满足响应条件,CPUCPU转去执行另一个可屏蔽中断子程。转去执行另一个可屏蔽中断子程。3.可屏蔽硬中断引起的嵌套中断子程序1中断申请1CPU执行流程中断子程序2中断申请2 可屏蔽硬中断引起的嵌套,受IF和8259A的控制,同时嵌套层次受堆栈容量的大小。CPUCPU在在执执行行中中断断子子程程过

47、过程程中中,有有可可屏屏蔽蔽硬硬中中断断申申请请发出。发出。(即有可屏蔽硬中断源产生)即有可屏蔽硬中断源产生)中断子程开中断,即用中断子程开中断,即用 STI STI 指令使指令使 IF=1IF=1。因为因为CPUCPU响应中断过程中,将响应中断过程中,将 IF IF 标志清标志清0 0,然后转去执行中断子程。然后转去执行中断子程。故进入中断子程后,故进入中断子程后,IF=0IF=0(即即CPUCPU允许响应可屏蔽中断允许响应可屏蔽中断)4.4.可屏蔽硬中断嵌套的条件可屏蔽硬中断嵌套的条件 新的中断申请具有更高的优先权,新的中断申请具有更高的优先权,即比即比82598259A A的当前服务寄存

48、器的当前服务寄存器ISRISR中记录的中断优先权高中记录的中断优先权高有两种可能有两种可能:新的中断申请的确比当前中断的优先级高新的中断申请的确比当前中断的优先级高 新的中断申请与当前中断的优先级同级或低级,新的中断申请与当前中断的优先级同级或低级,但在当前中断子程中提前发了中断结束命令,但在当前中断子程中提前发了中断结束命令,使使ISRISR中的相应位为中的相应位为0 0。在满足上述三个条件下,可引起可屏蔽硬中断的嵌套在满足上述三个条件下,可引起可屏蔽硬中断的嵌套例例7 7 在中断子程中未用在中断子程中未用STISTI来开中断来开中断分析:CPUCPU响应该中断后,响应该中断后,IFIF标志

49、被自动清标志被自动清0 0;由于子程中未开中断,由于子程中未开中断,IFIF仍为仍为0 0;所以,不论子程在何处发所以,不论子程在何处发EOIEOI,均不会引起可屏蔽硬中断嵌套均不会引起可屏蔽硬中断嵌套。IRET发发EOIIR2中断子程中断子程IR0中断申请中断申请例例8 8 中断子程中中断子程中STISTI开中断,最后发开中断,最后发EOIEOI分析:CPUCPU响应响应IR2IR2中断后,中断后,IFIF标志被自动清标志被自动清0 0 子程开中断后,子程开中断后,IFIF为为1 1 所以,在开中断后,所以,在开中断后,CPU CPU 可响应优先权更高的中断申请可响应优先权更高的中断申请 引

50、起可屏蔽中断嵌套。引起可屏蔽中断嵌套。IR1中断申请中断申请IR2中断子程中断子程STI IRET发发EOICPU响应响应IR1中断申请中断申请例例9 9 中断子程开中断,提前发中断子程开中断,提前发EOIEOI结论:子程开中断后,子程开中断后,CPU CPU 可响应优先权可响应优先权 更高的中断申请更高的中断申请。发发EOIEOI后,后,CPU CPU 可响应同级或可响应同级或 低级的中断申请低级的中断申请。IR2中断子程中断子程STI IRET发发EOICPU响应响应IR1中断申请中断申请IR1中断申请中断申请IR3中断申请中断申请CPU响应响应IR3中断申请中断申请例例10 10 中断子

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com