当前位置:文档之家› 中断处理程序设计

中断处理程序设计

课程实验报告课程名称:汇编语言程序设计实验名称:实验四实验时间: 2015-6-16,14:30-17:30实验地点:南一楼804室指导教师:李专专业班级:学号:姓名:同组学生:报告日期:成绩:计算机科学与技术学院一、原创性声明本人郑重声明:本报告的内容由本人独立完成,有关观点、方法、数据和文献等的引用已经在文中指出。

除文中已经注明引用的内容外,本报告不包含任何其他个人或集体已经公开发表的作品或成果,不存在剽窃、抄袭行为。

特此声明!学生签字:日期:二、评语与成绩评定1.指导老师评语2.实验成绩评定实验完成质量得分(70分)(实验步骤清晰详细深入,实验记录真实完整等)报告撰写质量得分(30分)(报告规范、完整、通顺、详实等)总成绩(100分)指导教师签字:日期:目录1.实验目的 (1)2.实验内容 (1)2.1任务一 (1)2.2任务二 (1)2.3任务三 (2)2.4任务四 (2)3实验过程 (2)3.1任务一 (2)3.1.1实验要求 (2)3.1.2实验结果 (2)3.2任务二 (4)3.2.1设计思想及存储分配 (4)3.2.2程序框图 (5)3.2.3源程序代码 (6)3.2.4实验结果 (7)3.3任务三 (7)3.3.1源程序代码 (7)3.3.2实验结果 (11)3.4任务四 (12)3.4.1源程序代码 (12)3.4.2实验结果 (16)4.实验体会 (16)1.实验目的(1) 掌握中断矢量表的概念(2)掌握中断处理程序设计的技巧(3)掌握简化段定义、函数调用伪指令(4)了解Win32程序的编程方法及编译、链接方法2.实验内容2.1任务一用三种方式获取中断类型码10H对应的中断处理程序的入口地址。

要求:(1) 直接运行调试工具(TD.EXE),观察中断矢量表中的信息;(2) 编写程序,用 DOS功能调用方式获取,观察相应的出口参数与(1)中看到的结果是否相同(使用TD观看即可)(3) 编写程序,直接读取相应内存单元,观察读到的数据与(1)看到的结果是否相同(使用TD观看即可)。

2.2任务二编写一个中断服务程序并驻留内存,要求在程序返回DOS操作系统后,键盘的按键A变成了按键B、按键B变成了按键A。

提示:(1) 对于任何DOS程序,不管其采用什么方法获取按键,最后都是通过执行16H号软中断的0号和10H号功能调用来实现的。

所以,你只需接管16H号软中断的0号和10号功能调用并进行相应的处理;(2) 获得一个按键扫描码的方法:在TD中执行16H中断的0号和10H号功能调用,按相应的键,观察AH中的内容。

资料:16H中断的0号和10H号功能功能描述:从键盘读入字符入口参数:AH = 00H——读键盘= 10H——读扩展键盘出口参数:AH =键盘的扫描码AL =字符的ASCII码要求:(1) 用文字描述中断服务程序的编程思想,并画出流程图;(2) 中断程序驻留内存后,在C>状态下直接敲击键A和B,观察是否变成了B和A。

2.3任务三采用简化段定义,重新实现第3次上机实验的题目。

要求:(1) 子程序的定义、调用,请使用“完整的函数定义”、INVOKE伪指令(P242-P246);(2) 输入、输出,可以定义并使用宏指令;(3)进入TD观察子程序,查看堆栈段数据存放的情况2.4任务四安装MASM32软件包。

试着编译、连接课本中的程序例6.9(《汇编语言程序设计》,p267),阅读该程序,熟悉基于窗口的windows程序的组成3实验过程3.1任务一3.1.1实验要求用三种方式获取中断类型码10H对应的中断处理程序的入口地址。

要求:(1) 直接运行调试工具(TD.EXE),观察中断矢量表中的信息;(2) 编写程序,用DOS功能调用方式获取,观察相应的出口参数与(1)中看到的结果是否相同(使用TD观看即可)(3) 编写程序,直接读取相应内存单元,观察读到的数据与(1)看到的结果是否相同(使用TD观看即可)。

3.1.2实验结果实验结果:(1)从图中可以看出,当前CS值为0821,为代码段首地址,IP为0008,指向下一个语句的地址,bx=02C0,es=F100(2)首先编译链接通过,进入TD里面查看通过后单步执行,运行到int 21h后,观察记录bx=02C0,es=F100,ip为下一句指令的地址。

(3)首先编译链接通过,进入TD界面观察观察得到bx=02C0,cx=F100,ip指向下一句地址。

3.2任务二3.2.1设计思想及存储分配设计思想及存储分配:在“int 16h”的入口参数中,AH用来制定功能号,根据不同的功能号完成不同的要求,本题中,不管采用什么方法获取按键,最后都是通过执行16H号软中断的0号和10号功能调用来实现的。

所以只需要接管16H软中断的0号和10号功能调用并处理。

中断程序功能是从键盘读取一个字符,显示在dos界面上。

新的中断程序会在执行过程中调用到老中断程序,先将输入的字符的扫描码和a的扫描码比较,相等的话a的ASCII加1,若不等再和b的扫描那比较,若相等则b的ASCII码减1,否则直接读取该字符寄存器分配:AH为键入字符的扫描码,AL存放字符的ASCII码,BX存放原16H中断的偏移地址,ES为原16H的段地址。

3.2.2程序框图YNYN输入键的扫描码给alah=1eh ?ah=30h ? al 加1访问原16H 中断程序al 减1访问新的16H 中断程序主存单元驻留结束3.2.3源程序代码.386stack segment use16 stackdb 200 dup(0)stack endscode segment use16assume cs: code, ds: code, ss: stack old_int dw ?,?new16h proc farcmp ah, 00hje L0cmp ah, 10hje L0jmp dword ptr cs: old_intL0: pushfcall dword ptr cs: old_intcmp ah,1ehjne L1inc alL1: cmp ah,30hjne exitdec alexit: iretnew16h endpstart: mov ax, 3516hint 21hmov cs: old_int, bxmov cs: old_int+2, espush cspop dslea dx, new16hmov ax, 2516hint 21hmov ax, 3100hint 21hcode endsend start3.2.4实验结果3.3任务三采用简化段定义,重新实现第3次上机实验的题目。

要求:(1) 子程序的定义、调用,请使用“完整的函数定义”、INVOKE伪指令(P242-P246);(2) 输入、输出,可以定义并使用宏指令;3.3.1源程序代码主程序源程序为:.MODEL SMALL, STDCALL.386;SCANF PROTO FAR BUF:word, BASE: BYTEPRINT PROTO FAR BUF:word;.DATAnote1 db 0ah, 0dh, "input N1: $"note2 db 0ah, 0dh, "input N2: $"note3 db 0ah, 0dh, "input number string:$ "note4 db 0ah, 0dh, "output: $"buf1 db 6 dup('0')buf2 db 6 dup('0')buf3 db 20 dup('0')buf4 db 20 dup('0')flag db 0base db 10;.STACK 1000;.CODESTART:mov ax, @datamov ds, axlea dx,note1mov ah,9int 21hlea dx,buf1mov ah,10int 21hlea dx,note2mov ah,9int 21hlea dx,buf2mov ah,10int 21hlea dx,note3mov ah,9int 21hlea dx,buf3mov ah,10int 21hlea dx,note4mov ah,9int 21hinvoke scanf,addr buf2, basemov bx,axinvoke scanf,addr buf1, basemov base,allea si,buf3mov cl,byte ptr 2[si]sub cl,'-'mov flag,clinvoke scanf,addr buf3,baseinvoke print,addr buf4mov cl,flagcmp cl,0je L1L2: lea dx,buf4mov ah,9int 21hjmp exitL1: mov dl,'-'mov ah,2int 21hjmp L2exit: mov ax, 4c00hint 21hEND START.MODEL SMALL,STDCALL.386;.CODE CODE1;scanf proc far USES BX CX DX si ,BUF:word, BASE: BYTE mov si,bufxor ax, axxor bx,bxmov bl,basexor cx,cxadd si,2mov cl,[si]cmp cl,'-'je scan1jne scan2scan1:inc simov cl,[si]scan2:cmp cx,0dhje scan6cmp cx,40hjbe scan3jmp scan4scan3:sub cx,30hjmp scan5scan4:sub cx,37hscan5:imul bxadd ax,cxjmp scan1scan6: retscanf endpend.MODEL SMALL, STDCALL.386.CODE CODE2;print proc far USES CX DX di BP, BUF: word mov di,bufxor cx,cxlop1:xor dx,dxidiv bxpush dxinc cxcmp ax,0jnz lop1lop2:pop axcmp al,10jb L1add al,7L1: add al,30hmov [di],alinc diloop lop2mov byte ptr [di],'$'retprint endpEND3.3.2实验结果3.4任务四安装MASM32软件包。

相关主题