1、南京信息工程大学 实验(实习)报告实验(实习)名称 8259A 中断控制器实验 实验(实习)日期 2015.5.12 得分 指导教师 朱节中 计算机系 专业 网络工程 年级 2012 班次 1 姓名 学号 一. 实验目的1. 掌握 8259A 中断控制器工作原理,熟悉实验中涉及到的中断屏蔽寄存器 IMR 和中断服务寄存器 ISR 等的使用方法.2. 学会中断处理程序的编写二. 实验内容用 8259A 的输出作为中断请求信号使 8259A 产生中断,进入中断后显示一个字符串.1. 中断请求通过 PC/XT62 芯总线的 IRQ2 端输入,中断源可以是片外 8253 定时器输出的脉冲,也可以是其它
2、脉冲,也可以是其它脉冲.现用8253 做中断源,参看实验 21 连接 8253 的线路,并把 8253 的 OUTO 和总线槽IR02 连接好.2. 编写程序,要求每次主机响应外部中断 IRQ2 时,显示字符串“THIS IS A 8259A INTERRUPT!”(或其它串),中断十次后,程序退出。三编程提示1 本实验使用 PC/XT 机内的 8259A 芯片,主机启动实际时已奖 8259A中断寄存器前五位初始化为 00001,因此,IRQ2 的中断号应为0AH。2 主机吧 IRQ2 保留给用户使用,而其他外中断已由系统时钟,键盘等占用,因此,编程时要注意系统中已使用的中断请求号。只须将 I
3、MR 寄存器中对应 IRQ2 的位清零,允许 IRQ2 中断即可。3 机内 8259A 初始化为普通结束方式,因此,外中断结束时,必须使用中断结束命令清除中断服务寄存器 ISR 中的对应位。4 程序退出时,关闭 IRQ2 中断,即给 IMR 中相应位置 1,禁止中断。5 PC 机系统中 8259A 地址:偶地址 20h奇地址 21h6 PC 机系统中 IRQ2 硬中断为用户保留的。编程时首先应将 IRQ2 对应的中断向量(中断号为 0ah)保存起来,然后设置新的中断向量以指向中断处理程序。另外,还要将中断屏蔽寄存器的相应位开放。典型的程序段如下:MOV AH, 35HMOV AL, OAH ;
4、取 0AH 号中向量送 ES: BXINT 21HPUSH ES ;保存原中断向量PUSH BXPUSH DXMOV DX ,SEG ADINTMOV DS , DXMOV DX ,OFFSET ADINT ;设置新的中断向量MOV AH ,25HMOV AL ,0AHINT 21HPOP DSIN AL , 21H ;取中断屛蔽寄存器的内容PUSH AX ;保存AND AL , 11111011B ;允许 IRQ2 中断OUT 21H , AL7、PC 机系统中的 8259A 工作在全嵌套方式下,在中断处理程序结束时,需要 发中断结束命令。MOV AL , 20HOUT 20H , ALA0
5、 D7 D6 D5 D4 D3 D2 D1 D0ICW1: 0 X X X 1 LTIM ADI SNGL IC4A0 D7 D6 D5 D4 D3 D2 D1 D0ICW2: 1 T7 T6 T5 T4 LTIM ADI SNGL IC4D7-D3 为中断类型码的高五位ICW3: A0 D7 D6 D5 D4 D3 D2 D1 D0主片: 1 IR6 IR6 IR5 IR4 IR3 IR2 IR1 IR0A0 D7 D6 D5 D4 D3 D2 D1 D0从片 1 0 0 0 0 0 ID2 ID1 ID0A0 D7 D6 D5 D4 D3 D2 D1 D0ICW4: 1 0 0 0 SFN
6、M BUF M/S AEOI PMA0 D7 D6 D5 D4 D3 D2 D1 D0OCW1: 1 M7 M6 M5 M4 M3 M2 M1 M0A0 D7 D6 D5 D4 D3 D2 D1 D0OCW2: 0 R SL EOI O O L2 L1 L0A0 D7 D6 D5 D4 D3 D2 D1 D0OCW3: 0 O SEMM SMM O I P RR RIS四、实验室提供的程序如下:在两行*之间加入程序补充完整。INTA00 EQU 20HINTA01 EQU 21HTIM_CTL EQU 203hTIMER0 EQU 200hTIMER1 EQU 201hMODE03 EQU 3
7、6h ;model3,timer0,w/r 16bitsMODE12 EQU 54h ;model2,timer1,w/r lower 8bitsDATA SEGMENTMESS DB THIS IS A 8259A INTERRUPT!,0AH,0DH,$FLAG DB 0INTMASK DB ?CSREG DW ?IPREG DW ?DATA ENDSSTACK SEGMENT STA DB 50 DUP (?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: CLIMOV AX,DA
8、TAMOV DS,AXMOV DX,TIM_CTLMOV AL,MODE03OUT DX,ALMOV DX,TIMER0MOV AL,00HOUT DX,ALMOV AL,06HOUT DX,ALMOV DX,TIM_CTLMOV AL,MODE12OUT DX,ALMOV DX,TIMER1MOV AL,0AHOUT DX,ALMOV AX,STACKMOV SS,AXMOV SP,TOPMOV AX,350AHINT 21HMOV AX,ESMOV CSREG,AXMOV IPREG,BXPUSH DSMOV AX,CSMOV DS,AXMOV DX,OFFSET INT_PROCMOV
9、AX,250AHINT 21HPOP DSMOV DX,INTA01IN AL,DXMOV INTMASK,ALAND AL,0FBHOUT DX,ALMOV BX,10STILL: MOV AL,FLAGCMP AL,01HJNZ LLCLIMOV AL,INTMASKMOV DX,INTA01OUT DX,ALMOV DX,IPREGMOV AX,CSREGMOV DS,AXMOV AX,250AHINT 21HSTIMOV AX,4C00HINT 21HINT_PROC:PUSH DSMOV AX,DATAMOV DS,AXMOV DX,OFFSET MESSMOV AH,09 INT 21H;*;添加程序;*NEXT: POP DSIRETCODE ENDSEND START 五、实验小结