比赛评分系统设计

上传人:文*** 文档编号:92554071 上传时间:2022-05-18 格式:DOCX 页数:19 大小:238.25KB
收藏 版权申诉 举报 下载
比赛评分系统设计_第1页
第1页 / 共19页
比赛评分系统设计_第2页
第2页 / 共19页
比赛评分系统设计_第3页
第3页 / 共19页
资源描述:

《比赛评分系统设计》由会员分享,可在线阅读,更多相关《比赛评分系统设计(19页珍藏版)》请在装配图网上搜索。

1、错误!未定义书签。错误!未定义书签。错误!未定义书签。错误!未定义书签。错误!未定义书签。错误!未定义书签。错误!未定义书签。错误!未定义书签。错误!未定义书签。错误!未定义书签。错误!未定义书签。错误!未定义书签。错误!未定义书签。摘 要 1 概述 任务要求 编程环境 2 分析 程序功能 设计思路 3 程序流程图 主程序流程图 子程序流程图 4 程序调试 5 心得与体会 参考文献 摘要用汇编语言编写程序能够直接利用硬件系统的特性直接对位、字节或字寄存器、存储单元、I/O端口进行处理,同时也能直接使CPU指令系统和指令系统提供的各种寻址方式编出高质量的程序。汇编程序是最早也是最成熟的一种系统软

2、件,能够将汇编语言源程序翻译成机器语言程序,可以自动对源程序进行检查给出错误信息等。本说明书主要介绍了用汇编语言编写程序计算比赛成绩的设计思路和编程流程图,以及调试程序时的心得与体会。关键词 汇编 流程比赛评分系统程序设计1 概述任务要求 比赛选手人数控制在30 以下;9个评委,每个评委给分范围为010分(整数),随机给出分数 9 个评委的给分中,去掉一个最高分和一个最低分,余下 7 位评委的平均分即为参加者的得分(精确到小数点后一位) ; 将分数在屏幕中间位置处用红色显示出来; 将参加比赛的选手的排名顺序显示出来。编程环境把汇编语言翻译成机器语言的过程称为汇编,为了实现这一过程正确运行汇编语

3、言,系统需具备以下编辑程序:Masm为宏汇编程序,负责对源文件进行汇编;link为连接程序,把汇编后产生的目标模块连接在一起,产生可执行文件; debug 是调试程序,它是调试汇编语 言程序必不可少的工具。2 分析根据设计任务书分析得出程序要求具备的功能,进而写出自己的设计思路。程序功能根据设计任务要求可以得出所涉及程序必须具有以下功能( 1 )显示选手序号( 2 )显示 9 个评委的评分( 3 )用红色字体显示每位选手的平均分( 4 )根据选手平均得分排序(本程序按照分数由高到低排列)设计思路主要采用循环结构和子程序调用的基本结构形式,编写程序产生9 个 010 的随机数,找出这9 个数中的

4、最大和最小的数,即评委给出的最高分和最低分,分别保存。再对这 9 个数求和,减去前面保存的最大数和最小数,所得的值除以7 ,即为选手的平均分,分别保存整数部分和小数部分。保存该分数并在屏幕中间用红色显示出来。 以上过程循环30 次, 然后根据平均分的高低对选手进行排序并调用 BIOS功能使平均分为红色显示。为了使程序方便阅读和修改,减少编程工作量,节省存储空间, 并易于实现程序的模块化,在编写程序的时候 尽可能的把一些具有特定功能的程序段独立出来编写成可以被其他程序多次调用的子程序,然后在主程序需要的地方调用 。汇编程序中的CALL和RET指令就是完成子程序调用和返回功能的。有了以上基本的设计

5、思路,便可以着手准备开始编写流程图 ,然后再查阅相 关资料巩固关于汇编语言指令系统 以及寻址方式的知识和使用技巧,复习调试程序的方法以及常见问题的解决办法等等。3程序流程图流程图是算法的图形描述,它以图形的方式把解决问题的先后次序和程序的 逻辑结构直观地、形象地描述出来,使得编程的思路清晰,有利于编制、调试程 序。主程序流程图(开始为了使程序简洁明了和易于调试查错,因此把流程图分成了几个部分。主程序的流程图如上图3-1所示,由流程图中可以看出程序的主要设计思路和整体框架。子程序流程图对于一些具有特殊功能的程序可以编制成子程序,通过调用来实现功能,这样有利于程序的读和写,也易于查错,因此本题将显

6、示指定字符串、显示十进制ASCII码、查找最高分最低分的过程编写成子程序以供调用,方便简洁明了,可以更快地确定编程的方向和目的,找出解决问题的最佳途径。由于显示指定字符用、显示十进制 ASCII码涉及DOS功能调用,指令简单,为汇编者所熟记的知识,可以不用流程图再次赘述。查找最高分最低分的流程图如图3-2所示,从图中可以看出,找出最高分的方法和查找最低分的方法类似,只需更改其中的个别指令,即可达到目的。图3-2查找最高分和最低分程序流程图将各个选手按照所得的平均分排序的程序流程图如图3-3所示。由于参赛选图3-3将平均成绩排序的流程图手的人数不多,采用冒泡法排序可以达到快速、准确的效果数据的排

7、序 采用冒泡法降序排列,将其两两比较。前一个数较大,则不改变 原位置,否则两数交换,一次将全部数据排序,排序的次数由需要排序的数据个数决定。这种排序方法是从最低部的元素开始进行比较,较小的元素将会像气泡 一样往上冒。在排序的过程中,外循环遍历要排序的元素,内循环用于挑选出最值。内循环用于将相邻的两个元素进行比较,将小的元素调到大元素的前头,内循环的循环次数表示相邻元素的交换趟数。止匕外,在整个程序中,除了这三个主要环节,还需要编写子程序用于显示字 符串,产生随机数等等,这些模块的编程思路比较直观,所以在流程图中没有着重表明。有了编写汇编语言计算比赛成绩的思路和流程图之后,通过查找一些 不常见的

8、指令和查阅相关的参考资料,就可以编写出初步的源程序。4-1 所示。4 程序调试经过调试程序,得出随机给出选手得分的运行的结果如图图 4-1 随 机 给 出 的 选 手 得 分最终排名和选手所得的分数如图 4-2 所示。图中给出了 24 位选手的成绩和排 名,排名顺序为从高分到低分,最后一列为各个选手所得的平均分,用红色显示。图 4-2 选 手 排 名 顺 序5 心得与体会在本次比赛评分系统程序的设计过程中,本小组各成员积极配合想算法,分工协作写程序,历经百般波折,通过几个昼夜的艰苦奋战,终于在我们几近绝望的最后关头突然跳出来一个窗口,程序运行成功了,大家手舞足蹈、欢欣雀跃,总算努力没有白费,俗

9、话说得好:坚持,就意味着一切。本次微机原理课程设计感受颇深,受益匪浅。由于初学汇编语言,再加上平时 的习题都很简单而且要求不高 ,所以在看到题目的时候, 一开始有些傻眼不知从何着手 ,仔细看了看想了想查了查资料后发现把问题分块处理, 各个击破,最后再拧成一股绳,问题貌似就变得简单很多,主要是如何拧成一股绳,从何处开始拧,也就是如何把各个子程序在何处调用才能实现功能,这个问题确实需要大动脑筋才能确保最后的结果和设计要求相符。第一次上机用汇编编写程序, 第一次接触用汇编语言程序产生随机数,第一次尝试着编写子程序,也是第一次听说还有BIOS 功能调用。万事开头难,但总要开个头,第一天没着落,就想啊,

10、查资料,通过小组成员讨论后决定各成员分工合作,每人负责一个功能,最后一起合成调试。然后各自就开始努力的工作了,先是根据要求把可能用到的书中的知识复习巩固了一遍,然后对准问题查阅相关资料,遇到相似的问题就借鉴过来,再根据实际问题需要编写自己的程序,就这样一步步按照流程做了下来,途中遇到了诸多问题,但是问题必须解决才能继续往下写,虽然好些天疲于奔命于图书馆、书店,但是有压力就有动力,逐渐的问题变得越来越少。编写程序过程中,开始是一塌糊涂,对一些伪指令和DOS功能调用方便掌握不牢固,编写起程序来很不灵活,经过查阅资料和询问同学, 在边摸索边实践的过程中,我体会到了编写程序 不仅需要广泛深入的知识面,

11、还需要灵活的头脑和严密的逻辑思维,稍有考虑不到的方面,程序就会“没有生成OBJ文件”。循序渐进的,我终于编写出了我脑子里所想的初步程序,但输入到MF2KP集成开发环境中运行时,一开始的热情瞬间就没了, 程序无法编译,不能生成 .obj文件,想了许久,明白了一点:编写程序最主要的其实不是在于如何编写而是成百上千次甚至上万次的不断调试。 于是, 我开始了调试程序这复杂而又极其漫长的过程。最终在小组成员共同的努力下,我们成功了,一股成就感袭上心头,各个都笑了,也松了口气,回头想想,不仅巩固了所学知识,而且锻炼我们理论结合实际的能力和团队合作能力。 同时也发现了些许不足,我敢肯定的是这次发现的问题被牢

12、牢记住了,还起了个加深记忆的作用。通过本次课设我发现, 定义的变量是可以直接用 inc 、 dec 的,即对其内容值加 1 、减 1 ,但是要注意,虽然变量可以看成符号地址,不过此处只是把它们的数据内容加 1 或减 1 ,而非对其地址,之前我以为不能直接对定义好的变量用 inc 、 dec ;使用十六进制数时,若第一个数位值是字母, 要在在其前加0, 否则会被认为是变量;寄存器、变量之间传递值时,位数要一致; 使用 push 后记得相应地使用 pop , 还要注意二者应反序, 即 push ax ,push bx , push cx 与 pop cx , pop bx , pop ax 相对应

13、;在子过程中的 ret 处之前应放上相应地放上 pop 语句,而子过程的入口处应相应放上 push 语句;要养成良好的程序书写习惯,比如 标号对齐、参数对齐、注释对齐,这样看起来赏心悦目,也不容易出错,也易于排错修改; 标号最好采用有意义的英文,这样比较直观,注释尽量详细准确,便于阅读 ,而且有利于其它程序中作为子程序模块的调用。还有要注意典型程序模块的积累,再复杂的程序也是由一个个小程序模块组成的。这些问题是这次课程设计体会比较深刻的几个方面。总而言之,通过本次比赛评分系统程序的设计,不仅巩固了所学汇编知识,而且在知识的广面和深面上有了相当程度的拓展。几个枯燥的字母被我们这一折腾竟然变得有了

14、活力,使我感觉到汇编强大的魔力,编程就像日常生活一样,是个不断探索和发现的过程,途中必然会遇到困难,前面出现坎儿,是因为对面就是平原,编程序要知道:坚持,就意味着一切。参考文献2001199120081 沈美明 , 温冬蝉 .IBM-PC 汇编语言程序设计(第 2 版). 清华大学出版社,2 沈美明,温冬蝉.IBM-PC 汇编语言程序设计例题习题集. 清华大学出版社,3 陆忠华 . 汇编语言程序设计. 科学出版社, 19934 迟成文 , 王保秀 . 汇编语言程序设计. 中国科学技术大学出版社,19935 徐建民 . 汇编语言程序设计. 电子工业出版社 .2005 年6 彭虎, 周培玲, 傅忠

15、谦 . 微机原理与接口技术 (第 2 版) . 电子工业出版社,附录Code Segment Assume CS:Code,DS:Code; ; 功能:显示指定地址( Str_Addr )的字符串; 入口:;Str_Addr =字符串地址(要求在数据段); 用法 : Output Str_Addr; 用法举例: Output PromptStrOutput MACRO Str_Addrpush axlea dx,Str_Addrmov ah,9int 21hpop ax EndM; ; 功能:把AX 中的二进制无符号数转换成显式的十进制ASCII 码,并送显示屏显示;入口 : AX5进制数;

16、出口:在当前光标位置显示转换后的 ASCII 码数字Dec_ASCII Proc Near mov dh,10 div dhor ax,3030h ; 将两位十进制数转换成ASCII 码cmp al,30hja $+4mov al,20h ; 若十位数是0 ,以空格代替push ax mov ah,0ehint 10h ; 显示十位数pop axxchg ah,almov ah,0ehint 10h ;ret显示个位数Dec_ASCII EndP; Commentators equ 9 ;评委人数Contestants equ 23 ;参赛选手人数Press_Key db 0ah,0dh,Th

17、e complated. Press any key to exit.$Start: mov di,64 ;显示缓冲区偏移地址mov ax,0b800h ; 显示缓冲区段地址mov es,axmov al,20hmov ah,4 ; 字符颜色(红色)mov cx,Contestants ; 参赛选手人数 cldLine: push cxmov cx,3rep stoswadd di,154 ; 显示缓冲区下一行同列偏移地址pop cxloop Linepush cspop ds ;使数据段与代码段同段push cs pop es ;使附加段与代码段同段; ; 评委随机打分 cldlea si,

18、Buffer ;数据缓冲区地址 ( 选手成绩链表)mov di,siadd di,Contestants*2 ;选手成绩存放地址mov cx,Contestants ; 参赛选手人数mov dl,11 ; 除数Grade_0: push cxmov si,di ; 选手成绩地址inc siinc si ; 下一个链表节点地址mov ax,Contestants+1sub ax,cx ; 选手序号stosb ; 保存选手序号xor bx,bx ;BH= ,最高分初值,BL二最低分初值xor dh,dh ; 选手总分初值mov cx,Commentators ; 评委人数Grade_1: xor

19、al,alout 43h,alin al,40hxor ah,ahdiv dlxchg ah,al ; 舍弃商数,取余数,作为某评委的打分stosb ; 保存一个评委打分add dh,al ; 累计评委打分cmp bh,aljae $+4 ; 最高分 =此评委打分mov bh,al ; 保存新的最高分cmp bl,aljbe $+4 ; 最低分 =此评委打分mov bl,al ; 保存新的最低分loop Grade_1mov al,dhsub al,bh ;减去一个最高分sub al,bl ;减去一个最低分stosb ; 保存最后得分pop cxloop Grade_0; ; 用冒泡排序法对选

20、手最后得分降序排序lea si,Buffer ;选手成绩链表地址mov cx,Contestants ; 参赛选手人数dec cx ; 外循环次数Sorting: push cx ; 入栈保存外循环次数 push si ;入栈保存数组地址Compare: push si pop di ;当前数组元素地址赋给目的变址寄存器,以备交换之用lodsw ; 将当前数组元素读入累加器mov bx,axmov al,bx10 ; 将当前最后得分读入累加器ALmov bx,si ; 相邻的下一个选手信息地址cmp al,bx10 ; 当前选手最后得分与相邻的下一个选手最后得分相比较jae NextOne ;

21、 若大于或等于,不作数据交换,处理下一个数组元素mov ax,di ;若小于,读入当前选手信息链表节点xchg ax,si ;交换链表元素mov di,ax ; 保存数值较大者节点地址NextOne: loop Compare ; 处理下一个数组元素pop si ; 数组地址出栈pop cx ; 外循环次数出栈loop Sorting ;下一趟比较J; 按总成绩降序显示所有选手各评委打分、平均得分mov cx,Contestants ; 参赛选手人数xor bh,bh ; 显示页号 0Contestant: push cxpush simov si,si ; 读入链表节点 ( 某选手成绩地址)

22、lodsb ; 读入选手序号xor ah,ahcall Dec_ASCII ; 显示参赛选手序号mov ah,0ehmov al,:int 10hmov al,20hint 10h ; 空一格mov cx,Commentators ; 评委人数Commentator: xor ah,ahlodsb ; 读入选手某评委打分call Dec_ASCII ; 显示分数mov ax,0e20hint 10h ;空一格loop Commentatorint 10h ;空一格lodsb ; 读入选手最后得分xor ah,ahmov dl,Commentators-2 ; 评委人数 -2div dl ;AL

23、= 商数,AH=数mov bl,ahor al,30hmov ah,0ehint 10h ; 显示平均得分商数mov ah,0ehmov al,.int 10h ; 显示小数点mov al,blmov bl,10mul bldiv dlor al,30hmov ah,0ehint 10h ; 显示平均得分小数mov ax,0e0dhint 10hmov al,0ahint 10hpop siinc siinc si ; 下一个链表节点地址pop cxloop ContestantExit_Proc: Output Press_Key ; 提示操作完成,按任意键结束程序mov ah,1int 21hmov ah,4ch ; 结束程序int 21hBuffer: ; 数据缓冲区Code ENDSEND Start ; 编译到此结束

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!