课程设计报告课程名称课题名称汇编语言程序设计1.显示彩色菱形2.显示系统当前时间专业班级学号姓名指导教师年月日课程设计任务书课程名称汇编语言程序设计课题 1.显示彩色菱形 2.显示系统当前时间专业班级学生姓名学号指导老师审批任务书下达日期年月日任务完成日期年月日一、设计内容与设计要求1.设计内容:通过本周的课程设计,学生能够巩固所学的基础知识,并能够使学生更加熟练运用汇编程序设计语言来掌握综合汇编程序设计的方法和过程,以及为设计其它应用软件提供帮助,进而提高学生的软件设计能力。
(1)、编制一计算比赛成绩的程序,要求完成以下功能:a、9 名评委,每个评委给分范围为 0~100(整数);b、9名评委给分中,去掉一个最高分和一个最低分,剩余7 名评委的平均分即为参赛者的得分(精确到小数点二位);c、将得分在光标位置处显示出来。
(2) 、编制一程序,要求接收从键盘输入的一个班的学生成绩,并存放于30 字的 grade 数组中,各数据的格式为:学号,成绩 1,成绩 2,⋯,成绩 5然后根据 grade 中的学生成绩,把学生名次填入rank 数据组中,并显示出来,格式为:学号,名次(3)、利用 INT 1CH(大约每秒中断 18.2 次)编写一个中断驻留程序,要求在屏幕的右上角显示计算机中当前系统时间,显示格式为时:分: 秒:1/100 秒(4)、输入一个菱形的两条对角线长,在屏幕上用‘ * ’号画出一个彩色的菱形。
(5)、设置图形方式并显示彩条,要求:选择背景色为蓝色,调色板为0,然后每行显示一种颜色,每四行重复一次,一直到整个屏幕都显示出彩条2.设计要求:掌握结构化程序设计的主体思想,以自顶向下逐步求精的方法编制程序解决一些实际的问题,为将来编写软件积累一些典型的案例处理经验。
(1)、设计正确,方案合理。
(2)、界面友好,使用方便。
(3)、程序精炼,结构清晰。
(4)、设计报告 5000 字以上,含程序设计说明,用户使用说明,源程序清单及程序框图。
(5)、上机演示。
(6)、按学号顺序选课题号,并在规定的时间内独自完成相关课题的汇编源程序编写、调整和运行。
源程序及编译生成各文件均保存在软盘中;(7)、按本任务书的要求,按附录的要求编写《课程设计报告》(Word 文档格式)。
并用 A4 的复印纸打印并装订;二、进度安排第18 周:星期 1下午2:00-5:30星期 2下午2:00-5:30星期 4下午2:00-5:30附:课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4 大小的图纸及程序清单)。
正文的格式 : 一级标题用 3 号黑体 , 二级标题用四号宋体加粗, 正文用小四号宋体; 行距为 22。
正文的内容 : 一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。
正文总字数要求在5000 字以上(不含程序原代码)。
目录课题一 :画出一个彩色的菱形 (1)一、课题的主要功能 (1)二、课题的功能模块的划分 (2)三、主要功能的实现 (4)四、程序调试 (5)五、总结 (6)课题二 :显示计算机中当前系统时间 (7)一、课题的主要功能 (7)二、课题的功能模块的划分 (7)三、主要功能的实现 (9)四、程序调试 (10)五、总结 (11)附件 (源代码 ) (12)1. 画出一个彩色的菱形 (12)2.显示计算机中当前系统时间 (17)课题一 :画出一个彩色的菱形一、课题的主要功能输入一个菱形的两条对角线长,在屏幕上用‘* ’号画出一个彩色的菱形。
程序运行时会有提示要求用户输入菱形的对角线长。
在界面上用户须分别输入菱形的横向和竖向对角线长。
程序会跟据输入的对角线长度计算出菱形所在的一个矩形区域(设置双重循环的参数),然后以( 0,0 )为原点横向为 X 轴,竖向为 Y 轴,建立坐标系。
先确定菱形的左顶点坐标为( 0,10 ),然后根据对角线长计算下顶点的坐标(L/2 ,10+W/2),再将菱形分成四个区域,在左下角的区域内判断要显示的‘* ’,再根据对称的关系将其他三个区域填满。
左下角区域的判断是根据那两个点的坐标建立的一次不等式,满足条件的显示。
用BIOS的02H 功能来设置光标位置,用09H功能来设置光标的位置显示字符及其属性,属性即为显示字符的颜色,每显示一个颜色就换一种。
二、课题的功能模块的划分输入对角线长计算参数设置光标位置判断是否满足条件显示图形结束图 1 系统功能模块本课题共分为五个模块,即输入对角线模块,计算参数模块,设置光标模块,判断模块,显示图形模块。
输入模块:MOV AH,01HINT 21H分为四个字符输入,第一,二个字符为横向长L ,先将第一个字符转化为数值 SUB AL,30H MUL N两位数,再加上第二个字符的数值个位数变为一个两位数,第二个两位数同理得竖向长W。
计算参数模块:本程序包括 A,B,E,X,Y ,I,OLD,NEI,WAI 参数需要计算, A=W/2 , B=L/2 ,E=B,X=DL,Y=DH,I 控制字符颜色 0-7 循环, LEA OLD,ATRI , NEI=B+1 ,WAI=A+1 。
设置光标模块 :将光标移至( 0,10+A),并从这点,逐行遍历完左下角的矩形区域。
其他三个区域根据对称的关系移动。
判断模块:根据 DX 中的内容取出 X=DL ,Y=DH ,代入不等式 BY<=AX+10 ,满足条件的点就显示出来。
显示图形模块:若此点满足条件就显示出来,每显示一次颜色就变一次,然后将光标移至其他三个区域对称的点显示,其他三个区域的坐标为(2E-X,Y )( 2E-X,20-Y )(X,20-Y )。
三、主要功能的实现本程序主要功能是两层循环中的判断和显示部分PUSH CXMOV CX,NEIPUSH CX设置光标位置获得 X,YBY<=AX+10?N Y在此点显示‘ * ’,颜色属性改变其他三个对称区域显示‘* ’,颜色属性改变N POP CX INC DL DEC CXCX=0?YDEC DH MOV DL,0POP CX DEC CXN CX=0?Y结束图 2 判断和显示流程图四、程序调试1.输入横向长度和竖向长度图 3 彩色菱形2.输入横向长度和竖向长度图 4 彩色菱形五、总结课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程。
通过几天的课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论。
在设计的过程中遇到问题,可以说得是困难重重,所以在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。
在课程设计过程中,收获知识,提高能力,懂得怎么样去制定计划,怎么样去实现这个计划。
不畏艰难,勇往直前!课题二 :显示计算机中当前系统时间一、课题的主要功能本课题的主要功能是利用INT 1CH(大约每秒中断18.2 次)编写一个中断驻留程序,要求在屏幕的右上角显示计算机中当前系统时间,显示格式为时:分 :秒:1/100 秒完成该课题的系统时间功能,需要不断地同步显示当前系统时间,这里我们需要用到INT 1CH,平均每秒中断18.2 次,以这样的频率同步显示系统时间以满足人们的视觉效果。
完成系统时间同步的前提下还要读取系统时间和显示系统时间。
二、课题的功能模块的划分2.1 功能模块解释课题的功能模板就是在定义好数据之后,完成读取当前系统时间和显示当前系统时间两大模块。
包括获取原终端类型、保存原中断类型、设置新的中断类型、执行中断处理程序、应用堆栈保护现场、读取系统时间,然后分别将时间的 BCD 码转换为字符,在制定内存位置写入时间然后显示时间,最后恢复现场,中断返回。
该课题采用了调用子程序的思想来完成,主体功能都通过子程序来完成,中断模块、读取系统时间模块、显示系统模块、现场保护模块及现场恢复模块。
通过调用子程序的办法使本程序更加具有条理性,其中现场保护是为了使寄存器中有用的数据保存起来,让寄存器进行其他运算,现场恢复是使原来保存起来的有用的数据进行恢复,读取系统当前时间并使屏幕显示的时间与系统当前时间同步变化,这就不得不使用中断模块,运用 INT 1CH ,可以每秒中断 18.2 次,足以满足视觉上的同步。
2.2 功能模块流程图主程序显示当前系统时间子程序模块现读场取恢系中复断统及模当保块前护时模间块图 1 功能模块流程图显示当前系统时间三、主要功能的实现系统时间功能调用实现获取当前系统时间并显示当前系统时间。
步骤一:定好数据之后,在 DOS 环境下,用 2C 号取系统时间的功能,将时赋值给CH,将分赋值给 CL ,将秒赋值给 DH ,将 1/100 赋值给 DL 。
系统时间显示子函数 INT 1C 来具体实现当前系统时间,将从系统中读取的时、分、秒分别送入内存 T 到 T7,然后块装入指令把 SI 指向的存储单元读入累加器。
保护现场开始读取系统时间获取原中断类型1CH分别将时间的BCD 码转换为字符保存原中断类型在指定的位置写入时间并显示时间设置新的中断类型恢复现场执行中断处理程序中断返回图 2 时间显示流程图四、程序调试程序运行显示当前系统时间五、总结本文的主要内容是介绍用汇编语言(8086/DOS)实现一个显示系统时间的程序,在界显示系统时间,在设计过程中,首先是按照题目所给的具体要求,根据自己的设计思路,画出流程图,然后查阅相关资料,写出流程图中的各段子程序,把子程序放在Masm for Windows集成环境中进行调试,找出程序中的错误,并进行修改和不断完善,以得到符合要求的程序。
有了这些子程序后,我们就可以根据要求写出源程序,但在写源程序的过程中遇到了很多困难,经过反复调试跟修改,最终得到了符合要求的源程序。
一周的汇编语言课程设计结束了,我的收获很大。
通过课程设计的编程和对编程过程中遇到的问题的思考,有效的提高了我对汇编的认识和理解,切实的提高了我的编程能力,补全了我的不足。
通过这次课程设计,我巩固所了学过的知识,能用汇编语言熟练地运用顺序、选择、循环三大结构,进一步掌握了各个指令的功能,特别是转向指令,掌握了子程序的定义及调用,以及正确地运用 DEBUG指令。
在整个程序的编写中,调试占了很大部分的时间。
要想写好汇编语言的程序,必须认真对待代码的每一个细节,还必须熟练的掌握 debug 命令,这对程序的调试是非常重要的。