比赛评分系统设计_第1页
比赛评分系统设计_第2页
比赛评分系统设计_第3页
比赛评分系统设计_第4页
比赛评分系统设计_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

武汉理工大学 微机原理与接口技术 课程设计说明书 目 录 摘 要 1 1 概述 2 1 1 任务要求 2 1 2 编程环境 2 2 分析 3 2 1 程序功能 3 2 2 设计思路 3 3 程序流程图 4 3 1 主程序流程图 4 3 2 子程序流程图 5 4 程序调试 8 5 心得与体会 9 参考文献 11 武汉理工大学 微机原理与接口技术 课程设计说明书 1 摘 要 用汇编语言编写程序能够直接利用硬件系统的特性直接对位 字节或字寄存器 存 储单元 I O 端口进行处理 同时也能直接使 CPU 指令系统和指令系统提供的各种寻址 方式编出高质量的程序 汇编程序是最早也是最成熟的一种系统软件 能够将汇编语言 源程序翻译成机器语言程序 可以自动对源程序进行检查给出错误信息等 本说明书主 要介绍了用汇编语言编写程序计算比赛成绩的设计思路和编程流程图 以及调试程序时 的心得与体会 关键词 汇编 流程 武汉理工大学 微机原理与接口技术 课程设计说明书 2 比赛评分系统程序设计 1 概述 1 1 任务要求 比赛选手人数控制在 30 以下 9 个评委 每个评委给分范围为 0 10 分 整数 随机给出分数 9 个评委的给分中 去掉一个最高分和一个最低分 余下 7 位评委的平均分即为 参加者的得分 精确到小数点后一位 将分数在屏幕中间位置处用红色显示出来 将参加比赛的选手的排名顺序显示出来 1 2 编程环境 把汇编语言翻译成机器语言的过程称为汇编 为了实现这一过程正确运行汇编语言 系统需具备以下编辑程序 Masm exe Link exe Debug exe Masm 为宏汇编程序 负责对源文件进行汇编 link 为连接程序 把汇编后产生的目 标模块连接在一起 产生可执行文件 debug 是调试程序 它是调试汇编语言程序必不可 少的工具 武汉理工大学 微机原理与接口技术 课程设计说明书 3 2 分析 根据设计任务书分析得出程序要求具备的功能 进而写出自己的设计思路 2 1 程序功能 根据设计任务要求可以得出所涉及程序必须具有以下功能 1 显示选手序号 2 显示 9 个评委的评分 3 用红色字体显示每位选手的平均分 4 根据选手平均得分排序 本程序按照分数由高到低排列 2 2 设计思路 主要采用循环结构和子程序调用的基本结构形式 编写程序产生 9 个 0 10 的随机数 找出这 9 个数中的最大和最小的数 即评委给出的最高分和最低分 分别保存 再对这 9 个数求和 减去前面保存的最大数和最小数 所得的值除以 7 即为选手的 平均分 分别保存整数部分和小数部分 保存该分数并在屏幕中间用红色显示出来 以 上过程循环 30 次 然后根据平均分的高低对选手进行排序并调用 BIOS 功能使平均分为 红色显示 为了使程序方便阅读和修改 减少编程工作量 节省存储空间 并易于实现程序的 模块化 在编写程序的时候尽可能的把一些具有特定功能的程序段独立出来编写成可以 被其他程序多次调用的子程序 然后在主程序需要的地方调用 汇编程序中的 CALL 和 RET 指令就是完成子程序调用和返回功能的 有了以上基本的设计思路 便可以着手准备开始编写流程图 然后再查阅相关资料 巩固关于汇编语言指令系统以及寻址方式的知识和使用技巧 复习调试程序的方法以及 常见问题的解决办法等等 武汉理工大学 微机原理与接口技术 课程设计说明书 4 3 程序流程图 流程图是算法的图形描述 它以图形的方式把解决问题的先后次序和程序的逻辑结 构直观地 形象地描述出来 使得编程的思路清晰 有利于编制 调试程序 3 1 主程序流程图 大于等于 30 次 图 3 1 主程序流程图 为了使程序简洁明了和易于调试查错 因此把流程图分成了几个部分 主程序的流 开始 除以 11 产生 9 个 0 10 的随机整数 保存 找出 9 个随机数中的最大值和最小值 9 个数相加减去最大值 最小值 除以 7 得平均分 保存 控制循环 30 次 从 40H 端口读入一个随机数 将各选手按照平均分降序排列 显示选手序号 9 个评委的评分和红色字体的平均分 结束 小于 30 次 武汉理工大学 微机原理与接口技术 课程设计说明书 5 程图如上图 3 1 所示 由流程图中可以看出程序的主要设计思路和整体框架 3 2 子程序流程图 对于一些具有特殊功能的程序可以编制成子程序 通过调用来实现功能 这样有利 于程序的读和写 也易于查错 因此本题将显示指定字符串 显示十进制 ASCII 码 查 找最高分最低分的过程编写成子程序以供调用 方便简洁明了 可以更快地确定编程的 方向和目的 找出解决问题的最佳途径 由于显示指定字符串 显示十进制 ASCII 码涉 及 DOS 功能调用 指令简单 为汇编者所熟记的知识 可以不用流程图再次赘述 查找 最高分最低分的流程图如图 3 2 所示 从图中可以看出 找出最高分的方法和查找最低分 的方法类似 只需更改其中的个别指令 即可达到目的 图 3 2 查找最高分和最低分程序流程图 将各个选手按照所得的平均分排序的程序流程图如图 3 3 所示 由于参赛选手的人数 不多 采用冒泡法排序可以达到快速 准确的效果 数据的排序采用冒泡法降序排列 将其两两比较 前一个数较大 则不改变原位置 开始 取出一个数 与下一个数作比较 大于等于 不变替换 保存该数为最高分 结束 Y N 开始 取出一个数 与下一个数作比较与下一个数作比较 小于等于 与下一个数作比较 大于等于 与下一个数作比较 YN 不变 N 替换不变 N 替换不变 N 保存该数为最高分保存该数为最高分 结束 保存该数为最高分 武汉理工大学 微机原理与接口技术 课程设计说明书 6 否则两数交换 一次将全部数据排序 排序的次数由需要排序的数据个数决定 这种排 序方法是从最低部的元素开始进行比较 较小的元素将会像气泡一样往上冒 在排序的过程中 外循环遍历要排序的元素 内循环用于挑选出最值 内循环用于 将相邻的两个元素进行比较 将小的元素调到大元素的前头 内循环的循环次数表示相 邻元素的交换趟数 此外 在整个程序中 除了这三个主要环节 还需要编写子程序用于显示字符串 产生随机数等等 这些模块的编程思路比较直观 所以在流程图中没有着重表明 图 3 3 将平均成绩排序的流程图 有了编写汇编语言计算比赛成绩的思路和流程图之后 通过查找一些不常见的指令 和查阅相关的参考资料 就可以编写出初步的源程序 开始 比较相邻两个数的大小 前一个数大 顺序不变顺序交换 循环 29 次 YN 保存结果并显示 结束 小于 29 大于等于 29 武汉理工大学 微机原理与接口技术 课程设计说明书 7 4 程序调试 经过调试程序 得出 随机给出选手得分的运行 的结果如图4 1 所示 武汉理工大学 微机原理与接口技术 课程设计说明书 8 图 4 1 随机给出的选手得分 最终排名和选手所得的分数如图 4 2 所示 图中给出了 24 位选手的成绩和排名 排 名顺序为从高分到低分 最后一列为各个选手所得的平均分 用红色显示 图 4 2 选手排名顺序 5 心得与体会 在本次比赛评分系统程序的设计过程中 本小组各成员积极配合想算法 分工协作 写程序 历经百般波折 通过几个昼夜的艰苦奋战 终于在我们几近绝望的最后关头突 然跳出来一个窗口 程序运行成功了 大家手舞足蹈 欢欣雀跃 总算努力没有白费 武汉理工大学 微机原理与接口技术 课程设计说明书 9 俗话说得好 坚持 就意味着一切 本次微机原理课程设计感受颇深 受益匪浅 由于初学汇编语言 再加上平时的习题都很简单而且要求不高 所以在看到题目的 时候 一开始有些傻眼不知从何着手 仔细看了看想了想查了查资料后发现把问题分块 处理 各个击破 最后再拧成一股绳 问题貌似就变得简单很多 主要是如何拧成一股 绳 从何处开始拧 也就是如何把各个子程序在何处调用才能实现功能 这个问题确实 需要大动脑筋才能确保最后的结果和设计要求相符 第一次上机用汇编编写程序 第一 次接触用汇编语言程序产生随机数 第一次尝试着编写子程序 也是第一次听说还有 BIOS 功能调用 万事开头难 但总要开个头 第一天没着落 就想啊 查资料 通过小组成员讨论 后决定各成员分工合作 每人负责一个功能 最后一起合成调试 然后各自就开始努力 的工作了 先是根据要求把可能用到的书中的知识复习巩固了一遍 然后对准问题查阅 相关资料 遇到相似的问题就借鉴过来 再根据实际问题需要编写自己的程序 就这样 一步步按照流程做了下来 途中遇到了诸多问题 但是问题必须解决才能继续往下写 虽然好些天疲于奔命于图书馆 书店 但是有压力就有动力 逐渐的问题变得越来越少 编写程序过程中 开始是一塌糊涂 对一些伪指令和 DOS 功能调用方便掌握不牢固 编写起程序来很不灵活 经过查阅资料和询问同学 在边摸索边实践的过程中 我体会 到了编写程序不仅需要广泛深入的知识面 还需要灵活的头脑和严密的逻辑思维 稍有 考虑不到的方面 程序就会 没有生成 OBJ 文件 循序渐进的 我终于编写出了我脑子里所想的初步程序 但输入到 MF2KP 集成开发 环境中运行时 一开始的热情瞬间就没了 程序无法编译 不能生成 obj 文件 想了许久 明白了一点 编写程序最主要的其实不是在于如何编写而是成百上千次甚至上万次的不 断调试 于是 我开始了调试程序这复杂而又极其漫长的过程 最终在小组成员共同的努力下 我们成功了 一股成就感袭上心头 各个都笑了 也松了口气 回头想想 不仅巩固了所学知识 而且锻炼我们理论结合实际的能力和团 队合作能力 同时也发现了些许不足 我敢肯定的是这次发现的问题被牢牢记住了 还 起了个加深记忆的作用 通过本次课设我发现 定义的变量是可以直接用 inc dec 的 即对其内容值加 1 减 1 但是要注意 虽然变量可以看成符号地址 不过此处只是把它 们的数据内容加 1 或减 1 而非对其地址 之前我以为不能直接对定义好的变量用 武汉理工大学 微机原理与接口技术 课程设计说明书 10 inc dec 使用十六进制数时 若第一个数位值是字母 要在在其前加 0 否则会被认为 是变量 寄存器 变量之间传递值时 位数要一致 使用 push 后记得相应地使用 pop 还要注意二者应反序 即 push ax push bx push cx 与 pop cx pop bx pop ax 相对应 在子过程中的 ret 处之前应放上相应地放上 pop 语句 而子过程的入口处应相应放上 push 语句 要养成良好的程序书写习惯 比如标号对齐 参数对齐 注释对齐 这样看 起来赏心悦目 也不容易出错 也易于排错修改 标号最好采用有意义的英文 这样比 较直观 注释尽量详细准确 便于阅读 而且有利于其它程序中作为子程序模块的调用 还有要注意典型程序模块的积累 再复杂的程序也是由一个个小程序模块组成的 这些问题是这次课程设计体会比较深刻的几个方面 总而言之 通过本次比赛评分系统程序的设计 不仅巩固了所学汇编知识 而且在 知识的广面和深面上有了相当程度的拓展 几个枯燥的字母被我们这一折腾竟然变得有 了活力 使我感觉到汇编强大的魔力 编程就像日常生活一样 是个不断探索和发现的 过程 途中必然会遇到困难 前面出现坎儿 是因为对面就是平原 编程序要知道 坚 持 就意味着一切 参考文献 1 沈美明 温冬蝉 IBM PC 汇编语言程序设计 第 2 版 清华大学出版社 2001 2 沈美明 温冬蝉 IBM PC 汇编语言程序设计例题习题集 清华大学出版社 1991 3 陆忠华 汇编语言程序设计 科学出版社 1993 4 迟成文 王保秀 汇编语言程序设计 中国科学技术大学出版社 1993 5 徐建民 汇编语言程序设计 电子工业出版社 2005 年 6 彭虎 周培玲 傅忠谦 微机原理与接口技术 第 2 版 电子工业出版社 2008 武汉理工大学 微机原理与接口技术 课程设计说明书 11 附录 Code Segment Assume CS Code DS Code 功能 显示指定地址 Str Addr 的字符串 入口 Str Addr 字符串地址 要求在数据段 用法 Output Str Addr 用法举例 Output PromptStr Output MACRO Str Addr 武汉理工大学 微机原理与接口技术 课程设计说明书 12 push ax lea dx Str Addr mov ah 9 int 21h pop ax EndM 功能 把 AX 中的二进制无符号数转换成显式的十进制 ASCII 码 并送显示屏显示 入口 AX 二进制数 出口 在当前光标位置显示转换后的 ASCII 码数字 Dec ASCII Proc Near mov dh 10 div dh or ax 3030h 将两位十进制数转换成 ASCII 码 cmp al 30h ja 4 mov al 20h 若十位数是 0 以空格代替 push ax mov ah 0eh int 10h 显示十位数 pop ax xchg ah al mov ah 0eh int 10h 显示个位数 ret Dec ASCII EndP Commentators equ 9 评委人数 Contestants equ 23 参赛选手人数 Press Key db 0ah 0dh The complated Press any key to exit Start mov di 64 显示缓冲区偏移地址 mov ax 0b800h 显示缓冲区段地址 mov es ax mov al 20h 武汉理工大学 微机原理与接口技术 课程设计说明书 13 mov ah 4 字符颜色 红色 mov cx Contestants 参赛选手人数 cld Line push cx mov cx 3 rep stosw add di 154 显示缓冲区下一行同列偏移地址 pop cx loop Line push cs pop ds 使数据段与代码段同段 push cs pop es 使附加段与代码段同段 评委随机打分 cld lea si Buffer 数据缓冲区地址 选手成绩链表 mov di si add di Contestants 2 选手成绩存放地址 mov cx Contestants 参赛选手人数 mov dl 11 除数 Grade 0 push cx mov si di 选手成绩地址 inc si inc si 下一个链表节点地址 mov ax Contestants 1 sub ax cx 选手序号 stosb 保存选手序号 xor bx bx BH 最高分初值 BL 最低分初值 xor dh dh 选手总分初值 mov cx Commentators 评委人数 Grade 1 xor al al out 43h al in al 40h 武汉理工大学 微机原理与接口技术 课程设计说明书 14 xor ah ah div dl xchg ah al 舍弃商数 取余数 作为某评委的打分 stosb 保存一个评委打分 add dh al 累计评委打分 cmp bh al jae 4 最高分 此评委打分 mov bh al 保存新的最高分 cmp bl al jbe 4 最低分 此评委打分 mov bl al 保存新的最低分 loop Grade 1 mov al dh sub al bh 减去一个最高分 sub al bl 减去一个最低分 stosb 保存最后得分 pop cx loop Grade 0 用冒泡排序法对选手最后得分降序排序 lea si Buffer 选手成绩链表地址 mov cx Contestants 参赛选手人数 dec cx 外循环次数 Sorting push cx 入栈保存外循环次数 push si 入栈保存数组地址 Compare push si pop di 当前数组元素地址赋给目的变址寄存器 以备交换之用 lodsw 将当前数组元素读入累加器 mov bx ax mov al bx 10 将当前最后得分读入累加器 AL mov bx si 相邻的下一个选手信息地址 cmp al bx 10 当前选手最后得分与相邻的下一个选手最后得分相比较 jae NextOne 若大于或等于 不作数据交换 处理下一个数组元素 mov ax di 若小于 读入当前选手信息链表节点 武汉理工大学 微机原理与接口技术 课程设计说明书 15 xchg ax si 交换链表元素 mov di ax 保存数值较大者节点地址 NextOne loop Compare 处理下一个数组元素 pop si 数组地址出栈 pop cx 外循环次数出栈 loop Sorting 下一趟比较 按总成绩降序显示所有选手各评委打分 平均得分 mov cx Contestants 参

温馨提示

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

评论

0/150

提交评论