收藏 分享(赏)

华中科技大学汇编实验报告2.doc

上传人:精品资料 文档编号:10086620 上传时间:2019-10-08 格式:DOC 页数:11 大小:154.27KB
下载 相关 举报
华中科技大学汇编实验报告2.doc_第1页
第1页 / 共11页
华中科技大学汇编实验报告2.doc_第2页
第2页 / 共11页
华中科技大学汇编实验报告2.doc_第3页
第3页 / 共11页
华中科技大学汇编实验报告2.doc_第4页
第4页 / 共11页
华中科技大学汇编实验报告2.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

1、课 程 实 验 报 告课程名称: 汇编语言程序设计实验 实验名称: 实验二 分支程序、循环程序的设计 实验时间: 2016-3-29,14:00-17:30 实验地点: 南一楼 804 室 63 号实验台 指导教师: 张勇 专业班级:计算机科学与技术 201409 班学 号: U201414813 姓 名: 唐礼威 同组学生: 无 报告日期: 2016 年 3 月 30 日 原创性声明本人郑重声明:本报告的内容由本人独立完成,有关观点、方法、数据和文献等的引用已经在文中指出。除文中已经注明引用的内容外,本报告不包含任何其他个人或集体已经公开发表的作品或成果,不存在剽窃、抄袭行为。特此声明!学生

2、签名: 日期: 成绩评定实验完成质量得分(70 分)(实验步骤清晰详细深入,实验记录真实完整等)报告撰写质量得分(30 分)(报告规范、完整、通顺、详实等)总成绩(100 分)指导教师签字: 日期:汇 编 语 言 程 序 设 计 实 验 报 告0目录1 实验目的与要求 .12 实验内容 .13 实验过程 .23.1 任务 1 .23.1.1 设计思想及存储单元分配 .23.1.2 流程图 .33.1.3 源程序 .33.1.4 实验步骤 .63.1.5 实验记录 .74 体会 .8参考文献 .9汇 编 语 言 程 序 设 计 实 验 报 告11 实验目的与要求1、熟悉分支、循环程序的结构及控制

3、方法,掌握分支、循环程序的调试方法;2、加深对转移指令及一些常用的汇编指令的理解;3、加深对常用 DOS 功能调用指令的理解,进一步熟悉 TD 的使用。2 实验内容设计实现一个学生成绩查询的程序。1、实验背景在以 BUF 为首址的字节数据存储区中,存放着 n 个学生的课程成绩表(百分制) ,每个学生的相关信息包括:姓名(占 10 个字节,结束符为数值 0) ,语文成绩(1 个字节) ,数学成绩(1 个字节) ,英语成绩(1 个字节) ,平均成绩(1 个字节) 。例如:N EQU 1000BUF DB zhangsan,0,0 ;学生姓名,不足 10 个字节的部分用 0 填充DB 100, 85

4、, 80,? ; 平均成绩还未计算DB lisi,6 DUP(0)DB 80, 100, 70,?DB N-3 DUP( TempValue,0,80,90,95,?) ;除了 3 个已经具体定义了学生信息的成绩表以外,其他学生的信息暂时假定为一样的。DB wangwu,0,0,0,0 DB 85, 85, 100, ?2、功能一:提示并输入学生姓名(1)使用 9 号 DOS 系统功能调用,提示用户输入学生姓名。(2)使用 10 号 DOS 系统功能调用,输入学生姓名。输入的姓名字符串放在以 in_name 为首址的存储区中。(3)若只是输入了回车,则回到“(1)”处重新提示与输入;若仅仅输入

5、字符 q,则程序退出,否则,准备进入下一步处理。3、功能二:以学生姓名查询有无该学生(1)使用循环程序结构,在成绩表中查找该学生。(2)若未找到,就提示用户该学生不存在,并回到“功能一(1) ”的位置,提示并重新输入汇 编 语 言 程 序 设 计 实 验 报 告2姓名。(3)若找到,则将该学生课程成绩表的起始偏移地址保存到 POIN 字变量中。提示:字符串比较时,当采用输入串的长度作为循环次数时,若因循环次数减为 0 而终止循环,则还要去判断成绩表中名字串的下一个字符是否是结束符 0,若是,才能确定找到了。4、功能三:计算所有学生的平均成绩使用算数运算相关指令计算并保存每一个学生的平均成绩。平

6、均成绩计算公式:(A*2+B+C/2)/3.5,即将语文成绩 A 乘以权重 2、英语成绩 C 除以权重 2后,与数学成绩 B 一起求和,再计算该生的平均成绩。要求避免溢出。提示:使用循环程序结构,注意寻址方式的灵活使用。把小数 3.5 转换成分数后再运算避免使用浮点数指令。5、功能四:将功能二查到的学生的平均成绩进行等级判断,并显示判断结果。(1)平均成绩等级显示方式:若平均成绩大于等于 90 分,显示“A” ;大于等于 80 分,显示“B”;大于等于 70 分,显示“C” ;大于等于 60 分,显示“D” ;小于 60 分,显示“F” 。 提示:使用分支程序结构,采用 2 号 DOS 系统功

7、能调用显示结果。(2)使用转移指令回到“功能一(1) ”处(提示并输入姓名) 。3 实验过程3.1 任务 13.1.1 设计思想及存储单元分配设计思想:本实验主要是要解决 3 个问题:一是提示并输入学生姓名;二是如何进行字符串的比较从而查询学生;三是如何计算平均分从而分出等级。依据本次实验的要求,此处用分支、循环程序的结构及控制方法来解决。寄存器分配:CX:存放学生数量(默认 3) ,计数器作用;BX:存放目标学生下标值,得到分数缓冲区首地址;BP:存放缓冲区基地址;AL:存放平均成绩;AX,DX,SI:临时寄存器;汇 编 语 言 程 序 设 计 实 验 报 告33.1.2 流程图开 始9号

8、调 用 输 出 提 示信 息 , 10号 调 用 输入 查 询 学 生 姓 名输 入 字 符 串 为空 ?Y9号 调 用 : 是 否 继 续 , 按 任 意 键 继 续 ,按 q退 出N结 束YN CX=0?Y输 出 查 找 失 败N 缓 冲 区 是 否 为零 N 当 前 字 符 是 否匹 配NCX-Y 缓 冲 区 减 一Y计 算 平 均 成 绩 并 输出 等 级3.1.3 源程序.386STACK SEGMENT USE16 STACKDB 200 DUP(0)STACK ENDSDATA SEGMENT USE16N EQU 3BUF DB zhangsan,0,0DB 100,85,80

9、,?DB lisi,6 DUP(0)DB 80,100,70,?DB wangwu,4 DUP(0)DB 85,85,100,?MSG DB Input the name : $CONTINU DB Enter any keys to continue(if enter q,exit!):$FAIL DB Not Exist!$INPUT DB 10DB ?DB 10 DUP(0)DATA ENDS汇 编 语 言 程 序 设 计 实 验 报 告4CODE SEGMENT USE16ASSUME CS:CODE, DS:DATA, SS:STACKSTART: MOV AX, DATAMOV D

10、S, AXJMP BEGINFAILED: LEA DX, OFFSET FAIL ; 查找失败MOV AH, 9HINT 21HLOOPA: MOV DL, 0AH ;换行符MOV AH, 2HINT 21HLEA DX, OFFSET CONTINU ;继续MOV AH, 9HINT 21HMOV DL, 0AH ;换行符MOV AH, 2HINT 21HMOV DL, 0DH MOV AH, 2HINT 21HMOV AH, 8HINT 21HCMP AL, 71HJE OVER ;输入 q, 退出程序BEGIN: MOV CX, N ; 学生个数LEA DX, OFFSET MSG ;

11、输出提示信息MOV AH, 9HINT 21HMOV DL, 0AH ; 换行符MOV AH, 2HINT 21HLEA DX, OFFSET INPUT ; 读入学生姓名MOV AH, 0AHINT 21HMOV DL, 0AH ; 换行符MOV AH, 2HINT 21HLEA BP, OFFSET INPUT ; 将 INPUT 基址存放至 BPADD BP,2 汇 编 语 言 程 序 设 计 实 验 报 告5CMP DS:BYTE PTR BP-1,0H ;空字符串JE LOOPAINC CXCOMPA: DEC CXJE FAILED ; 查找失败, 重新输入MOV BX, N ;

12、计算目标学生下标值, 存放至 BXSUB BX, CXIMUL BX, 14 ; 根据目标学生下标值, 找到分数缓冲区首地址MOV AX, 10 ; 临时计数器MOV SI, 0COMPB: MOV DL, BX + SIMOV DH, BYTE PTR DS:BP + SICMP DL, 0 ; 如果缓冲区姓名已结束,说明查找成功JE CAL ; 跳转至平均成绩计算处CMP DH, DL ; 比较 当前缓冲区姓名 与 输入姓名 字符JNE COMPA ; 当前字符相同,继续循环以比较下一字符INC SIDEC AXJNE COMPBCAL: MOV BX, N ; 计算目标学生下标值, 存放

13、至 BXSUB BX, CXIMUL BX, 14 ADD BX, 10 ; 根据目标学生下标值, 找到分数缓冲区首地址 BX = m * 14 + 10MOV AX, 0MOV DX, 0MOV AL, BX ; 计算平均成绩ADD AX, AX MOV DL, BX +1ADD AX, DX MOV DL, BX +2SAR DL, 1ADD AX, DX ;AL=A*2+B+C/2SAL AX, 1MOV DL, 7IDIV DL ; AL = 2 * AL / 7MOV BX + 3, AL; AVG = AL ( AL / 3.5)CMP AL, 90 JGE LEVELA汇 编 语

14、 言 程 序 设 计 实 验 报 告6CMP AL, 80JGE LEVELBCMP AL, 70JGE LEVELCCMP AL, 60JGE LEVELDJMP LEVELFLEVELA:MOV DL, 41H ;输出成绩等级MOV AH, 2HINT 21HJMP LOOPALEVELB:MOV DL, 42HMOV AH, 2HINT 21HJMP LOOPALEVELC:MOV DL, 43HMOV AH, 2HINT 21HJMP LOOPALEVELD:MOV DL, 44HMOV AH, 2HINT 21HJMP LOOPALEVELF:MOV DL, 46HMOV AH, 2

15、HINT 21HJMP LOOPAOVER: MOV AH, 4CHINT 21HCODE ENDSEND START3.1.4 实验步骤1. 使用编辑程序 EDIT.EXE 录入源程序,存盘文件名为 shiyan.ASM。2. 使用 MASM 6.0 汇编源文件。即 MASM shiyan;3. 观察提示信息,若出错,则用编辑程序修改错误,存盘后重新汇编,直至不再报错为止。4. 使用连接程序 LINK.EXE 将汇编生成的 shiyan.OBJ 文件连接成执行文件。即 LINK shiyan;5. 若连接时报错,则依照错误信息修改源程序。之后重新汇编和连接,直至不再报错并生成汇 编 语 言

16、程 序 设 计 实 验 报 告7shiyan.EXE 文件。6. 执行该程序。即在命令行提示符后输入 shiyan 后回车,观察执行现象。7. 让 9 号功能调用显示的信息放在自己希望的位置。8. 在 9 号功能调用时,尝试带显示字符串的结尾没有“$”结束符。9. 10 号功能调用时,输入的字符数超过定义的数量时,它是如何处理的?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

17、、按照流程图编写完程序,编译和连接都没问题,运行时出现后来发现是 9 号调用的字符串在之前定义时没有以$结尾,改正后程序运行正确3、程序运行正确,但格式很差,如下图:改进方法:在 LOOPA 里 1 号调用的换行符后面加上一个回车换行符,即MOV DL, 0AH ;换行符MOV AH, 2HINT 21H后面加上:MOV DL, 0DH MOV AH, 2HINT 21H改正后运行如下图:汇 编 语 言 程 序 设 计 实 验 报 告8分析:存放的三个人平均成绩依次为 zhangsan:88 等级 A; lisi:83 等级 B; wangwu:90 等级 B,可见与输出结果相符合4、对于输入

18、字符超过定义的数量时,会出现无法再继续输入的情况如下图:4 体会这次上机,进一步提高了自己的汇编语言编程能力,通过实验对这门语言有了更深的理解,更加熟悉了调试工具 td 的使用以及对 dos 功能调用的理解。这次上机主要是熟悉分支、循环程序的结构和控制方法,掌握了它们的调试方法,对转移指令有了更深的理解,是从比高级语言更底层的角度去理解了其含义,对其它的汇编指令有了初步的认识,尽管有些指令还是需要查表才能写出来,但相信在今后的几次实验中会对更多的指令更加的熟悉和掌握。汇 编 语 言 程 序 设 计 实 验 报 告9参考文献1 王元珍等.80x86 汇编语言程序设计.版本(第 1 版) 2 王晓虹等.汇编语言程序设计教程.版本(第 1 版)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报