微机原理与接口技术实验报告学院:计算机与通信工程学院专业:计算机科学与技术班级:学号:姓名:实验一8259中断控制器应用实验一、实验目的1.掌握PC机中断处理系统的基本原理。2.掌握可编程中断控制器8259的应用编程方法。二、实验内容1.PC机内中断实验。使用单次脉冲模拟中断产生。验证中断处理程序,在显示器屏幕上显示一行预设定的字符串。2.PC机内中断嵌套实验。使用单次脉冲模拟两个中断源的中断产生,填写中断处理程序,体会中断嵌套的过程。3.扩展多中断源查询方式应用实验。利用实验平台上8259控制器作为中断扩展源,编写程序对8259控制器的中断请求进行处理。三、实验步骤1.实验1-1:PC机内中断应用实验(1)按接线图连好接线,调用程序源代码8259-1.asm,观察实验现象,屏幕显示结果截图如下:(2)自设计实验。改变接线方式,将单次脉冲连到USB核心板上的IRQ10插孔上,参考本实验代码,编程实现IRQ10中断。(注意:考虑PC机内中断级联的方式,参看前面的原理说明),代码如下:DATASEGMENTMESSDB'IRQ10',0DH,0AH,'$'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,CSMOVDS,AXMOVDX,OFFSETINT10MOVAX,2572H;设置IRQ10对应的中断向量INT21HINAL,21H;读取中断屏蔽寄存器ANDAL,0F3H;开放IRQ3中断和从片OUT21H,ALINAL,0A1H;从片的中断屏蔽寄存器ANDAL,0FBH;开放IRQ10中断OUT0A1H,ALMOVCX,10STIWAIT:JMPWAITINT10:MOVAX,DATA;中断服务程序MOVDS,AXMOVDX,OFFSETMESSMOVAH,09;在屏幕上显示每次中断的提示信息INT21HMOVAL,20H;发出EOI结束中断到PC内主片的地址20HOUT20H,ALLOOPNEXTINAL,21H;读中断屏蔽寄存器,获取中断屏蔽字ORAL,08H;关闭IRQ3中断OUT21H,AL;将中断屏蔽字送到中断屏蔽寄存器STI;置中断标志位MOVAH,4CH;返回DOSINT21HNEXT:IRET;中断返回CODEENDSENDSTART调用程序代码,观察实验现象,屏幕显示截图如下:2.实验1-2:PC机内中断嵌套实验实验要求:(1)按接线图连好接线,调用程序源代码8259-2.asm,做如下操作,观察屏幕显示结果并分析产生该现象的原因:A.按下连接IRQ的单次脉冲按键,屏幕上会显示10个3,在屏幕上10次显示未结束之前,按下连接IRQ10的单次脉冲按键,观察现象;按下IRQ时屏幕上会显示10个3,此时按下IRQ10,会直接在屏幕上显示10个10,然后结束后再显示剩余的3B.按下连接IRQ10的单次脉冲按键,屏幕上会显示10个10,在屏幕上10次显示未结束之前,按下连接IRQ3的单次脉冲按键,观察现象。在屏幕上显示10个10的过程中按下IRQ无反应,等到10个10全部显示完毕后才再显示10个3出现这种现象的原因是IRQ10的中断优先级高于IRQ3屏幕截图:(2)程序所有代码及注释:DATASEGMENTDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:.386CLIMOVAX,CSMOVDS,AXMOVDX,OFFSETINT10;采用间接修改法,设置中断向量MOVAX,2572H;设置IRQ10对应的中断向量INT21HMOVDX,OFFSETINT3;采用间接修改法,设置中断向量MOVAX,250BH;设置IRQ3对应的中断向量INT21HINAL,21H;读中断屏蔽寄存器,21H是该寄存器的端口号ANDAL,0F3H;开放中断,允许从片和IRQ3OUT21H,ALINAL,0A1H;读中断屏蔽寄存器,0A1H是该寄存器的端口ANDAL,0FBH;开放中断IRQ10OUT0A1H,ALMOVCX,10;记中断循环次数为10次STIWAIT:JMPWAITINT10:CLI;中断服务程序PUSHADPUSHFDMOVCX,10;记中断循环次数为10次NEXT10_1:MOVDX,31HMOVAH,02H;输出DLINT21HMOVDX,30HMOVAH,02H;输出DLINT21HMOVDX,20H;发出EOI结束中断到PC内主片的地址20HMOVAH,02H;输出DL,3INT21HCALLDELAY1;等待LOOPNEXT10_1MOVDX,0DHMOVAH,02H;输出DL,‘’INT21HMOVDX,0AH;发出EOI结束中断到PC内从片占用的是0A0H端口MOVAH,02H;输出DL,发生中断后输出10INT21HMOVAL,20H;将中断屏蔽字送到中断屏蔽寄存器OUT0A0H,AL;从片OUT20H,AL;主片POPFD;关中断,出栈,返回POPADSTIIRETINT3:CLI;中断服务程序PUSHADPUSHFDMOVCX,10;记中断循环次数为10次NEXT3_1:MOVDX,33HMOVAH,02H;输出DLINT21HMOVDX,20H;发出EOI结束中断到PC内主片的地址20HMOVAH,02H;输出DL,3INT21HCALLDELAY1;等待LOOPNEXT3_1MOVDX,0DHMOVAH,02H;输出DL,‘’INT21HMOVDX,0AH;发出EOI结束中断到PC内从片占用的是0A0H端口MOVAH,02H;发生中断输出DL,10INT21HMOVAL,20HOUT20H,AL;将中断屏蔽字送到中断屏蔽寄存器OUT0A0H,ALPOPFD;出栈,关中断,返回POPADSTIIRETDELAY1PROC;控制等待部分PUSHADPUSHFDMOVCX,0FHDELAY_LOOP1:MOVBX,0FFFFHDELAY_LOOP2:DECBXNOPJNZDELAY_LOOP2LOOPDELAY_LOOP1POPFDPOPADRETDELAY1ENDPCODEENDSENDSTART3.实验1-3:扩展多中断应用实验调用程序源码文件8259-3.asm,在程序源代码中划横线的位置,请按照所学8259工作原理填写并验证,然后将所填内容写在实验报告中,并分析所填数据的形成原理。屏幕截图:程序代码及与案例说明:;*****************************************************************;8259中断查询方式应用实验;请根据所学原理推断横线处需填写的源代码;*****************************************************************I8259_1EQU2B0H;8259的ICW1端口地址I8259_2EQU2B1H;8259的ICW2端口地址I8259_3EQU2B1H;8259的ICW3端口地址,ICW3,ICW4,OCW1都写入奇地址中I8259_4EQU2B1H;8259的ICW4端口地址O8259_1EQU2B1H;8259的OCW1端口地址O8259_2EQU2B0H;8259的OCW2端口地址,OCW2,OCW3写入偶地址O8259_3EQU2B0H;8259的OCW3端口地址DATASEGMENTMES1DB'YOUCANPLAYAKEYONTHEKEYBOARD!',0DH,0AH,24HMES2DDMES1MESS1DB'HELLO!THISISINTERRUPT*0*!',0DH,0AH,'$'MESS2DB'HELLO!THISISINTERRUPT*1*!',0DH,0AH,'$'MESS3DB'HELLO!THISISINTERRUPT*2*!',0DH,0AH,'$'MESS4DB'HELLO!THISISINTERRUPT*3*!',0DH,0AH,'$'MESS5DB'HELLO!THISISINTERRUPT*4*!',0DH,0AH,'$'MESS6DB'HELLO!THISISINTERRUPT*5*!',0DH,0AH,'$'MESS7DB'HELLO!THISISINTERRUPT*6*!',0DH,0AH,'$'MESS8DB'HELLO!THISISINTERRUPT*7*!',0DH,0AH,'$'DATAENDSSTACKSSEGMENTDB100DUP(?)STACKSENDSSTACK1SEGMENTSTACKDW256DUP(?)STACK1ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKS,ES:DATA.386START:MOVAX,DATAMOVDS,AXMOVES,AXMOVAX,STACKSMOVSS,AXMOVDX,I8259_1;初始化8259的ICW1MOVAL,13H;边沿触发、单片8259、需要ICW4,查表得到控制字OUTDX,ALMOVDX,I8259_2;初始化8259的ICW2MOVAL,0B0HOUTDX,ALMOVAL,03HOUTDX,ALMOVDX,O8259_1;初始化8259的中断屏蔽操作命令字MOVAL,000H;打开屏蔽位,将全部屏蔽位打开OUTDX,ALQUERY:MOVAH,1;判断是否有按键按下INT16HJNZQUIT;有按键则退出MOVDX,O8259_3;向8259发送查询命令MOVAL,6CH;01101100OUTDX,ALINAL,DX;读出查询字TESTAL,80H;判断中断是否已响应,响应后对应位置0JZQUERY;没有响应则继续查询ANDAL,07HCMPAL,00HJEIR0ISR;若为IR0请求,跳到IR0处理程序CMPAL,01HJEIR1ISR;若为IR1请求,跳到IR1处理程序CMPAL,02HJEIR2ISR;若为IR2请求,跳到IR2处理程序CMPAL,03HJEIR3ISR;若为IR3请求,跳到IR3处理程序CMPAL,04HJEIR4ISR;若为IR4请求,跳到IR4处理程序CMPAL,05HJEIR5ISR;若为IR5请求,跳到IR5处理程序CMPAL,06HJEIR6ISR;若为IR6请求,跳到IR6处理程序CMPAL,07HJEIR7ISR;若为IR7请求,跳到IR7处理程序JMPQUERYIR0ISR:MOVAX,DATAMOVDS,AXMOVDX,OFFSETMESS1;显示提示信息MOVAH,09INT21HJMPEOIIR1ISR:MOVAX,DATAMOVDS,AXMOVDX,OFFSETMESS2;显示提示信息MOVAH,09INT21HJMPEOIIR2ISR:MOVAX,DATAMOVDS,AXMOVDX,OFFSETMESS3;显示提示信息MOVAH,09INT21HJMPEOIIR3ISR:MOVAX,DATAMOVDS,AXMOVDX,OFFSETMESS4;显示提示信息MOVAH,09INT21HJMPEOIIR4ISR:MOVAX,DATAMOVDS,AXMOVDX,OFFSETMESS5;显示提示信息MOVAH,09INT21HJMPEOIIR5ISR:MOVAX,DATAMOVDS,AXMOVDX,OFFSETMESS6;显示提示信息MOVAH,09INT21HJMPEOIIR6ISR:MOVAX,DATAMOVDS,AXMOVDX,OFFSETMESS7;显示提示信息MOVAH,09INT21HJMPEOIIR7ISR:MOVAX,DATAMOVDS,AXMOVDX,OFFSETMESS8;显示提示信息MOVAH,09INT21HEOI:MOVDX,O8259_2;向8259发送中断结束命令MOVAL,20H;00100000OUTDX,ALJMPQUERYQUIT:MOVAX,4C00H;结束程序退出INT21HCODEENDSENDSTART实验二82