1、设计报告程ml/谋称称业级号名师名名 教程题 导课课专班学姓指汇编语言程序设计计算比赛成绩通信工程1102201103020208李玲廖智罗雅博罗静2014年6月22日湖南工程学院课程设计任务书课程名称汇编语言程序设计课题计算比赛成绩专业班级通信工程1102学生姓名李玲学号201103020208指导老师廖智罗雅博罗静审批任务书下达日期2014年6月6日任务完成日期2014年6月22日一、设计内容与设计要求1.课程设计目的:汇编语言程序设计是计算机专业的重要的专.业根底课,通过本课程设计使学生进一步稳固课堂所学,全面熟悉、掌握8088宏汇编语言程序设计的根本方法和技巧,进一步提高编写程序、阅读
2、分析程序及上机操作、调试程序的能力。2.课题题目1)测量任意程序的运行时间2)读入一个文本文件并以DEBUG中的D命令格式显示。3)文件加密程序4)编写一个时钟程序5)画网格线6)画脉冲波图形7)用画菱形框8)计算比赛成绩3.设计要求:1)在一周内学生须上机16小时以上,程序调试完后,须由指导老师在机器上检查运行结果,经教师认可后的源程序可通过打印机输出。2)分组及安排A.每组同学必须完成所指定的题目,每个同学须自己完成设计,应有不同的思路。B.按学号分组,第一组为1、9、17、25、33号同学,第二组为2、10、18、26、34号,第三组为3、11、19、27、35号,依次类推,其中第一组做
3、第一题,第二组做第二题,依次类推。3)按规定格式完成课程设计报告,将其打印稿(A4纸)上交给老师存档。4)不得抄袭他人程序、课程设计报告,每个人应表达自己的个性设计,成绩的考核按上机表现、辩论成绩及课程设计说明书来综合评定。成绩分为优、良、中、及格、不及格五级分评定。二、进度安排第周星期三14时:00分18时:00分星期日8时:00分12时:00分星期五8时:00分12时:00分课题L测量任意程序的运行时间要求:该程序驻留内存思路:DOS操作系统中,程序的调入运行及程序的终止均是通过相应的软中断来实现的。假设窃取相应软中断,记录下程序开始调入运行的时间及程序终止的时间,那么可测量出该程序运行的
4、时间。提示要点:与之相关的软中断分别为:程序开始执行:4BH号系统功能调用(INT21H)程序结束:INT20HINT27HOOH31H、4CH号系统功能调用(INT21H)课题2.读入一个文本文件并以DEBUG中的D命令格式显示。要求:A、以DEBUG中的D命令格式显示一个文本文件。B、文件名从键盘键入。思路:A、翻开相应文件,读内容至程序缓冲区。B、按要求显示。课题3.文件加密程序要求:A、文件名从键盘输入。B、加密密钥从键盘输入。思路:从原文件读取内容至缓冲区,对其加密后,重新写回文件原来的地方。提示要点:A、加密可使用“异或”操作。B、相关中断为3DH,3EH,3FH,40H,42H号
5、系统功能调用(INT21H)课题4.编写一个时钟程序要求:A、驻留内存。B、不影响其它程序运行。C、把时钟信号显示在屏幕固定位置(最好为右上角)。思路:先从系统实时钟取得当前时间,每隔约005秒定时器向CPU发出一次8号中断请求,是一个硬中断。窃取INTICH中断效劳程序。课题5.画网格线要求:A、背景为蓝色、横线为红色、直线为黄色。B、按用户输入的起点和终点坐标、列距和行距的大小画出任意条横竖线。C、参数以十进制数形式输入,格式如下:Pleaseenterstartingpoint(xl,yl):XX,XXPleaseenterendingpoint(x2,y2):XX,XXPleaseen
6、terdistance(row,col):XX,XX课题&画脉冲波图形要求:用户以十进制数形式从键盘输入脉冲高度、脉冲宽度和颜色参数(格式同上)后,以屏幕中间行为脉冲中间行,从左到右、满屏画出相应的脉冲波图形。课题7.用“种画菱形框要求:A、背景为蓝色、为红色,菱形框画在屏幕中间,菱形中间为空格。B、用户以十进制数形式输入菱形宽度和高度(格式同上)。课题8.计算比赛成绩要求:A、7个评委,每个评委给分范围为O10分(整数)。B、7个评委的给分中,去掉一个最高分和一个最低分,余下5位评委的平均分即为参加者的得分(精确到小数点后一位)。C、将分数在屏幕中间位置处用红色显示出来。目录1 .题目02
7、程序总体设计方案、思路01 1程序总体设计方案01.2. 设计思路03.程序设计框图1425.程序调试结果及分析86.设计总结86.1至UIaJ86.2心得体会81.题目计算比赛成绩:要求:A、7个评委,每个评委给分范围为010分(整数)。B、7个评委的给分中,去掉一个最高分和一个最低分,余下5位评委的平均分即为参加者的得分(精确到小数点后一位)。C、将分数在屏幕中间位置处用红色显示出来。2 .程序总体设计方案、思路2.1 程序总体设计方案依次读取通过键盘输入(不需要回车确认)的七个十进制数并将得分保存在字符数组中,然后,再将7个数累加起来减去最小和最大的两个数,之后除以5,即得到去掉最高分
8、和最低分之后的平均分,最后设置光标位置到中间处并用红色显示出来。2.2 设计思路先定义一段7个字节的内存空间ARRY存放7个评委给出的分数,定义两个2字节存放最大和最小分数、2个字节存放平均分数以及一些信息字符串。主要是运用子函数的方法,实现的主要函数有输入函数、查找函数、计算并显示函数。首先使用输入函数,使用一个循环结构,循环读入七个输入的十进制得分数据并将对应的ASCll码转换成二进制数存入长度为8的字符串中。假设输入数为1,那么要判断下次输入的是否为0,不是0那么直接是当输入的是1,假设输入的数是非09中其他数,就是它本身,其他就重新输入。接下来是查找局部,使用比拟法将字符串中的数据的最
9、大和最小依次查找出来,并存入定义的变量中,并在屏幕上输出。计算和显示局部,设计一个循环结构依次读入第一到第七个数,累加求和。判断最大和最小数值是否为10,如果是那么用上面的求和总数减去10,如果不是那么将总分减去最大值和最小值,就实现了去掉一个最高和最低分。将减去之后的总分除以5,将最后将得到的商输出作为平均分的个位数存入二个字节的数组中,并在之后输出一个小数点。然后将刚刚所得的余数判断是否为0,不是0就乘以10再除以5并将商跟在小数点后输出,如果是0就直接存入数组。此时屏幕上输出的即为去掉一个最高分和最低分之后得到的平均分,使用INTlOH功能设置屏幕显示光标的位置、设置背景和前景的颜色,最
10、后将平均分显示用红色显示在屏幕中间位置。3 .程序设计框图(D汇编程序流程图开始显示输入提示信息调用DIB子程序调用DISP子程序(2)DIB结束(3)FIND子程序流程图ISI指向数组ARRY初始化MAX=O,MIN=,A,(4)DISP子程序流程图将ARRY的7个数累加到(AL)将(AL)中数减去MAX和MIN1j_廿h!M=1(AX)除以5,整数放到SCore,余数放到score+1INT10的n号功能设国屏其父。*八彩仇文本模式INTIOH的9号功能设置字体颜色RETcore+1DATAENDSCODESEGMENTASSUMECS:CODE,DSiDATAStartmovax,dat
11、aMOVDS,AXMOVAH,OMOVAL,3INTIOHCALLDIBCALLFINDCALLDISPmovah,2movdl,0dhint21hmovah,2movdl,0ahint21hMOVAH,1INT21HMOVAX,4C00HINT21DIBPROCNEARPUSHAXPUSHCXPUSHSIMOVCX,7LEASI,ARRYMOVAH,9LEADX,MESSAGE;显示提示信息INT21H;从键盘输入7个010的数字到airyREPl:MOVAH,1INT21HSUBAL,30HCMPAL,OJLREP1;小于O那么再输入CMPAL,9JGREPl;大于9那么再输入CMPAL,
12、1JEREP_10;输入1,跳转并判断是否为10JMPPUTREP_10:MOVAH,8;如果是第二次输入,调用int21h的8h功能输入,不用回显出来INT21HSUBAL,30H;假设第二次输入O那么跳转CMPAL,OJEINPUT_AINPUT:MOVAL,1JMPPUTINPUT_A:MOVAH,2MOVDL,0,INT21HMOVAL,41HPUT:MOVS1J,ALCMPCX,1JESHIMOVDL,2CHMOVAH,2INT21HSHI:INCSlDECCXCMPCX,0JNZREPlEXITl:MOVBYTEPTRSI,TPOPSIPOPCXPOPAXRETDIBENDP;查找
13、最大和最小SCOre的函数FINDPROCNEARPUSHBXPUSHCXPUSHSIMOVCX,71.EASI,ARRYREP2:MOVBL,SICMPMAX,BLJGNEXTMOVMAX,BLNEXT:CMPMIN,BLJLNEXT2MOVMIN,BLNEXT2:INCSI1.OOPREP21.EADX,MESSAGE_MAX;显示提示信息MOVAH,9INT21HMOVDL,MAXCMPDL,41HJNZNEXT_0JMPOUTl.OO;输出A时,用T&O代替NEXT_0:;输出非10数字ADDDL,30HMOVAH,2INT21HJMPTO_MINOUTl.OO:;输出10MOVAH,
14、2MOVDL,INT21HMOVDL,0,INT21HTO_MIN:1.EADX,MESSAGE_MINMOVAH,9INT21HMOVDL,MINCMPDL,41HJNZNEXT_N0JMPOUTl.OOONEXT_N0:ADDDL,30HMOVAH,2INT21HJMPTO_WAITOUT1_000:MOVAH,2MOVDL,INT21HMOVDL,0,INT21HTO_WA1T:MOVAH,2MOVDL,ODHINT21MOVAH,2MOVDL,OAHINT21HMOVAH,1INT21HEXIT2:P0PSIPOPCXPOPBXRETFINDENDP;计算平均值得分并输出来,精确一位小
15、数,注意,5个数字的平均值,一定最多是1位小数位DISPPROCNEARPUSHAXPUSHCXPUSHDXPUSHSlMOVCX,71.EASI,ARRYMOVAL,0REP3:MOVBL,SI1;将7个数都加起来到AX,最后减去MAXSCore和MlNscoreCMPBL,41HJENEXT33ADDAL,BLJMPNEXT3NEXT33:ADDAL,10NEXT3:INCSI1.OOPREP3CMPMAX,41HJESUB_10SUBAL,MAXJMPSUB_MINSUB_10:SUBAL,10SUB_MIN:CMPMIN,4IHJESUB_N10SUBAL,MlNJMPNEXT44SU
16、B_N10:SUBAL,10NEXT44:CBWMOVBL,5DIVBLMOVSCORE,AL;SCore放商CMPAH,0;AH里是余数JNZNEXT4涂数不为O就再除一次即可MOVSCORE+1,AHJMPPRINTNEXT4:MOVBL,AHMOVAL,BLCBWMOVBL,10MULBL;(ax)(al)*(src)MOVBL,5DIVBL;此处又是(al)-(aXy(SrC)商,(ah)-(ax)4SrC)余数一定是0了MOVSCORE+1,ALPRINT:1.EADX,MESSAGE_AVEMOVAH,9INT21HMOVAH,2MOVDX,0B26HINTIOHMOVAH,9MO
17、VBH,0MOVBL,OCH;前一个控制背景颜色,后一个控制字体颜色,0为黑,C为红,0CH就是;红字黑底MOVCX,3INTIOHMOVDL,SCORE;averagescore的整数局部ADDDL,30HCMPDL,3AHJNZNNN2MOVDL,;输出T&OMOVAH,2INT21HMOVDL,0,INT21HJMPXSDNNN2:MOVAH,2INT21HXSD:MOVDL,7;小数点MOVAH,2INT21HMOVDL,SCORE+1;averagescore小数局部,只有1位ADDDL,30HMOVAH,2INT21HEXIT5:P0PSIPOPDXPOPCXPOPAXRETDIS
18、PENDPCODEENDSENDSTART5 .程序调试结果及分析如果输入为1,再等待在输入,如果输入为其他就是本身图5输入1时截图图6输入0到9其他值的截图输入七个数之后,就会显示最大和最小值,再等待键盘输入进入下步图7输入7个数的结果图按下空格键之后,输出显示结果图8程序设计结果图6 .设计总结6.1 遇到的问题问题1:输入1时,回显了一个随机字符图9程序错误1的截图解决方法:输入1时,第二次输入时用INT8H不回显功能来实现输入问题2:输入完7个数之后总是多一个逗号图10程序错误2的截图解决方法:把显示逗号之前判断一下CX的值,当CX的值为1时就用跳转指令转移不再输出逗号6.2心得体会通
19、过这次课程设计,或多或少的让我加深了课堂上的知识,也让我意识到了自己学的远远不够实际应用,虽然课程设计内容并不难,却也让我仔细研究了好久。不过万幸的是,最后也是摸透了个大概。关于这个课题,一开始拿到的时候觉得很简单(事实上也并不难),仔细想想细节还是会有点不知所措,比方关于10的输入,这里纠结了很久,最后还是在同学的帮助下完成的,最大值最小值也思考很久。虽然之前写过几次简单的汇编程序作业,但是在这次课设中,仍是感觉第一次写汇编程序。也许没有范例我们依然难以自己写出这个程序,但是,通过这次学习,我们有了新的收获,将来的学习应用中,我们将会变得更加的得心应手。最后,程序终于修正了所有的错误,成功的调试运行了,这对我们的努力是一种肯定,也充分说明了实践对于掌握一门知识,一种能力的过程中起到的重要的作用。计算机与通信学院课程设计评分表课程名称:汇编语言程序设计项目评价设计方案的合理性与创造性设计与调试结果设计说明书的质量辩论陈述与答复下列问题情况课程设计周表现情况综合成绩教师签名:日期: