华中科技大学汇编实验报告.docx
课 程 实 验 报 告课程名称: 汇编语言程序设计实验实验名称: 实验一 简单程序设计 TD的使用 实验时间: 2016-3-22,14:00-17:30 实验地点: 南一楼804室74号实验台指导教师: 张勇 专业班级:计算机科学与技术班学 号: U 姓 名: 唐礼威 同组学生: 无 报告日期: 2016年 3 月 23日原创性声明 本人郑重声明:本报告的内容由本人独立完成,有关观点、方法、数据和文献等的引用已经在文中指出。除文中已经注明引用的内容外,本报告不包含任何其他个人或集体已经公开发表的作品或成果,不存在剽窃、抄袭行为。特此声明!学生签名: 日期: 成绩评定实验完成质量得分(70分)(实验步骤清晰详细深入,实验记录真实完整等)报告撰写质量得分(30分)(报告规范、完整、通顺、详实等)总成绩(100分)指导教师签字: 日期:目录1实验目的与要求12实验内容13实验过程23.1任务123.1.1设计思想及存储单元分配23.1.2流程图23.1.3源程序23.1.4实验步骤23.1.5实验记录23.2任务243.2.1设计思想及存储单元分配43.2.2流程图43.2.3源程序43.2.4实验步骤43.2.5实验记录43.3任务363.3.1设计思想及存储单元分配63.3.2流程图63.3.3源程序63.3.4实验步骤73.3.5实验记录74体会7参考文献81 实验目的与要求掌握汇编源程序编译工具、汇编程序、连接程序、调试工具的使用;理解数、符号、寻址方式等在计算机内的表现形式;理解指令执行与标志位之间的关系;熟悉常用的DOS功能调用。2 实验内容任务1. 80X86汇编语言程序设计教材中 P31的 1.14题。要求:(1) 直接在TD中输入指令,完成两个数的求和、求差的功能(可以省略实验报告中的程序框图)。求和/差后的结果放在(AH)中。 (2) 请事先指出执行指令后(AH)、标志位 SF、OF、CF、ZF的内容。 (3) 记录上机执行后的结果,与(2)中对应的内容比较。(4)求差运算中,若将A、B视为有符号数,且A>B, 标志位有何特点?若将A、B视为无符号数,且A>B, 标志位又有何特点?任务2. 80X86汇编语言程序设计教材中 P45的 2.3题。要求:(1)可以省略实验报告中的程序框图和源程序。 (2)分别记录执行到“MOV CX,10”和“INT 21H”之前的(BX), (BP),(SI),(DI)各是多少。 (3)记录程序执行到退出之前数据段开始40个字节的内容,指出 程序运行结果是否与设想的一致。 (4)在标号LOPA前加上一段程序,实现新的功能:先显示提示信息“Press any key to begin!”, 然后,在按了一个键之后继续执行LOPA处的程序。任务3. 80X86汇编语言程序设计教材中 P45的 2.4题的改写。要求:(1) 实现的功能不变,对数据段中变量访问时所用到的寻址方式中的寄存器改成32位寄存器。 (2) 内存单元中数据的访问采用变址寻址方式。 (3) 记录程序执行到退出之前数据段开始40个字节的内容,检查 程序运行结果是否与设想的一致。 (4)在TD代码窗口中观察并记录机器指令代码在内存中的存放形式,并与TD中提供的反汇编语句及自己编写的源程序语句进行对照,也与任务2做对比。(相似语句记录一条即可,重点理解机器码与汇编语句的对应关系,尤其注意操作数寻址方式的形式)。(5)观察连续存放的二进制串在反汇编成汇编语言语句时,从不同字节位置开始反汇编,结果怎样?理解 IP/EIP指明指令起始位置的重要性3 实验过程3.1 任务13.1.1 设计思想及存储单元分配寄存器分配:一个AH,运算后的结果存储在AH中。3.1.2 流程图 无3.1.3 源程序无3.1.4 实验步骤1. 使用编辑程序EDIT.EXE录入源程序,存盘文件名为CUBE.ASM。2. 使用MASM5.0或6.0汇编源文件。即MASM CUBE;3. 观察提示信息,若出错,则用编辑程序修改错误,存盘后重新汇编,直至不再报错为止。4. 使用连接程序LINK.EXE将汇编生成的CUBE.OBJ文件连接成执行文件。即LINK CUBE;5. 若连接时报错,则依照错误信息修改源程序。之后重新汇编和连接,直至不再报错并生成CUBE.EXE文件。6. 执行该程序。即在命令行提示符后输入CUBE后回车,观察执行现象。3.1.5 实验记录(包括实验条件、输入/输出、错误和修改等信息的记录)1、 实验环境条件:P3 1GHz,256M内存;WINDOWS 2000命令行窗口;EDIT.EXE 2.0;MASM.EXE 6.0; LINK.EXE 5.2; TD.EXE 5.0。2、求和运算:mov ah,b add ah,b执行前:在add ah,b下一句设一断点,运行至断点停止执行后:分析结果:右边标志寄存器区o变为1,说明有溢出,c为0,说明没有进位3、求差运算:mov ah,b add ah,b执行后:分析结果:c变为1,说明产生进位3.2 任务23.2.1 设计思想及存储单元分配用到4个数据段BUF1-BUF4,一开始用4个寄存器SI、DI、BX、BP依次存储BUF第一个值,到后面用循环给BUF1-BUF4空间赋以不同的值。3.2.2 流程图 无3.2.3 源程序无3.2.4 实验步骤1. 使用编辑程序EDIT.EXE录入源程序,存盘文件名为CUBE.ASM。2. 使用MASM5.0或6.0汇编源文件。即MASM CUBE;3. 观察提示信息,若出错,则用编辑程序修改错误,存盘后重新汇编,直至不再报错为止。4. 使用连接程序LINK.EXE将汇编生成的CUBE.OBJ文件连接成执行文件。即LINK CUBE;5. 若连接时报错,则依照错误信息修改源程序。之后重新汇编和连接,直至不再报错并生成CUBE.EXE文件。6. 执行该程序。即在命令行提示符后输入CUBE后回车,观察执行现象。3.2.5 实验记录1、按f8进行单步调试,直到光标移到“MOV CX,10”Bx变为0014,bp变为001E,si为0000,di变为000A在mov ah,4c 一行按下f2设置断点,按下f9,将运行至该行,再按下f8,执行至“INT 21H”之前Bx变为001E,bp变为0028,si为000A,di变为00142、记录程序执行到退出之前数据段开始40个字节的内容:依次输出 0、1、2、3、4、5、6、7、8、90、1、2、3、4、5、6、7、8、91、2、3、4、5、6、7、8、9、104、5、6、7、8、9、10、11、12、13可见与预期结果相符。3、在代码中改写:在数据段中加入BUF5 DB 0AH,0DH,Press any key to begin!$再在LOPA前加上LEA DX,BUF5MOV AH,9INT 21H实现9号功能调用,在屏幕输出字符串在LOPA前加上MOV AH,1INT 21H实现1号功能调用,等待从键盘输入一个字符,一旦输入,继续程序执行,截图:3.3 任务33.3.1 设计思想及存储单元分配AL每循环一次+1,再赋给BUFESI相应的值,寄存器CX来控制循环次数。3.3.2 流程图 无3.3.3 源程序.386STACK SEGMENT USE16 STACK DB 200 DUP(0)STACK ENDSDATA SEGMENT USE16BUF1 DB 0,1,2,3,4,5,6,7,8,9BUF2 DB 10 DUP(0)BUF3 DB 10 DUP(0)BUF4 DB 10 DUP(0)DATA ENDSCODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATA MOV DS,AX MOV ESI,0 MOV CX,10LOPA: MOV AL,BUF1ESI MOV BUF2ESI,AL INC AL MOV BUF3ESI,AL ADD AL,3 MOV BUF4ESI,AL INC ESI DEC CX JNZ LOPA MOV AH,4CH INT 21HCODE ENDS END START3.3.4 实验步骤1. 使用编辑程序EDIT.EXE录入源程序,存盘文件名为CUBE.ASM。2. 使用MASM5.0或6.0汇编源文件。即MASM CUBE;3. 观察提示信息,若出错,则用编辑程序修改错误,存盘后重新汇编,直至不再报错为止。4. 使用连接程序LINK.EXE将汇编生成的CUBE.OBJ文件连接成执行文件。即LINK CUBE;5. 若连接时报错,则依照错误信息修改源程序。之后重新汇编和连接,直至不再报错并生成CUBE.EXE文件。6. 执行该程序。即在命令行提示符后输入CUBE后回车,观察执行现象。3.3.5 实验记录设断点在int 21那行,打开dump观察数据区的值如下:对比任务2中结果可知符合。4 体会这是汇编的第一次上机,总体来说比较顺利,因为在上机之前任务2和任务3的代码都早已写好,上机主要是熟悉编程和调试环境,学会如何将一个.asm文件编译成.obj文件,再将obj文件链接成一个exe文件,熟悉了td的环境及操作过程,对td的调试过程有一定的了解,主要是go to到指定的一行,和f2设置断点,以及单步执行,熟悉了td界面的各个区域及里面包含的内容,能够通过观察td里面的内容与代码联系起来分析。总体来说,这次实验收获颇丰。参考文献1 王元珍等.80x86汇编语言程序设计.版本(第1版) 2 王晓虹等.汇编语言程序设计教程.版本(第1版)