第七章中断与中断控制习题选解Word格式.docx
《第七章中断与中断控制习题选解Word格式.docx》由会员分享,可在线阅读,更多相关《第七章中断与中断控制习题选解Word格式.docx(8页珍藏版)》请在冰豆网上搜索。
7.12某80X86系统中设置三片8259A级联使用,一片为主,两片为从,从片分别接人主片的IR2和IR4。
若已知当前主8259A和从8259A的IR5上各接有一个外部中断源,其中断向量号分别为75H,85H,95H。
假设它们的中断入口地址均在同一段中,段基址为4310H,偏移地址分别为1230H,2340H,3450H;
所有中断都采用边沿触发方式、全嵌套方式、正常EOI结束方式。
(1)试画出该系统的硬件连线图;
(2)试编写全部初始化程序。
(1)此题硬件连线要考虑各8259A与CPU的连接,还要考虑三片8259A间的级联连接。
8259A与CPU连接的方法是:
①端口选择线与一般与MPU低位地址线A0直接相连,也可与其他Ai相连。
②数据线D0~D7与MPU数据线D0~D7直接相连。
③片选线CS与余下MPU高位地址线经译码后产生的片选信号相连。
WR、INTR分别与控制总线组合形成的IOR、IOW和中断响应信号INTR相④RD、
连。
⑤主片的INT与MPU的INTR直接相连。
8259A级联连接方法是:
①从片的INT与主片的某个IRi直接相连。
②主片的CAS2~CAS0与各从片的CAS2~CAS0直接相连。
③SP/EN则取决于是采用缓冲还是非缓冲方式。
本题采用非缓冲方式,主片SP/EN接+5V,从片SP/EN接地。
由此画出硬件连线图,如图7.3所示。
(2)初始化程序应包括两部分内容,即主、从片的初始化和填写相关中断向量表。
对主片编程时要注意。
在多片级联方式下,系统要工作在完全嵌套方式,主片必须设置为特殊全嵌套方式,以便同级中断能打断同级中断。
因为在多片级联方式下,从片的8个中断源是共用主片的一个中断级,而实际上从片的8个中断源也有优先级区别。
假定当前正在服务的中断级是从片的某个中断级,若当CPU正在为该中断源服务时,该从片又向主片提出中断请求,此时对主片而言是同一级中断请求,但对从片来说却是出现了一个高优先级中断请求,应该优先处理,
假定主片、从片1、从片2地址分别为:
PORT00.PORT01,PORT10,PORT1l,PORT20,PORT21,程序段如下:
:
初始化8259A主片
MOVAL,11H;
写ICW1边沿触发、多片级联、写ICW4OUTPORT00,AL
MOVAL,70H;
写ICW2,主片中断向断号为70H---78HOUTPORT01.AL
MOVAL.,000l0l00B;
写ICW3,IR2,IR4,接有从片OUTPORT01.AL
MOVAL,***-*****B;
写ICW4特殊全嵌套、非缓冲、正常EOIOUTPORT01,AL
MOVAL,OFFH;
用OCW1屏蔽所有中断请求OUTPORT01,AL;
初始化8259A从片1
MOVAL,11H;
写ICW1,边沿触发、多片级联、写ICW4
OUTPORT11,AL
MOVAL.,01.H;
写ICW2,从片1中断向量号为80H-87HOUTPORT11,AL
MOVAL,02H;
写ICW3.对应主片IRi的编码为010
OUTPORT11.,AL
MOVAL,01H;
写ICW4,一般全嵌套、非缓冲、正常EOIOUTPORT11,AL
MOVAL,0FFH;
用OCW1屏蔽所有中断请求OUTPORT11.AL;
初始化8259A从片2
MUVAL,11H;
写ICW1。
边沿触发、多片级联、写ICW4OUTPORT20,AL
MOVAL.90H;
写ICW2。
从片2中断向量号为90H~97HOUTPORT21.AL
MOVAL,04HDUTPORT21,ALMOVA.L,01HOUTPORT21,ALMOVAL.0FFH
OUTPORT21,AL;
填写T5H,85H和95H号中断向址
SUBDI、DI;
ES指向中断向量表段基址MOVES,DICLD
MOVDI,75H*4;
75H号中断向量地址MOVAX,1230H;
中断处理程序偏移地址STOSW
MOVAx,4310H;
中断处理程序段基址STOSW
MOVDI.,85H*4;
初始化85H号中断向量MOVAX.2340HSTOWS
MOVAx.4310H
STOSW
MOVDI,95H*4;
初始化95H号中断向量
MOVAX,3450HSTOWS
MOVAx.4310H
MOVAL.00H;
用OCW1开放主片所有中断请求OUTPORT01H.AL
OUTPORT11H,AL;
用OCW1开放从片所有中断请求
OUT*****,AL
7.13某8085/8088系统中,若8259A处于单片、全嵌套工作方式.且采用非特殊屏蔽和非特殊结束方式,中断请求信号是边沿触发。
IR0的中断类型码为58H。
试对8259A初始化编程。
此题无需写ICW3。
其他控制字及位取值如下:
(1)ICW1=xxx10x11,即:
中断请求为边沿触发、单片8259A,写ICW4
(2)ICW2=01011xxx,即:
此片8259A中断类型码高5位为01011(3)ICW4=00000xO1,即:
一般嵌套、非缓冲、正常EOI,8086/8088模式。
假定控制字中的x固定为0,初始化程序如下:
MOVDX,xxxxxxx0B;
指向端口0MOVAL,13H;
中断请求为边沿触发、单片8259A、写ICW4OUTDX,AL;
写ICW1INCDX;
指向端口1
MOVAL,58H;
写ICW2
MOVAL,O1H;
一般嵌套、非缓冲、正常EOI,8086模式OUTDX,AL;
7.14分别列出下列情况下应向8259A提供的操作命令字:
(1)读中断请求寄存器IRR;
(2)读中断屏蔽寄存器IMR;
(3)读中断服务寄存器ISR;
(4)向8259A发中断结束命令EOIo。
(1)应先对0端口写OCW3(读IRR命令字),再通过读0端口获得IRR值,读IRR命令字为***-*****B,指令序列为:
MOVAL,***-*****B;
读IRR命令字
OUTxxxxxxx0B,AL;
写OCW3(读IRR命令字)INAL,xxxxxxx0B;
读IRR
(2)无需发操作命令字,直接对1端口读操作:
INAL,xxxxxxx1B;
读IMR
(3)应先对0端口写OCW3(读ISR命令字),再通过读。
端口获得ISR值,读ISR命令字为***-*****B,指令序列为:
读ISR命令字
OUTxxxxxxx0B,AL;
写OCW3(读ISR命令字)INAL,xxxxxxx0B;
读ISR(4)有四种中断结束命令EOI,由写OCW:
设置。
非特殊EOI命令:
***-*****B;
特殊EOI命令:
01100L2L1L0B;
自动循环EOI命令:
特殊循环EOI命令:
*****L2L1L0B
7.16若一PC/AT应用系统中有5个故障源A,B,C,D,E,当任一个源变为低电平时,则有故障要处理。
它们的优先权顺序是从A到E依次降低,处理程序的人口地址分别为8000H,S100H,8200H,8300H和8400H。
现只有IRQ2可用,试按查询式中断识别与判优方案设计该中断系统,包括硬件设计和软件编程。
按查询式中断识别与判优方案设计的中断系统如图7.4所示。
5个故障源A,B,C,D,E通过与非门与IRQ2相连。
即任一个源变为低电平时通过IRQ2向CPU发中断请求,在中断服务程序中通过读取三态缓冲器来识别故障源,并通过读端口控制信号复位中断谓求.程序如下:
DATA*****
BASEDW8000H,0000H;
故障源A处理程序的人口地址CS:
IPDW8100H,0000H;
故障源B处理程序的入口地址CS:
IPDW8200H,0000H;
故障源C处理程序的人口地址CS:
IPDW8300H,0000H:
;
故障源D处理程序的人A地址CS:
IPDW8400H.0000H;
故障源E处理程序的人口地址CS:
IPDATAENDSCODE*****
ASSUMECS:
CODE,DS:
DATASTART:
MOVAx,DATA
MOVDS.Ax
CLI;
关中断
MOVDI,0AH*.4;
取IRQ2的中断向量地址CLD
XORAx,Ax
MOVES,Ax;
ES指向中断向量表段基址MOVAx,OFFSETINT_ROUT;
填写中断向量的偏移地址STOSW
MOVAx,SEGINT_ROUT;
填写中断向量的段基址STOSW
STI;
开中断;
其他处理MOVAH,4CH;
中断服务程序INT21H
INT_ROUTPROC:
PUSHAx;
保护现场PUSHBx
开中断
LEABx.BASE;
指向故障源A中断处理程序地址INAL,20H;
读状态寄存器
NOTAL;
取反.将低电平变为高电平ANDAL,0F8H
WAITl:
TESTAL,OFFH;
有末处理中断?
JZRETURN;
无中断返回
SHLAL.,1;
有故障JNCNEXT;
无,跳过
CALL.DWORDPRT[BX];
转相应故障源中断处理NEXT:
ADDBx,4;
指向下一故降源中断处理程序地址JMPWAIT1
RETURN:
关中断POPBX:
恢复现场POPAx
开中断IRETINT_ROUTENDP
CODEENDS
ENDSTART7.17试编写一个基于查询式中断识别与判优方案的中断程序,该程序控制8台设备,假定状态寄存器地址为044DH,其最低位优先级最高,最高位优先级最低:
某位置\表示相应的设备有服务请求。
同时假定已定义一个地址数组ADDR_TAB,数组中的第i个元素提供第i台设备的中断处理程序人口地址的偏移量
基于查询式中断识别与判优的中断程序如下:
INT_PROCPRDC
PUSHAX;
保护现场
PUSHBx
MOVBX,0;
指向第0台设备中断处理程序地址INAL,40H;
状态寄存器WAIT$:
TESTAL.0FFH;
有未处理中断?
SHLAL,1;
第i台设备有中断?
JNCNEXT;
CALLADDR_TAB[.BX];
转第i台设备中断处理
NEXT:
ADDBX,2;
指向下一台设备中断处理程序地址JMPWAIT$
RETURN:
关中断POPBX;
恢复现场POPAX
IRETINT_PROCENDP
7.18假设起始地址的标号为INT_RDUT的9型中断例程与主程序处于相同的源模块中.试为主程序编写装填中断向量表的程序段。
装填中断向量表可用DOS的25H号功能调用,亦可用MOV指令或串操作指令直接对中断向量表进行写操实现。
用DOS的25H号功能调用。
程序段如下:
PUSHDS
MOVDX.OFFSETINT_ROUT;
取中断向量的偏移地址送DXMOVAX.SEGINT_ROUT;
取中断向盘的段基址送DSMOVDS,AX
MOVAH,25H;
取DOS的功能调用号送AHMOVAL,09H;
取中断类型码送AL
INT2IH;
调25H号功能调用填写中断向量POPDS
用串操作指令填写.程序段如下:
PUSHES
MOVDI.09H*4:
取9型中断的中断向量地址
CLD
MOVES,Ax;
ES指向中断向量表段基址0000HMOVAX,OFFSETINT_ROUT;
填写中断向里的偏移地址
STOSWMTVAx,SEGINT_ROUT;
填写中断向量的段基址STOSWSTI;
开中断POPES
7.19假设某*****系统工作在实地址方式。
已知(SP)=0100H,(5)=0300H,(FLAGS)=0240H,00020DH至00023H单元的内容分别是40H.00H.00H.01H。
同时还已知INT8的偏移量00A0H在段基址为0900H的CS段内。
试指出在执行IN几指令并进人该指令相应的中断服务程序时.SP,SS,IP,CS,FLAGS和堆栈最顶端三个字的内容。
由题意可知:
INT8指令的地址为0900H:
00A0H;
IN几中断服务程序的人口地址为0100H:
0040H。
CPU执行INT8指令时。
先保存FLAGS,CS:
IP值至堆栈,并清除FLAGS中的1F和TF位,进而改变CS:
IP值转入中断服务程序。
由此可得CPU在执行INT8指令并进人该指
令相应的中断服务程序时各寄存器和存储器单元值如下:
(SP)=(SP)-6=0100H-6=00FAH,(SS)=0300H;
(CS:
IP)为中断服务程序人口地址:
(IP)=0040H.(CS)=0100H;
FLAGS中IF=TF=0,即FLAGS9=FLAGS8=0。
所以:
(FLAGS)=0040H:
堆栈最顶端三个字的内容为:
(00FEH)=0240H;
FLAGS值(00FCH)=0900H;
断点CS值
(00FA00H)=00A0H:
断点IP值
7.20讨论在80X86系统的调试应用中.INT3指令和单步自陷所产生的中断差别,指出其应用场合。
INT3指令产生的是断点中断,即程序运行遇到断点(INT3指令)时才暂停.转去执行断点处理程序,主要用于在程序连续运行方式下设置断点调试程序;
而单步自陷则使程序进人单步运行方式。
即每执行一条指令,程序运行都会暂停,转去执行单步处理程序,用于单步运行调试程序。
7.21若80X86系统正以单步方式运行某用户程序(该程序己开放外部中断,即IF=1)的过程中执行一条除法指令时,1NTR线上出现了可屏蔽中断请求,与此同时.这条除法指令也产生了除法出错中断。
试以流程图表示CPU处理这三种同时出现的中断的过程。
中断过程如图7.5所示。
CPU先响应除法出错中断.再响应INTR中断,处理完毕返回单步运行的用户程序。
7.22试编写出只有一片8259A的8088系统中8259A的初始化程序.8259A的地址为02C0H和02C1H,要求:
(1)中断请求物人采用电平触发;
(2)IR0请求的中断类型码为16(3)采用缓冲方式;
(4)采用普通的EOI命令。
初始化程序如下:
MOVDX,02C0H;
端口0
中断请求为电平触发、单片8259A、写ICW4OUTDX,AL;
写ICW1INCDX;
中断类型码高5位为:
00010OUTDX,AL;
MOVAL.,***-*****B;
一般嵌套、级冲、正常EOI,8086模式
OUTDX,AL;
写ICW47.23
IR?
6试编写一段使
I7R?
08259A
2的优先级顺序从高到低依次为
3I?
R1?
IR?
IR的程序。
假定CPU?
IRI为R8288,8259A的4偶地址为20H.奇地址为21H,且当前优先级为;
(1)IR0;
(2)IR3。
用特殊循环优先级设置命令指定最低优先级,设置方法与当前优先级无关。
所以
(1)和
(2)均用下述指令完成:
MOVAL,***-*****B:
IR5为最低优先级
OUT20H,AL;
写特殊循环优先级设置命令
7.24试编写一段将8259A中的IRR,ISR和IMR的内容传送至存储器中从REG_ARR开始的数组中去的程序,假定CPU为80X86,8259A的偶地址为50H,奇地址为51H。
程序如下:
MOVDx,50H;
指向端口0MOVAL.AL,***-*****B:
OUTDx.AL;
写OCW3(读IRR命令字)INAL.Dx;
读IRRMOVREG_ARR,AL
MOVAL,***-*****B;
OUTDx.AL;
写OCW3(读ISR命令字)INAL,DX:
读ISRMOVREG_ARR,AL.INC:
DX;
指向端口1INAL.Dx;
读IMRMOVREG_ARR,AL