版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中断程序设计一、中断向量的保存、设置和恢复二、软中断程序设计三、可屏蔽硬中断程序设计四、问题讨论一、中断向量的保存、设置和恢复1.保存中断向量(35H功能)入口参数AL=要保存向量的中断类型号N功能号AH=35H类型号21H出口参数BX=(0:N×4)
ES=(0:N×4+2)实现功能将类型号N的中断向量保存在ES、BX中方法一:用堆栈保存中断向量MOVAL,09H;取中断向量
MOVAH,35HINT21HPUSHES;用堆栈保存PUSHBX
例1保存09H类型的中断向量 (如何保存(ES),(BX))方法二:用变量保存中断向量save_csDW? ;定义变量save_ipDW?
MOVAX,SEGsave_csMOVDS,AXMOVAL,09H ;取中断向量MOVAH,35HINT21HMOVsave_cs,ES ;用变量保存MOVsave_ip,BX
入口参数AL=要设置向量的中断类型号NDS:DX=中断子程的入口地址(中断向量)功能号AH=25H类型号21H出口参数无
实现功能将类型N的中断向量设置在向量表中,即(0:N×4)=类型N中断子程入口地址的偏移值(0:N×4+2)=类型N中断子程入口地址的段值2.设置中断向量(25H功能)例2设置中断子程Sound的中断向量,类型号为60HcodeSEGMENTASSUMECS:codestart:MOVAX,SEGsoundMOVDS,AXMOVDX,OffsetsoundMOVAL,60HMOVAH,25HINT21H
MOVAH,4CHINT21H;中断子程soundPROC
IRETsoundENDPcodeENDSENDstart二、软中断程序设计软中断子程与子程序的编写类似,其不同点在于:1.子程用CALL指令调用;中断子程用INT指令调用2.子程用RET指令返回;中断子程用IRET指令返回3.CALL指令直接用过程名做操作数,即由过程名提供子程的入口地址INT指令由类型号N到中断向量表中固定的单元获得中断子程的入口地址
对比软中断程序与子程序的编写其不同点在于:1.应在主程中将中断子程的入口地址(中断向量)放入中断向量表中。(可用25H系统功能完成)2.主程中用INT指令调用中断子程3.中断子程应用IRET返回.例3:用子程编写和用一个60H类型的中断子程编写,功能是将BX寄存器的内容以16进制形式显示出来。listPROC;子程
MOVCH,4MOVCL,4next:ROLBX,CLMOVDL,BLANDDL,0FHADDDL,30HCMPDL,39HJLEprintADDDL,07Hprint:MOVAH,2HINT21HDECCHJNZnextRET;子程返回listENDPcodeENDSENDstartcodeSEGMENTASSUMECS:codestart:CALLlist;调用子程MOVAH,4CHINT21H;返回DOS若用子程编写:codeSEGMENTASSUMECS:codestart:MOVAX,SEGlist;用25H功能MOVDS,AX;将中断子程listLEADX,list;的入口地址MOVAL,60H;设置到MOVAH,25H;中断向量表中INT21HINT60H;调用中断子程MOVAH,4CHINT21H;返回DOS
listPROC;中断子程listMOVCH,4MOVCL,4next:ROLBX,CLMOVDL,BLANDDL,0FHADDDL,30HCMPDL,39HJLEprintADDDL,07Hprint:MOVAH,2HINT21HDECCHJNZnextIRET;中断返回listENDPcodeENDSENDstart用INT60H中断子程编写:三、可屏蔽硬中断程序设计分三大步骤:1.了解IBMPC/XT系统可屏蔽硬中断的响应过程,据连线确定外设中断申请对应的中断类型号;2.主程中做好外设发出中断申请,CPU能够响应的准备工作;3.编写可屏蔽硬中断子程,完成中断源请求的任务.1.了解IBMPC/XT系统可屏蔽硬中断的响应过程,据连线确定外设中断申请对应的中断类型号。例接口的中断申请连IRQ3类型号0BH接口的中断申请连IRQ5类型号0DHIRQ2IRQ3IRQ4IRQ5IRQ6IRQ7CS8259AA0RDWRD0~D7SP/ENCA0CA1CA2GNDIR0IR1IR2IR3IR4IR5IR6IR7Vcc+5V用于多片8259A级连情况INTAINT数据线片选译码20~3FHIOWA0总线
IORA5~A9D0~D7INTA
INTR08H09H0AH0BH0CH0DH0EH0FH18.2Hz方波键盘PC/XT总线在主程序中应做的工作:①CPU关中断(用CLI置IF=0)②保存原中断向量(用35H系统功能)③设置中断向量(用25H系统功能)④设置8259A的中断屏蔽字,使21H端口对应位为0,允许中断申请进入优先级裁决器⑤CPU开中断(用STI置IF=1)2.主程中做好外设发出中断申请,CPU能够响应的准备工作。准备工作做好后,此后若该级有中断申请,则CPU响应中断,执行相应类型的中断子程。主程在返回DOS前,应恢复原中断向量。(用25H系统功能)8088INTR主板IF键盘18.2Hz方波8259AINT中断屏蔽寄存器键盘中断申请IR1IR2~IR7IR0当前中断服务寄存器键盘接口IRQ2~IRQ7PC总线外设接口外设08h09h0Ah~0FhIBMPC/XT微机可屏蔽中断响应过程示意图①处理中断源申请任务部分的编写与普通子程类似②在中断子程结束前,发中断结束命令清除8259A中ISR的记录;否则,响应一次中断后,同级中断和低级中断将被优先级裁决器屏蔽③用IRET中断返回指令返回主程被中断处3.编写硬中断子程,完成中断源请求的任务返回DOSCLI关中断保存原中断向量设置新中断向量设置8259A的中断屏蔽字中断子程有关量的初始化STI开中断主程其它工作处理恢复原中断向量开始主程序保护现场发中断结束命令EOI完成中断源申请的任务恢复现场IRET中断返回开始中断子程可屏蔽硬中断程序流程图例4利用连接在8259AIR0上的时钟信号,编写具有定时功能程序,要求每隔5秒在屏蔽上显示一个字符’A’。8088INTR主板IF18.2Hz方波8259AINT中断屏蔽寄存器IR0当前中断服务寄存器08h时钟信号连接在IR0上,申请的中断类型号为08H。时钟信号是一个频率为18.2HZ的方波信号,即每秒向8259A发出18.2次的中断申请。如果CPU响应该中断申请,则以每秒18.2次的频率执行08H类型的中断子程。分析80888259AINTR
IR018.2Hz方波信号INT中断申请的任务是每5秒显示一个字符’A’1秒执行18.2次,则5秒执行18.2×5=91次,只在执行到第91次时显示’A’,其它不显示。在中断子程中用一个量来计数中断子程被执行的次数,即CPU响应IR0中断申请的次数。当达到91次,则显示’A’,并将计数值清0,重新计数;其它情况只计数,不显示’A’。中断子程的最后应发中断结束命令EOI。主程序中断子程CLI关中断保存原08H中断向量设置新08H中断向量设置8259A的中断屏蔽字,允许IR0中断08H中断子程执行次数初值0STI开中断主程其它工作处理恢复原08H中断向量返回DOS开始CX发中断结束命令EOI恢复现场IRET中断返回保存现场开始中断子程被执行一次CX←CX+1NY调02HDOS功能显示字符‘A’CX←0重新记数到91次,即5秒时间到?codeSEGMENTASSUMECS:codestart:CLI;关中断MOVAL,08HMOVAH,35HINT21H;取系统08H类型中断向量PUSHES;用堆栈保存PUSHBXPUSHDSMOVDX,OFFSETdisplay;设置08H类型中断向量MOVAX,SEGdisplayMOVDS,AXMOVAL,08HMOVAH,25HINT21HPOPDS程序清单:INAL,21H;设置8259A中断屏蔽字,
ANDAL,11111110B;允许IR0中断OUT21H,ALMOVCX,0;置中断子程计数器初值为0STI;CPU开中断MOVSI,8000H;用双重循环延时,w2:MOVDI,8000H;模拟CPU对其他任务的处理w1:DECDI;DI,SI的值可修改,控制主程执行时间JNZw1DECSIJNZw2POPDX;恢复系统08H类型中断向量
POPDSMOVAL,08HMOVAH,25HINT21HMOVAH,4CH;返回DOSINT21H
displayPROC;自编的08H类型中断子程PUSHAX;保护现场INCCX;执行中断子程一次,计数值加1CMPCX,91JNZexit;到91次了吗?未到跳转至exitMOVDL,’A’;到,显示‘A’MOVAH,02INT21HMOVCX,0;清计数值为0,重新计时exit:MOVAL,20H;发中断结束命令EOIOUT20H,ALPOPAX;恢复现场IRET;中断返回displayENDPcodeENDSENDstartsys08PROCMOVAX,0040HMOVDS,AXINT1CHMOVAL,20HOUT20H,ALIRETsys08ENDPDOS系统提供的08H类型中断子程:sys1cPROCIRETsys1cENDPDOS系统提供的1CH类型中断子程:系统08H类型中断子程要点:①
进入子程后,修改了DS段寄存器的值;②程序中调用了1CH类型中断子程,每执行一次08H中断子程,执行一次1CH中断子程;③程序最后发中断结束命令EOIsys08PROCMOVAX,0040HMOVDS,AXINT1CHMOVAL,20HOUT20H,ALIRETsys08ENDP1CH类型是软中断,按编写软中断子程方法编写:①系统08H中断子程改变DS值,故:1CH中断子程用到定义的变量,须在子程中给DS赋值。②1CH类型是软中断,不需要发中断结束命令。1CH类型是系统为用户保留的定时中断子程系统1CH中断子程只有一条中断返回语句,确保08H中断子程调用后能返回。
用户可通过编写1CH中断子程实现具有定时功能的任务sys1cPROCIRETsys1cENDP例5
编写09H类型的键盘中断子程键盘接口键盘键盘中断申请8259AIR1INTAINT8088INTRINTA60H端口61H端口8255A应答信号扫描码辅助电路主板IR018.2Hz方波说明:键盘接口通过8259A的IR1发中断申请,类型号09H键盘接口对按下键和释放键都向8259A发出中断申请,即若CPU满足响应条件,对键盘上的一个按键操作,CPU将执行两次09H类型的中断子程:按下键一次,释放键一次CPU可从60H端口读取操作键的扫描码, 每个键对应有一个扫描码由扫描码的D6~D0判断操作的是哪一个键,由扫描码的D7位判断是按下键,还释放键。D7=1,释放键(断码);D7=0,按下键(通码)键盘中断子程中应发中断结束命令在IBMPC/XT机上,
从60H端口读取扫描码后,应向键盘接口(61H)置应答信号,使键盘接口为接收下一个按键的扫描码做好准备。不设应答信号,键盘接口不能正常工作。在286以上微机,读取扫描码后,可不置键盘应答。keyPROCINAL,60H;从60H端口读入扫描码PUSHAX;保存堆栈中INAL,61H;置键盘应答控制信号:ORAL,80H;先将61H端口的D7位置1OUT61H,ALANDAL,7FH;再将61H端口的D7位置0OUT61H,ALPOPAX;从堆栈中取出扫描码TESTAL,80H;检查扫描码的D7位JNZexit;D7=1,表示释放键操作,转至出口
exit:MOVAL,20H;发中断结束命令EOIOUT20H,ALIRET;中断返回keyENDP
IBMPC/XT机上键盘中断子程的编写:keyPROCINAL,60H;从60H端口读入扫描码TESTAL,10000000B;检查扫描码的D7位JNZexit;D7=1,表示释放键操作,转至出口、、、、、、exit:MOVAL,20H;发中断结束命令EOIOUT20H,ALIRET;中断返回keyENDP
586机上键盘中断子程的编写:有关键盘①键盘通过键盘接口电路与计算机连接。②键盘上的键有三种类型:字符键A~Z,0~9等功能键F1~F12,PageUp等组合控制键Shift,Ctrl,Alt等③
键盘上的每个键都有一个扫描码。 据扫描码可确定操作的是哪个键、是按下键还是释放键; 扫描码用一个字节表示。低7位是扫描码的数字编码,与键盘上的键一一对应;最高位D7位表示键的操作状态:当按下键时,D7=0;当释放键时,D7=1⑤
键盘中断子程功能(09H类型中断子程)从键盘接口读取操作键的扫描码;
将扫描码转换成字符码;大部分键的字符码为ASCII码,无ASCII码键(如组合键Shift、Ctrl等)的字符码为0。将键的扫描码、字符码存放在键盘缓冲区,供其它有关键盘的中断子程应用。④键盘接口对按下键和释放键均向计算机发出中断申请,如果中断响应条件满足,CPU转去执行键盘中断子程。键盘中断子程类型号为09H。例6:编写键盘中断子程,完成每操作键盘上任意键,屏幕上显示’HeLLo!’主程序键盘中断子程CLI关中断保存原09H中断向量设置新09H中断向量设置8259A的中断屏蔽字,允许IR1中断STI开中断主程其它工作处理恢复原09H中断向量返回DOS开始保存现场开始从60H端口读入扫描码N判断是否是按下键?Y调09H功能显示字符串’Hello!’发中断结束命令EOI恢复现场IRET中断返回dataSEGMENTstringDB‘Hello!‘,0ah.0dh,’$’dataENDScodeSEGMENTASSUMECS:code,DS:datastart:CLI;关中断,IF=0MOVAL,09HMOVAH,35HINT21H;取系统09H类型中断向量PUSHES;用堆栈保存
PUSHBXPUSHDS;设置09H类型中断向量MOVDX,OFFSETdisplayMOVAX,SEGdisplayMOVDS,AXMOVAL,09HMOVAH,25HINT21HPOPDS程序清单
INAL,21H;设置8259A中断屏蔽字ANDAL,11111101B;允许IR1键盘中断OUT21H,ALSTI;开中断,IF=1MOVSI,8000H;用双重循环延时w2:MOVDI,8000H;模拟CPU对其他任务的处理w1:DECDI;DI,SI的值可修改,控制主程执行时间JNZw1DECSIJNZw2POPDX;恢复系统09H类型中断向量POPDSMOVAL,09HMOVAH,25HINT21HMOVAH,4CH;返回DOSINT21HdisplayPROC;自编的09H类型中断子程PUSHAX;保存现场INAL,60H;读入字符扫描码TESTAL,80H;判断是否是按下键操作?JNZexitMOVAX,data;是,显示‘Hello!’MOVDS,AXLEADX,stringMOVAH,09INT21Hexit:MOVAL,20H;发中断结束命令EOIOUT20H,ALPOPAX;恢复现场IRET;中断返回displayENDPcodeENDSENDstart四、问题讨论中断嵌套问题中断向量的保存、恢复问题中断嵌套问题1.嵌套的概念2.内中断引起的嵌套3.可屏蔽硬中断引起的嵌套4.可屏蔽硬中断嵌套的条件CPU正在执行某一中断子程,又被其它中断源中断使CPU转去执行另一中断子程,这个过程叫中断嵌套
1.
嵌套的概念中断子程序1中断申请CPU执行流程中断子程序2在中断子程中,用INT指令调用中断子程,引起了中断嵌套,这种嵌套就是内中断引起的嵌套。
2.内中断引起的嵌套CPU执行流程中断子程序n1中断子程序n2INTn1INTn2内中断引起的嵌套不受IF和8259A的控制,嵌套的层次受限于堆栈的大小。在响应了某级可屏蔽硬中断后,又有新的可屏蔽中断申请发出,若满足响应条件,CPU转去执行另一个可屏蔽中断子程。3.可屏蔽硬中断引起的嵌套中断子程序1中断申请1CPU执行流程中断子程序2中断申请2可屏蔽硬中断引起的嵌套,受IF和8259A的控制,同时嵌套层次受堆栈容量的大小。①CPU在执行中断子程过程中,有可屏蔽硬中断申请发出。(即有可屏蔽硬中断源产生)②中断子程开中断,即用STI指令使IF=1。因为CPU响应中断过程中,将IF标志清0,然后转去执行中断子程。故进入中断子程后,IF=0(即CPU允许响应可屏蔽中断)4.
可屏蔽硬中断嵌套的条件③
新的中断申请具有更高的优先权,即比8259A的当前服务寄存器ISR中记录的中断优先权高有两种可能:新的中断申请的确比当前中断的优先级高新的中断申请与当前中断的优先级同级或低级,但在当前中断子程中提前发了中断结束命令,使ISR中的相应位为0。在满足上述三个条件下,可引起可屏蔽硬中断的嵌套例7
在中断子程中未用STI来开中断分析:
CPU响应该中断后,
IF标志被自动清0;
由于子程中未开中断,
IF仍为0;
所以,不论子程在何处发EOI,
均不会引起可屏蔽硬中断嵌套。IRET发EOIIR2中断子程IR0中断申请例8中断子程中STI开中断,最后发EOI分析:
CPU响应IR2中断后,
IF标志被自动清0
子程开中断后,IF为1
所以,在开中断后,
CPU可响应优先权更高的中断申请引起可屏蔽中断嵌套。IR1中断申请IR2中断子程STIIRET发EOICPU响应IR1中断申请例9中断子程开中断,提前发EOI结论:
子程开中断后,
CPU可响应优先权更高的中断申请。发EOI后,
CPU可响应同级或低级的中断申请。IR2中断子程STIIRET发EOICPU响应IR1中断申请IR1中断申请IR3中断申请CPU响应IR3中断申请例10中断子程中不发EOI分析:
CPU响应中断后,自动将ISR中的对应位置1,因中断子程未发EO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大学周年校庆活动策划方案
- 中级注册安全工程师《化工安全》试题题库测试卷(含答案)
- 钢结构火焰喷涂防腐专项施工方案
- 暑假纠错特训|高中数学函数单调性奇偶性易混知识点深度辨析复习课
- 外研版高二英语选必二读后续写预习 新学期预科精讲课件
- 2026年初中道德与法治练习
- 《工艺品修复技术》课件-4.2古建筑木构件的修复技术与保养工艺
- 2026年霍尔传感器制造工艺创新分析报告
- 民办非企业单位增加注册资金申请书
- 2026年放电线圈行业发展趋势报告
- DB32-T 4264-2022金属冶炼企业中频炉使用安全技术规范
- GB/T 18281.1-2024医疗保健产品灭菌生物指示物第1部分:通则
- 糖尿病性胃轻瘫的护理
- 帕金森病用药及安全指导
- 小儿腹痛的护理
- 混凝土采购供货方案投标文件(技术方案)
- 2024年重庆市高考思想政治试卷真题(含答案解析)
- 华南理工综评机测试题(一)
- JTT646.4-2016 公路声屏障 第4部分:声学材料技术要求及检测方法
- 太阁立志传5完全秘笈
- 精益六西格玛绿带项目模板
评论
0/150
提交评论