1、实验3 8259中读取键盘并显示实验实验3 中断控制器接口编程一、 实验目的1 掌握8259、8255编程方法。2 学习DEBUG调试程序的使用方法。二、 实验准备1 复习教材微机接口技术及应用有关8259编程内容。2 参考“汇编语言编程设计”有关书籍,预习DEBUG调试程序的使用方法。三、 实验内容 (一)用EDIT进行文件编辑步骤同实验2,文件名为COMMU.ASM (二) 编译程序1 程序汇编C:WINDOWSSHY2MASM.EXE COMMU显示 object filename COMMU.OBJ source listingNUL.LST COMMU.LSTcross refere
2、nceNUL.CRF 显示 Warring Errors 和Severe Errors信息若无错则可进行链接,若有错用EDIT修改源程序后再汇编直至无错误提示通过汇编为止。2 程序链接C:WINDOWSSHY2LINK COMMU显示 Run File SOUND.EXE List FileNUL.MAP Libraries.LIB 查子目录中文件,可见SOUND.OBJ 、COMMU.LST、 SOUND.EXE文件已存在。(三) 运行程序1. C:WINDOWSSHY2COMMU2. 从键盘输入发送内容,以自测方式,接受发送内容并显示在屏幕上。(四) 用DEBUG调试程序1. 进入DEBU
3、G并装入程序COMMU.EXE,操作如下:C:WINDOWSSHY2DEBUG COMMU.EXEDEBUG以-来回答。2. 用反汇编命令显示程序目标码,操作如下:-U屏幕显示 12B5:0000 1E push ds 12B5:0001 B8 0000 mov ax,0 12B5:0004 50 push ax 12B5:0005 BA 03FB mov dx,3fbh 12B5:0008 B0 80 mov al,80h 12B5:000A EE out dx,al 12B5:000B BA 03F8 mov dx,3f8h 12B5:000E B0 60 mov al,60h 所示信息从
4、左至右依次为:段地址:偏移地址,机器语言指令,汇编语言指令查看程序目标码,并记录需设置断点处的地址。3. 设置断点,用G命令分段运行程序,操作如下:-G(为断点处的偏移地址的低字节)如键入G14,屏幕显示AX=0060 BX=0000 CX=0176 DX=03F9 SP=00FC BP=0000 SI=0000 DI=0000DS=1295 ES=1295 SS=12A5 CS=12B5 IP=0014 NV UP EI PL NZ NA PO NC12B5:0014 B000 MOV AL,00程序停在断点处,显示内容为所有寄存器以及各标志位的当前值,最后一行给出下一条将要执行的指令地址、
5、机器语言、及汇编语言。记录有关内容,填写汇编语言程序注释中要求的内容。设置下一断点,用G命令继续运行程序。 四、 实验报告1. 打印源程序SOUND.ASM清单,填空注释。五、 参考程序.model small.stack.dataold_ip09 dw ?old_cs09 dw ?old_ip0f dw ?old_cs0f dw ?count dw ?buffer db 20h dup(?)buf_p dw ?start_msg db 0ah,0dh,RUN!0ah,0dh,$end_msg db 0ah,0dh,end!0ah,0dh,$full_msg db buffer full !0
6、ah,0dh,$.code main proc farstart:mov ax,datamov ds,axlea ax,buffermov buf_p ,axmov count,0;save old interrupt 09hmov al,09hmov ah,35int 21hmov old_cs09,esmov old_ip09,bxpush ds;set new interruptlea dx,kdbintmov ax,seg kdbintmov ds,axmov al,09hmov ah,25hint 21hpop ds ;set keyboard interrupt mask bits
7、in al,21hand al,0fdhout 21h,alstimov di,20000delay: mov si,30000delay1: dec sijnz delay1dec dijnz delaymov di,20000dey: mov si,30000dey1: dec sijnz dey1dec dijnz deymov di,20000de: mov si,30000de1: dec sijnz de1dec dijnz demov di,20000d: mov si,30000d1: dec sijnz d1dec dijnz dcli;save oldpush dsmov
8、dx,old_ip09mov ax,old_cs09mov ds,axmov al,09hmov ah,25hint 21hpop ds;enable in al,21hand al,0fdhout 21h,alstimov ax,4c00hint 21hmain endp;.kdbint proc near push ax push bx cld in al,60h push ax in al,61h mov ah,al or al,80h out 61h,al xchg ah,al out 61h,al pop ax test al,80hjnz return1mov bx,buf_pmo
9、v bx ,alcall display_hexinc bxinc countmov buf_p,bxcheck:cmp count ,20hjb return1return1:climov al,20hout 20h,alpop bxpop axiretkdbint endpdisplay_hex proc nearpush axpush cxpush dxmov ch,2mov cl,4nextb:rol al,clpush axmov dl,aland dl,0fhor dl,30hcmp dl,3ahjl dispitadd dl,7hdispit:mov ah,2int 21hpop axdec chjnz nextbmov ah,2mov dl,int 21hpop dxpop cxpop axretdisplay_hex endpend start
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1