当前位置:文档之家› 汇编语言第四次上机实验报告

汇编语言第四次上机实验报告

汇编语言第四次上机实验报告时间: 2013/5/10 7:00-9:30 地点:南一楼803实验人员:计科10班王涛学号: U201114445一、题目1、用三种方式获取中断类型码10H对应的中断处理程序的入口地址。

(1)直接运行调试工具(TD.EXE),观察中断矢量表中的信息,指出中断类型码10H 对应的中断处理程序的入口地址。

(使用TD观看即可)。

使用TD观看时,在调试工具下调入以前编好的运行程序,跟踪执行INT 21H(即进入中断处理程序,方法是:执行到INT 21H 时,按ALT+F7),观察CS及IP是否改变成了前面记录的值。

(2)编写程序,用DOS系统功能调用方式获取,观察相应的出口参数与(1)看到的结果是否相同(使用TD观看即可)。

(3)编写程序,直接读取相应内存单元,观察读到的数据与(1)看到的结果是否相同.2、编制时钟显示程序。

要求每隔1s在屏幕右下角显示“年-月-日时:分:秒”,并将程序驻留在内存。

3、安装MASM32软件包,以其中的一个例子(如example\3dframes)为例,试用软件包中的集成汇编、连接和调试(TD32.EXE)功能。

软件包从汇编教学网站上下载,操作参见《80X86汇编语言程序设计上机指南》第七章。

二、实验要求1. 在调试工具下调入之前编好的运行程序,跟踪执行INT 21H(即进入中断处理程序,方法是:执行到INT 21H时,按ALT+F7),观察CS及IP是否改变成了前面记录的值。

操作提示:由于INT 21H内部的代码较长,为便于从中断处理程序返回到主程序,可在主程序INT 21H后面的指令上先设置好断点,当不再想跟踪中断处理程序时按F9即可。

实验报告的3、4、5 三个部分不用写。

2. 提示:CMOS内部07,08,09单元中分别存放着日、月、年的信息,“年”只显示低2位即可。

汇编教学网站(http://202.114.1.86)上有CMOS参考资料。

程序可参见教材6.2节的例1和例2。

实验报告要完整。

3.在TD32中注意观察调用WIN API函数的指令序列特点,注意感受WINDOWS消息机制,掌握WINDOWS窗口程序的基本调试方法。

实验报告的3、4、5 三个部分不用写。

三、寄存器分配和变量定义说明题目一:(1)略(2)系统功能调用35H,入口参数为AL=10H,取中断信息。

(3)直接把主存中的DS:[40H]→IP,DS:[42H]→CS赋值给寄存器BX和CX题目二:略题目三:略四、流程图题目一:略题目二:题目三:略五、源程序题目一:(1)略(2):.386CODE SEGMENT USE16ASSUME CS:CODESTART: XOR AX,AXMOV DS,AXMOV AX,3510HINT 21HMOV AH,4CHINT 21HCODE ENDS子程序NEW08H 流程框END START(3):.386CODE SEGMENT USE16ASSUME CS:CODESTART:XOR AX,AXMOV DS,AXXOR BX,BXXOR CX,CXMOV BX,DS:[40H]MOV CX,DS:[42H]MOV AH,4CHINT 21HCODE ENDSEND START题目二:.386STACK SEGMENT USE16 STACK ;主程序的堆栈段DB 200 DUP (?)STACK ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:CODE,SS:STACKCOUNT DB 18 ;“滴答”计数YEAR DB ?,?,'-' ;年的ASCII码MONTH DB ?,?,'-' ;月的ASCII码DAY DB ?,?,' ' ;日的ASCII码HOUR DB ?,?,':' ;时的ASCII码MIN DB ?,?,':' ;分的ASCII码SEC DB ?,? ;秒的ASCII码BUF_LEN = $-YEAR ;计算显示信息长度CURSOR DW ? ;原光标位置OLD_INT DW ?,? ;原INT 08H的中断矢量;新的INT 08H的代码NEW08H PROC FARPUSHFCALL DWORD PTR CS: OLD_INT;完成原功能DEC CS:COUNT ;(倒)计数JZ DISP ;计满18次,转时钟显示IRET ;未计满,中断返回DISP: MOV CS:COUNT,18 ;重置计数返回STI ;开中断PUSHA ;保护现场PUSH DSPUSH ESMOV AX,CS ;将DS、ES指向CSMOV DS,AXMOV ES,AXCALL GET_TIME ;获取当前日期和时间,并转换成ASCII码MOV BH,0 ;获取0号显示页面当前的光标位置MOV AH,3INT 10HMOV CURSOR,DX ;保存原光标位置MOV BP,OFFSET YEAR ;ES:[BP]指向显示信息的起始地址MOV BH,0 ;显示到0号页面MOV DH,25 ;显示在26行MOV DL,80-BUF_LEN ;显示在最后几列(光标位置设到右上角)MOV BL,0AH ;显示字符的属性(亮绿色)MOV CX,BUF_LEN ;显示的字符串长度MOV AL,0 ;BL包含显示属性,写后光标不动MOV AH,13H ;调用显示字符串的功能INT 10H ;在右下角显示出当前时间MOV BH,0 ;对0号页面操作MOV DX,CURSOR ;恢复原来的光标位置MOV AH,2 ;设置光标位置的功能号INT 10H ;还原光标位置(保证主程序的光标位置不受影响)POP ESPOP DSPOPA ;恢复现场IRET ;中断返回NEW08H ENDP;取日期和时间子程序,从RT/COMS RAM中取得年月日时分秒;并转化成ASCII码存放在对应变量中GET_TIME PROCMOV AL,9 ;9是“年”信息的偏移地址OUT 70H,AL ;设定将要访问的单元是偏移值为9的“年信息”JMP $+2 ;延时,保证端口操作的可靠性IN AL,71H ;读取“年”信息MOV AH,AL ;将2位压缩的BCD码转化成未压缩的BCD码AND AL,0FHSHR AH,4ADD AX,3030H ;转换成对应的ASCII码XCHG AH,AL ;高位放在前面显示MOV WORD PTR YEAR,AX;保存到YEAR变量指示的前2个字节中MOV AL,8 ;8是“月”信息的偏移地址OUT 70H,ALJMP $+2IN AL,71H ;读取“月”信息MOV AH,AL ;转换成对应的ASCII码AND AL,0FHSHR AH,4ADD AX,3030HXCHG AH,ALMOV WORD PTR MONTH,AX;保存到MONTH变量指示的前2个字节中MOV AL,7 ;7是“日”信息的偏移地址OUT 70H,ALJMP $+2IN AL,71H ;读取“日”信息MOV AH,AL ;转换成对应的ASCII码AND AL,0FHSHR AH,4ADD AX,3030HXCHG AH,ALMOV WORD PTR DAY,AX ;保存到DAY变量指示的前2个字节中MOV AL,4 ;4是“时”信息的偏移地址OUT 70H,ALJMP $+2IN AL,71H ;读取“时”信息MOV AH,AL ;转换成对应的ASCII码AND AL,0FHSHR AH,4ADD AX,3030HXCHG AH,ALMOV WORD PTR HOUR,AX;保存到HOUR变量指示的前2个字节中MOV AL,2 ;2是“分”信息的偏移地址OUT 70H,ALJMP $+2IN AL,71H ;读取“分”信息MOV AH,AL ;转换成对应的ASCII码AND AL,0FHSHR AH,4ADD AX,3030HXCHG AH,ALMOV WORD PTR MIN ,AX;保存到MIN变量指示的前2个字节中MOV AL,0 ;0是“秒”信息的偏移地址OUT 70H,ALJMP $+2IN AL,71H ;读取“秒”信息MOV AH,AL ;转换成对应的ASCII码AND AL,0FHSHR AH,4ADD AX,3030HXCHG AH,ALMOV WORD PTR SEC ,AX;保存到SEC变量指示的前2个字节中RETGET_TIME ENDP;初始化(中断处理程序的安装)及主程序BEGIN: PUSH CSPOP DSMOV AX,3508H ;获取原08H的中断矢量INT 21H ;系统功能调用35HMOV OLD_INT ,BX ;保存中断矢量MOV OLD_INT+2,ESMOV DX ,OFFSET NEW08HMOV AX,2508H ;系统新的08H中断矢量INT 21H ;系统功能调用35H;... ;主程序的其他工作STI ;开中断MOV DX,OFFSET BEGIN+15;计算中断处理程序占用的字节数,+15是为了在计算节数时能向上取整MOV CL,4SHR DX,CL ;把字节数换算成节数(每节代表16个字节)ADD DX,100H ;驻留的长度还需包括程序前缀的内容MOV AL,0 ;退出码为0MOV AH,31H ;退出时,将(DX)节的主存单元驻留(不释放)INT 21HCODE ENDSEND BEGIN题目三:略六、实验步骤题目一:(1)直接在TD中观察中断矢量表,得出IP和CS的值。

(2)①录入源代码存盘为2.asm,汇编源程序2.asm ,并链接生成EXE文件,若报错则找出错误修改后重新存盘进行汇编,直至完全通过。

②在TD中单步执行2.exe,运行至21H后观察记录BX和ES中的值。

(3)①录入源代码存盘为3.asm,汇编源程序3.asm ,并链接生成EXE文件,若报错则找出错误修改后重新存盘进行汇编,直至完全通过。

②在TD中单步执行3.exe,观察并记录BX和CX中的值。

题目二:①录入源代码存盘为showt.asm,汇编源程序showt.asm ,并链接生成EXE文件,若报错则找出错误修改后重新存盘进行汇编,直至完全通过。

②运行showt.exe,观察结果是否与预想一致。

③在TD中观察程序运行情况。

题目三:①下载并安装MASM32软件包,找到其中的一个例子example\3dframes②汇编源文件 ml /c /coff 3dframes.asm③将资源文件rsrc.rc转换成目标文件 rc rsrc.rccvtres /machine:ix86 rsrc.res④连接link 3dframes.obj rsrc.obj⑤执行3dframes⑥用TD32观察程序运行情况七、实验记录八、心得。

相关主题