转自我们组队长,我是组内SA(系统分析师)

为期将近一月(11-05公布题目,12-02晚截止提交)的校汇编比赛总算告一段落了,接下来潜心学习嵌入式Linux准备来年找工作。因为本人比较喜欢汇编(目前只学过8086),在上微机原理课的同时,在自学王爽老师的《汇编语言》(第三版),不得不说,这是国人写的很优秀的一本计算机科学系图书,但略有遗憾,我并没有完全学完学懂学会(太贪容易,太浮浅粗疏,太不能深入,太不能耐苦)。在此特将本次比赛做以总结,另外如果能够帮助到想学习的您,那将是我的荣幸(It's my pleasure)。

一、双窗口要求

将显示器的屏幕划分成大小相等的左右两个显示窗口,并画出每个显示窗口的边框,窗口大小适中。 在左边显示窗口,能够运行简单的贪吃蛇游戏,即采用键盘按键控制贪吃蛇前进方向,如“W、S、A、D”键分别为上下左右方向控制按键,以贪吃蛇碰触窗口边框为游戏终止条件,以“R”键为游戏重新开始。若游戏进行当中无键按下,则贪吃蛇保持当前方向不变直至撞墙。 在右边显示窗口,能够画出等边三角形,要求:三角形位置在该显示区域的中部,参数边长由键盘输入确定。每次根据输入的参数,在该窗口将三角形重新绘制出来。 初始工作窗口为左边显示窗口,以后每按一次Tab键切换至旁边显示窗口。当某个显示窗口被选中时,则光标在该窗口底部闪烁,键盘输入对当前窗口有效。整个系统按ESC键退出,返回DOS操作系统界面。

二、前期折腾

题目要求是2018-11-05在我们学院官网公布出来的,当天随机展开了在百度、谷歌(实验室可直接用)、必应等各大搜索引擎上的查阅资料工作。当晚即实现了画点+画线+画矩形+画三角形。随后将三角形部分交给组内成员,自己来完成贪吃蛇的编写。说实话,我确实不是很放心交给别人(这与我的性格有关,不知道是好事还是坏事,不过这里我要向那些曾经不被我信任的人说句抱歉,我自我感觉是比较独裁的,多亏了他们的包容理解),事实证明,我的担忧有些多余。他们不负众望,成功的完成了该任务。下面我主讲我绘制贪吃蛇的辛酸史,三角形方面我看懂后也会聊聊。

  • 我先是借鉴了CSDN上一篇简单绘制贪吃蛇的博客,因为我们的题目要求比较简单,贪吃蛇仅仅能在窗口区域内移动即可,并不需要吃豆子,变长等骚操作。所以具体思路就是:清屏——(设置光标坐标+显示字符)*N。重复此过程(循环)。
  • 现在选取一个方向,让蛇头向那边移动,接着蛇身和蛇尾只要等于上一时刻它前面的那一块就够了,即实现两相邻物块之间的赋值即可。现在的问题是,每次的小尾巴都会残留,因为没有什么可以跟它作交换。怎么办呢?清屏。现在思路变为:画蛇——延时——清屏——画蛇。
  • 现在能让它朝一个方向运行起来了,接下来考虑上下左右方向。蛇怎么知道自己改向哪前进呢?响应按键。先实现按一下它只向前走一步的操作,然后一直按住就可以朝着这个方向一直前进了。那么如何使其运行过程中响应一次按键改变方向继续前进呢?中断!这是个核心操作。参考《汇编语言》(第三版)外中断那一章,将BIOS系统调用为我们所用。在中断服务程序中通过修改各标志位来实现蛇的走向。
  • 接着是怎么让它检测撞墙然后死掉。这里比较简单,只考虑蛇头就可以啦,使蛇头满足横纵坐标在一个范围里,如果出去就宣告死亡。
  • 此时贪吃蛇写的差不多了,队友的三角形也基本OK。然而合并时出现问题。在我的贪吃蛇下,加入三角形时,怎么都无法显示,三角形单独却可以显示。
  • 小组开会讨论后,发现是显示模式的设置出现了纰漏。DOS下显示器有两种显示方式——字符显示(光标)、图形显示(像素点)。并且同时只能取其一。
  • 因此不得不考虑在图形模式重新下绘制贪吃蛇。。。。。

  • 2018-11-16 21:55  开心:能在图形模式下画出绿色小方块,并将小方块写成一个宏来随时方便调用。

  • 然而将宏写的太长,不能多次调用。无奈只好尝试将宏改为子过程,然而不得不说宏传递参数比子过程方便太多。

  • 更改为子程序,通过栈来传递各项参数,修改成功。接下来该考虑怎么让它动起来,初步设想是记录下每个小方块的左上角坐标和右下角坐标,然后模仿着字符模式下画法,进行替换操作。
  • 然而,事有转机。我们的SA来了(哈哈,平常我一个小coder老是欺负SA,不过SA关键时刻还是蛮靠谱的),SA和我一起重新思考了显示模式的问题,我们测试,在字符模式下图形确实是显示不出来,却忽略了一个重要问题——图形模式下能不能显示字符?答案是能。图形模式下可以显示字符! 这意味着我前面的贪吃蛇又起死回生了,那我还画个鬼啊,直接在程序一开始将显示方式设置为图形显示 ,那字符(光标)和图形(像素点)就都可以显示了。至此,图形模式下的贪吃蛇成功夭折!

三、程序设计流程图

  • 总体设计流程图

  • 键盘中断流程图

  • 宏功能描述

  • 子程序流程

                              

  • 三角形部分

四、 写在最后

  • 此外,我们还加入了声音或者叫音乐播放。具体请参考前两篇转载的博文:

  1. 8086汇编实现按键使电脑发声(导睿米法索拉稀)

  2. 汇编实现音乐的播放

  • 运行效果已上传哔哩哔哩,欢迎您随时骚扰:

  1. 汇编语言实现双窗口——贪吃蛇+等边三角形

  • 源代码+运行视频+流程图VISIO均已上传CSDN下载区:

  1. https://download.csdn.net/download/qq_40818798/10823180

  • 男神的话——碰到问题千万不要放弃

  1. 如果一点难度都没有就拿奖证明你的水平已经高于这个比赛了,那么你拿奖是理所应当,并没有值得高兴的

  2. 碰到问题,遇到困难,想办法解决了,获得最后成功才是最快乐的

  3. 过往不恋,当下不乱,未来不惧

  • 天道酬勤,希望每一个真正努力过的人都能有所成就!

  • 博神的话——耐得住寂寞,经得起诱惑,抗得住挫折,记得住教训!

——An ordinary XUPTer.

2018.12.03

最后2018.12.08号为决赛日,我们荣幸拿了一等奖,这次汇编比赛圆满结束

——SA

汇编语言程序设计大赛赛后总结相关推荐

  1. Contest - 第10届“新秀杯”ACM程序设计大赛网络资格赛 赛后信息(题解)

    题目列表:   Problem Id Title   2145 Problem A ACM-ICPC试炼   2151 Problem B 找教室   2152 Problem C 丢失的数列   2 ...

  2. HDU 6114 Chess 【组合数】(2017百度之星程序设计大赛 - 初赛(B))

    Chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  3. Intel汇编语言程序设计学习-第一章 基本概念

    第一章基本概念 1.1  简单介绍 本书着重讲述MS-Windows平台上IA-32(Intel Architecture 32bit,英特尔32位体系架构)兼容微处理器的汇编语言程序设计,可以使用I ...

  4. 3.2 汇编语言程序设计

    3.2 汇编语言程序设计 3.2.1 汇编语言格式 3.2.2 伪指令 3.2.3 顺序程序设计 3.2.4 分支程序设计 3.2.5 循环程序设计 3.2.6 子程序 3.2.1 汇编语言格式 3. ...

  5. hdu6383(2018 “百度之星”程序设计大赛 - 初赛(B))

    p1m2 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Sub ...

  6. hdu6380(2018 “百度之星”程序设计大赛 - 初赛(B))

    degree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total S ...

  7. hdu6375(2018 “百度之星”程序设计大赛 - 初赛(A))

    度度熊学队列 Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total S ...

  8. 2018百度之星程序设计大赛 - 资格赛 hdu6345(找区间最小值)

    子串查询 Time Limit: 3500/3000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Sub ...

  9. nyoj1237 最大岛屿(河南省第八届acm程序设计大赛)

    题目1237 题目信息 执行结果 本题排行 讨论区 最大岛屿 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描写叙述 神奇的海洋.惊险的探险之路,打捞海底宝藏,激烈的海战,海 ...

最新文章

  1. java httpclient访问webservice_java通过HttpClient方式和HttpURLConnection方式调用WebService接口...
  2. C语言插入排序Insertion Sort算法(附完整源码)
  3. linux文件名中文乱码解决
  4. 针对中位数求解的几道题
  5. spring_装配Bean
  6. 广义动量定理之质量m的应用案例分析
  7. 32. Magento log()方法
  8. c语言黑色方块字符,打字符号,一个黑的方块怎么打?
  9. CnOpenData中国工业企业股东信息数据
  10. 数分下第3讲 (8.1节):空间直角坐标系和向量运算
  11. 数据分析——收入下降原因分析
  12. SPSS学习笔记【一】-检验相关性
  13. 【二次元的CSS】—— 用 DIV + CSS3 画咸蛋超人(详解步骤)
  14. 先锋女性与Lazada:面包与玫瑰的东南亚之旅
  15. Java学习06–前端基础之HTML
  16. 硬盘分区格式GPT与MBR无损互相转换而不破坏硬盘存储资料
  17. Codeforces Round #583 (Div. 1 + Div. 2, based on Olympiad of Metropolises)
  18. java 家谱管理系统_家谱管理系统
  19. Cell Stem Cell | 杨东赫等建立全面的人类胚胎心脏多谱系发育图谱
  20. 石墨笔记,Ulysses和Effie哪个更适合学生?

热门文章

  1. 全球首富离婚!曾是名人夫妻楷模 或成史上最贵离婚案例...
  2. 启用Ubuntu 服务器上的 mDNS
  3. anaconda如何与本地python和谐共处
  4. 深度学习梯度下降优化算法(AdaGrad、RMSProp、AdaDelta、Adam)(MXNet)
  5. npm 报错 Class extends value undefined is not a constructor or null
  6. 普中自动下载软件1.86下载程序失败案例
  7. pandas期末复习
  8. 吴恩达深度学习 | (24) 序列模型专项第二周学习笔记
  9. C#中的虚方法的使用个人理解
  10. 判断是否有环以及求环的入口节点。