1、 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低
2、位地址线A0直接相连,也可与其他Ai相连。 数据线D0D7与MPU数据线D0D7直接相连。 片选线CS与余下MPU高位地址线经译码后产生的片选信号相连。 WR、INTR分别与控制总线组合形成的IOR、IOW和中断响应信号INTR相 RD、 连。 主片的INT与MPU的INTR直接相连。 8259A级联连接方法是: 从片的INT与主片的某个IRi直接相连。 主片的CAS2CAS0与各从片的CAS2CAS0直接相连。 SP/EN则取决于是采用缓冲还是非缓冲方式。 本题采用非缓冲方式,主片SP/EN接+5V,从片SP/EN接地。由此画出硬件连线图,如图7.3所示。 (2)初始化程序应包括两部分内容,
3、即主、从片的初始化和填写相关中断向量表。对主片编程时要注意。在多片级联方式下,系统要工作在完全嵌套方式,主片必须设置为特殊全嵌套方式,以便同级中断能打断同级中断。因为在多片级联方式下,从片的8个中断源是共用主片的一个中断级,而实际上从片的8个中断源也有优先级区别。假定当前正在服务的中断级是从片的某个中断级,若当CPU正在为该中断源服务时,该从片又向主片提出中断请求,此时对主片而言是同一级中断请求,但对从片来说却是出现了一个高优先级中断请求,应该优先处理, 假定主片、从片1、从片2地址分别为:PORT00. PORT01 , PORT10, PORT1l , PORT20, PORT21 ,程序
4、段如下: :初始化8259A主片 MOV AL,11H ;写ICW1边沿触发、多片级联、写ICW4 OUT PORT00, AL MOV AL,70H ;写ICW2,主片中断向断号为70H-78H OUT PORT01 . AL MOV AL.,000l0l00B ;写ICW3, IR2,IR4,接有从片 OUT PORT01 . AL MOV AL,*-*B ;写ICW4特殊全嵌套、非缓冲、正常EOI OUT PORT01 , AL MOV AL,OFFH ;用OCW1屏蔽所有中断请求 OUT PORT01 , AL ;初始化8259A从片1 MOV AL,11 H ;写ICW1,边沿触发、
5、多片级联、写ICW4 OUT PORT11,AL MOV AL.,01.H ;写ICW2,从片1中断向量号为80H-87H OUT PORT11,AL MOV AL,02H ;写ICW3.对应主片IRi的编码为010 OUT PORT11. ,AL MOV AL,01H ;写ICW4,一般全嵌套、非缓冲、正常EOI OUT PORT11 ,AL MOV AL,0FFH ;用OCW1屏蔽所有中断请求 OUT PORT11 . AL ;初始化8259A从片2 MUV AL,11H ;写ICW 1。边沿触发、多片级联、写ICW4 OUT PORT20,AL MOV AL.90H ;写ICW2。从片2
6、中断向量号为90H 97H OUT PORT21.AL MOV AL,04H DUT PORT21, AL MOV A.L,01 H OUT PORT21, AL MOV AL.0FFH OUT PORT21, AL ;填写T5H,85H和95H号中断向址 SUB DI、DI ;ES指向中断向量表段基址 MOV ES, DI CLD MOV DI,75H*4 ;75H号中断向量地址 MOV AX,1230H ;中断处理程序偏移地址 STOSW MOV Ax,4310H ;中断处理程序段基址 STOSW MOV DI.,85H*4 ;初始化85H号中断向量 MOV AX.2340H STOWS
7、MOV Ax .4310H STOSW MOV DI,95H *4 ;初始化95H号中断向量 MOV AX,3450H STOW S MOV Ax.4310H MOV AL.00H ;用OCW1开放主片所有中断请求 OUT PORT01 H . AL OUT PORT 11 H , AL ;用OCW1开放从片所有中断请求 OUT *,AL 7.13某8085/8088系统中,若8259A处于单片、全嵌套工作方式.且采用非特殊屏蔽和非特殊结束方式,中断请求信号是边沿触发。IR0的中断类型码为58H。试对8259A初始化编程。此题无需写ICW3。其他控制字及位取值如下: (1)ICW1=xxx10
8、x11,即:中断请求为边沿触发、单片8259A ,写ICW4 (2) ICW2=01011 x x x ,即:此片8259A中断类型码高5位为01011 ( 3 ) ICW4 = 00000 x O1,即:一般嵌套、非缓冲、正常EOI,8086/8088模式。假定控制字中的x固定为0,初始化程序如下: MOV DX, x x x x x x x 0B ;指向端口0 MOV AL,13H ;中断请求为边沿触发、单片8259A、写ICW4 OUT DX,AL ;写ICW 1 INC DX ;指向端口1 MOV AL,58H ;写ICW2 MOV AL,O1H ;一般嵌套、非缓冲、正常EOI,808
9、6模式 OUT DX , AL ; 7.14分别列出下列情况下应向8259A提供的操作命令字: (1)读中断请求寄存器IRR; (2)读中断屏蔽寄存器IMR; (3)读中断服务寄存器ISR; (4)向8259A发中断结束命令EOIo。(1)应先对0端口写OCW3(读IRR命令字),再通过读0端口获得IRR值,读IRR命令字为*-*B,指令序列为: MOV AL, *-*B ;读IRR命令字 OUT x x x x x x x 0B,AL ;写OCW3(读IRR命令字) IN AL, x x x x x x x 0B ;读IRR (2)无需发操作命令字,直接对1端口读操作: IN AL, x x
10、 x x x x x 1B ;读IMR (3)应先对0端口写OCW3(读ISR命令字),再通过读。端口获得ISR值,读ISR命令字为*-*B,指令序列为:读ISR命令字 OUT x x x x x x x0B,AL ;写OCW3(读ISR命令字) IN AL, x x x x x x x 0B ;读ISR (4)有四种中断结束命令EOI,由写OCW:设置。 非特殊EOI命令:*-*B; 特殊EOI命令:01100L2L1L0B; 自动循环EOI命令: 特殊循环EOI命令: *L2L1L0B 7.16若一PC/AT应用系统中有5个故障源A,B,C,D,E,当任一个源变为低电平时,则有 故障要处理
11、。它们的优先权顺序是从A到E依次降低,处理程序的人口地址分别为8000H, S100H,8200H,8300H和8400H。现只有IRQ2可用,试按查询式中断识别与判优方案设计该中断系统,包括硬件设计和软件编程。按查询式中断识别与判优方案设计的中断系统如图7.4所示。 5个故障源A, B,C,D,E通过与非门与IRQ2相连。即任一个源变为低电平时通过IRQ2向 CPU发中断请求,在中断服务程序中通过读取三态缓冲器来识别故障源,并通过读端口控制信号复位中断谓求.程序如下: DATA * BASE DW 8000H ,0000H ;故障源A处理程序的人口地址CS: IP DW 8100H,0000
12、H ;故障源B处理程序的入口地址CS:IP DW 8200H,0000H ;故障源C处理程序的人口地址CS:I P DW 8300H,0000H: ;故障源D处理程序的人A地址CS:IP DW 8400H . 0000H ; 故障源E处理程序的人口地址CS:I P DATA ENDS CODE * ASSUME CS:CODE,DS: DATA START : MOV Ax , DATA MOV DS. Ax CLI ;关中断 MOV DI,0AH *.4 ;取IRQ2的中断向量地址 CLD XOR Ax,Ax MOV ES, Ax ;ES指向中断向量表段基址 MOV Ax ,OFFSET I
13、NT_ROUT ;填写中断向量的偏移地址 STOSW MOV Ax,SEG INT_ROUT ;填写中断向量的段基址 STOSW STI ;开中断 ;其他处理 MOV AH,4CH ;中断服务程序 INT 21 H INT_ROUT PROC: PUSH Ax ;保护现场 PUSH Bx开中断 LEA Bx.BASE ;指向故障源A中断处理程序地址 IN AL,20H ;读状态寄存器 NOT AL ;取反.将低电平变为高电平 AND AL,0F8H WAITl: TEST AL,OFFH ;有末处理中断? JZ RETURN ;无中断返回 SHL AL. , 1 ;有故障 JNC NEXT ;
14、无,跳过 CALL. DWORD PRTBX ;转相应故障源中断处理 NEXT: ADD Bx,4 ;指向下一故降源中断处理程序地址 JMP WAIT1 RETURN:关中断 POP BX :恢复现场 POP Ax开中断 I RET INT_ROUT ENDP CODE ENDS END START 7.17试编写一个基于查询式中断识别与判优方案的中断程序,该程序控制8台设备,假定状态寄存器地址为044DH,其最低位优先级最高,最高位优先级最低:某位置表示相应的设备有服务请求。同时假定已定义一个地址数组ADDR _ TAB,数组中的第i个元素提供第i台设备的中断处理程序人口地址的偏移量基于查询
15、式中断识别与判优的中断程序如下: INT_ PROC PRDC PUSH AX ;保护现场 PUSH Bx MOV BX,0 ;指向第0台设备中断处理程序地址 IN AL,40H ;状态寄存器 WAIT $ : TEST AL.0FFH ;有未处理中断? SHL AL ,1 ;第i台设备有中断? JNC NEXT ; CALL ADDR_TAB.BX ;转第i台设备中断处理 NEXT: ADD BX,2 ;指向下一台设备中断处理程序地址 JMP WAIT$ RETURN :关中断 POP BX ;恢复现场 POP AX IRET INT_PROC ENDP 7. 18假设起始地址的标号为I N
16、T_ RDUT的9型中断例程与主程序处于相同的源模块 中.试为主程序编写装填中断向量表的程序段。装填中断向量表可用DOS的25H号功能调用,亦可用MOV指令或串操作指令直接对中断向量表进行写操实现。用DOS的25H号功能调用。程序段如下: PUSH DS MOV DX . OFFSET INT_ROUT ;取中断向量的偏移地址送DX MOV AX . SEG INT_ROUT ;取中断向盘的段基址送DS MOV DS , AX MOV AH,25H ;取DOS的功能调用号送AH MOV AL, 09H ;取中断类型码送AL INT 2IH ;调25H号功能调用填写中断向量 POP DS 用串操
17、作指令填写.程序段如下: PUSH ES MOV DI.09H * 4 :取9型中断的中断向量地址 CLD MOV ES,Ax ;ES指向中断向量表段基址0000H MOV AX, OFFSET INT_ROUT ;填写中断向里的偏移地址 STOSW MTV Ax , SEG INT_ROUT ;填写中断向量的段基址 STOSW ST I ;开中断 POP ES 7.19假设某*系统工作在实地址方式。已知(SP)=0100H,(5) = 0300H, (FLAGS) = 0240H,00020DH至00023H单元的内容分别是40H .00H .00H .01 H。同时还已知INT8的偏移量0
18、0A0H在段基址为0900 H的CS段内。试指出在执行IN几指令并进人该指令相应的中断服务程序时.SP,SS,IP,CS,FLAGS和堆栈最顶端三个字的内容。由题意可知:INT8指令的地址为0900H:00A0H; IN几中断服务程序的人口地址为 0100H:0040 H 。 CPU执行INT 8指令时。先保存FLAGS , CS:IP值至堆栈,并清除FLAGS中的1F和TF位,进而改变CS: IP值转入中断服务程序。由此可得CPU在执行INT8指令并进人该指 令相应的中断服务程序时各寄存器和存储器单元值如下: (SP)=(SP)-6=0100H-6=00FAH, (SS)=0300H; (C
19、S: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指令)时才暂停.转去执行断点处理程序,主要用于在程序连续运行方式下设置断点调试程序;而
20、单步自陷则使程序进人单步运行方式。即每执行一条指令,程序运行都会暂停,转去执行单步处理程序,用于单步运行调试程序。 7.21若80X86系统正以单步方式运行某用户程序(该程序己开放外部中断,即IF=1)的过程中执行一条除法指令时,1NTR线上出现了可屏蔽中断请求,与此同时.这条除法指令也产生了除法出错中断。试以流程图表示CPU处理这三种同时出现的中断的过程。中断过程如图7.5所示。CPU先响应除法出错中断.再响应INTR中断,处理完毕返回单步运行的用户程序。 7.22试编写出只有一片8259A的8088系统中8259A的初始化程序. 8259A的地址为02C0H和02C1 H,要求: (1)中
21、断请求物人采用电平触发; (2)IR0请求的中断类型码为16 (3)采用缓冲方式; (4)采用普通的EOI命令。初始化程序如下: MOV DX,02C0H ;端口0中断请求为电平触发、单片8259A、写ICW4 OUT DX,AL ;写ICW1 INC DX ;中断类型码高5位为:00010 OUT DX,AL ; MOV AL.,*-*B ;一般嵌套、级冲、正常EOI ,8086模式 OUT DX,AL ;写ICW4 7.23 IR?6试编写一段使 I7R?08259A 2的优先级顺序从高到低依次为 3I?R1?IR?IR的程序。假定CPU?IRI为R8288,8259A的4偶地址为20 H
22、.奇地址为21H,且当前优先级为;(1)IR0;(2)IR3。用特殊循环优先级设置命令指定最低优先级,设置方法与当前优先级无关。所以(1)和(2)均用下述指令完成: MOV AL,*-*B : IR5为最低优先级 OUT 20H,AL ;写特殊循环优先级设置命令 7.24试编写一段将8259A中的IRR, ISR和IMR的内容传送至存储器中从REG_ ARR 开始的数组中去的程序,假定CPU为80X86, 8259A的偶地址为50 H,奇地址为51H。程序如下: MOV Dx,50H ;指向端口0 MOV AL.AL,*-*B : OUT Dx.AL ;写OCW3(读IRR命令字) IN AL.Dx ;读IRR MOV REG_ARR,AL MOV AL , *-* B ; OUT Dx . AL ;写OCW3(读ISR命令字) IN AL,DX :读ISR MOV REG_ARR,AL. INC: DX ;指向端口1 IN AL.Dx ;读IMR MOV REG_ARR,AL
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1