资源描述:
《第4节%20%20中断程序设计ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第四节中断程序设计一、中断向量的保存、设置和恢复二、软中断程序设计三、可屏蔽硬中断程序设计四、问题讨论一、中断向量的保存、设置和恢复1.保存中断向量(35H功能)入口参数AL=要保存向量的中断类型号N功能号AH=35H类型号21H出口参数BX=(0:N×4)ES=(0:N×4+2)实现功能将类型号N的中断向量保存在ES、BX中方法一:用堆栈保存中断向量MOVAL,09H;取中断向量MOVAH,35HINT21HPUSHES;用堆栈保存PUSHBX、、、例保存09H类型的中断向量方法二:用变量保存中断向量save_09csDW?;定义变量save_09ipDW?、、、MOVAX,SEGs
2、ave_09csMOVDS,AXMOVAL,09H;取中断向量MOVAH,35HINT21HMOVsave_09cs,ES;用变量保存MOVsave_09ip,BX入口参数AL=要设置向量的中断类型号NDS:DX=中断子程的入口地址(中断向量)功能号AH=25H类型号21H出口参数无实现功能将类型N的中断向量设置在向量表中,即(0:N×4)=类型N中断子程入口地址的偏移值(0:N×4+2)=类型N中断子程入口地址的段值2.设置中断向量(25H功能)例1设置中断子程Sound的中断向量,类型号为60HcodeSEGMENTASSUMECS:codestart:、、MOVAX,SEGsou
3、ndMOVDS,AXMOVDX,OffsetsoundMOVAL,60HMOVAH,25HINT21H、、INT60H;调用60H中断子程、、MOVAH,4CHINT21H;中断子程soundPROC、、、、、、、、、IRETsoundENDPcodeENDSENDstart二、软中断程序设计软中断子程与子程序的编写类似,不同在:1.子程用CALL指令调用;中断子程用INT指令调用2.子程用RET指令返回;中断子程用IRET指令返回3.CALL指令直接用过程名做操作数,即由过程名提供子程的入口地址INT指令由类型号N到中断向量表中固定的单元获得中断子程的入口地址对比子程序的编写,编写软
4、中断程序时,1.应在主程中将中断子程的入口地址(中断向量)放入中断向量表中。(可用25H系统功能完成)2.主程中用INT指令调用中断子程3.中断子程应用IRET返回.例编写一个60H类型的中断子程,功能是将BX寄存器的内容以16进制形式显示出来。ADDDL,30HCMPDL,39HJLEprintADDDL,07Hprint:MOVAH,2HINT21HDECCHJNZnextRET;子程返回listENDPcodeENDSENDstartcodeSEGMENTASSUMECS:codestart:CALLlist;调用子程MOVAH,4CHINT21H;返回DOSlistPROC;子
5、程MOVCH,4MOVCL,4next:ROLBX,CLMOVDL,BLANDDL,0FH若用子程编写:codeSEGMENTASSUMECS:codestart:MOVAX,SEGlist;用25H功能MOVDS,AX;将中断子程listLEADX,list;的入口地址MOVAL,60H;设置到MOVAH,25H;中断向量表中INT21HINT60H;调用中断子程MOVAH,4CHINT21H;返回DOSlistPROC;中断子程listMOVCH,4MOVCL,4next:ROLBX,CLMOVDL,BLANDDL,0FHADDDL,30HCMPDL,39HJLEprintADDD
6、L,07Hprint:MOVAH,2HINT21HDECCHJNZnextIRET;中断返回listENDPcodeENDSENDstart用中断子程编写:三、可屏蔽硬中断程序设计分三大步骤:1.了解IBMPC/XT系统可屏蔽硬中断的响应过程,据连线确定外设中断申请对应的中断类型号;2.主程中做好外设发出中断申请,CPU能够响应的准备工作;3.编写可屏蔽硬中断子程,完成中断源请求的任务.1.了解IBMPC/XT系统可屏蔽硬中断的响应过程,据连线确定外设中断申请对应的中断类型号。例接口的中断申请连IRQ3类型号0BH接口的中断申请连IRQ5类型号0DHIRQ2IRQ3IRQ4IRQ5IR
7、Q6IRQ7CS8259AA0RDWRD0~D7SP/ENCA0CA1CA2GNDIR0IR1IR2IR3IR4IR5IR6IR7Vcc+5V用于多片8259A级连情况INTAINT数据线片选译码20~3FHIOWA0总线IORA5~A9D0~D7INTAINTR08H09H0AH0BH0CH0DH0EH0FH18.2Hz方波键盘PC/XT总线在主程序中应做的工作:①CPU关中断(用CLI置IF=0)②保存原中断向量(用35H系统功能)③设置中