基于汇编语言的贪吃蛇程序

摘要

在我们空闲的时候,我们可以用一些我们学过的知识编一些东西,通过这些东西我们可以学习到汇编语言综合应用程序设计方法,还可以提高汇编语言实际应用能力,充分了解计算机硬件和软件,完成理论到实践的推进过程。这个程序就是用我所学过的汇编知识编的一个小游戏,这个游戏的程序主要就是用汇编宏和子程序的知识来编制而成的,我们用宏和子程序定义了很多的模块,模块也就是在我们的程序中直接可以调用的一个独立的程序。所以我们编写程序的时候可以很方便的用到它,所以那些基础知识也是我们编写程序的基础。

关键词 : 宏定义,子程序,汇编,宏调用,主程序。

一、背景分析及意义

现在有的一些人感觉生活都是很无聊的,特别是我们这些学生,所以有些时候肯定会玩各种各样的游戏的,有一些大的游戏,玩起来会话掉很多的时间,而且也会花掉大量精力的 ,所以在一些闲暇的时候一些小游戏会博得很多人的喜爱,例如:俄罗斯方块,和一些格斗游戏等等。然而这些小游戏的设计方法和软件有很多,所以也有很多不同的效果,本篇设计是采用汇编中宏定义和调用,子程序的调用等一些汇编知识编制而成的一个贪吃蛇小游戏,通过这个小游戏的制作,我们可以得到很多的益处,一方面我们可以不在浪费平时的一些空闲的时间了,而热中于我们自己喜欢的游戏;另一个方面我们制作完游戏还可以给自己或者别人来享受一下,同时自己也会有一种成就感。特别当你用自己学到的知识制作出一个东西的时候,或者克服一个困难的时候你就会发现你自己的价值所在了,而且这还能促进你喜欢学习的念头。

二、总体设计思想

这个程序的总体的思想也就是主要用的就是宏和子程序的定义和调用,首先,定义了5个宏它们分别为:

  • 屏幕初始化宏定义
  • 在光标位置显示字符和属性定义
  • 显示字符串宏定义
  • 置光标位置宏定义
  • 读光标位置的字符和属性宏定义

它们在程序中起到主要的作用。其次,就是子程序定义了,程序中定义了很多的子程序,其中有:①控制子程序 ②食物子程序,还有记分子程序等。它们首先被主程序调用,然后它们之间再互相调用,这样构成了完整的游戏程序并实现其功能。具体的设计思想是:第一,对数据进行初始化,即对寄存器的初始化,比如对食物的初始化等。第二,开始运行,判断是否符合条件,如果符合赢的条件的话,就会跳转到赢的那个子程序下,然后那个赢的子程序会调用记分的那个子程序,最后显示赢的信息和分数后再转到控制程序执行控制和其后的程序。如果要是输的话,就会跳转到输的那个子程序下,然后那个输的子程序也会调用记分的那个子程序,最后显示得分和信息。如果要是没有赢也没有输的话,那程序会跳到控制的子程序中,等控制完以后程序又会跳到程序判断的那个地方重复的执行。这个就是完成这个游戏程序的整个思想。

三、完成的主要功能

这个程序完成的功能就是和别的游戏一样,最初,给出一个初始化的界面,和一个红的小心,我们要把那个最初给出那个小链条穿过那个饿小红心,然后那个红心就会变成我们那个小链条上的组成单元一样的一个小黄圆,和在别的地方会在出现另一个小红心,我们接下来要做的就是要把那个小黄圆穿过来,然后我们那个小链条就会变长了,然后在穿过小红心,就这样重复的做就行了,随着你的穿过你的小链条就会越来越长了,这是你的得分就会越高,同时你难度也会变大的,因为如果你要碰到四周的变的话,或者你自己的那个小链条首尾要是相连的话你就会输了,所以当你那个小链条很长的时候,难度自然就会变大了。

四、软硬件环境要求

本程序适合于Windows操作系统,使用的是MASM5.0版本的工具和一台联想计算机。

五、程序流程图

动画贪吃蛇程序的流程图如图1所示。

六、使用说明

  • 汇编过程
    • 把源程序汇编成*.OBJ文件。方法是:在DOS环境中找到*.ASM的目标文件,然后输入MASM * .ASM,然后按回车就可以生成目标文件.OBJ了。
    • 再输入LINK .OBJ,在按回车就可以得到可执行文件*.EXE了。
  • 运行程序
    在我们用的软件MASM的目录下,我们可以找到*.EXE文件,双击就可以打开了。再有就是在DOS的环境下,在*.EXE的文件所在的位置,直接输入*.EXE的文件名就可以了,比如说,如果我们的*.EXE文件在C:\ MASM\下,我们就可以在DOS环境下在C:\ MASM\后直接输入*.EXE的文件名,即*就可以了。
  • 玩游戏
    我们通过键盘的上下左右键来控制里面我们的那个小链条的,即键盘上的键,只需要这四个键就可以了。

设计总结

这个 小游戏程序主要用的技术包括三个方面:第一个方面就是宏的定义及调用,这个程序当中多次用到宏汇编。这不仅减少了程序的开销,而且还减少了程序运行的时间和一些存储空间。第二个方面就是子程序的调用,这个程序中也有多处用到CALL的调用。使用子程序不仅可以提供模块化程序设计的条件,而且便于程序的调试及修改等。第三个方面就是其中的一些跳转的问题,这个用起来有点麻烦,但是这个用起来比较方便,所以文中很多很多的地方都用到这个跳转。比如:JMP,JNC,JC等。

在这个游戏的设计中,其实也遇到很多的困难,比如说一些寄存器使用冲突的问题 ,还有一些是宏的使用问题和当中跳转的问题等。

经过这一个小游戏程序的设计,我也深刻体会到这个汇编程序设计的意义所在了,原本在课堂上学的东西自己现在把它运用到现时的生活中的一些小的问题上,那种感觉和意义是无法用言语表达的, 在这个过程当中我也知道了汇编这门课程的重要性了。

参考文献

[1] IBM-PC 汇编语言程序设计 沈美明等 清华大学出版社
[2] 8086/8088宏汇编语言程序设计教程 第二版 王正智/编 电子工业出版社
[3] 80X86汇编语言程序设计教程 杨季文/等编 清华大学出版社

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/472151.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt文件目录操作

文件目录操作相关类 Qt 为文件和目录操作提供了一些类,利用这些类可以方便地实现一些操作。Qt 提供的与文件和目录操作相关的类包括以下几个: QCoreApplication:用于提取应用程序路径,程序名等文件信息;QFile&#x…

2024 CCF中国开源大会“开源科学计算与系统建模openSCS”分论坛成功举办

11月9日,2024 中国计算机学会(CCF)中国开源大会“开源科学计算与系统建模openSCS”分论坛在深圳落下帷幕。本次论坛由开源科学计算与系统建模工作委员会、苏州同元软控信息技术有限公司(简称“同元软控”)、深圳景元数…

基于 PyTorch 从零手搓一个GPT Transformer 对话大模型

一、从零手实现 GPT Transformer 模型架构 近年来,大模型的发展势头迅猛,成为了人工智能领域的研究热点。大模型以其强大的语言理解和生成能力,在自然语言处理、机器翻译、文本生成等多个领域取得了显著的成果。但这些都离不开其背后的核心架…

C++(Day35)

一、学习内容 C绪论 C是C语言的拓充,C包含C的所有属性,换一句话说,C语言的语法在C中都合法。 C语言是面向过程的编程思想。 C语言是面向对象的编程思想。(半面向对象,半面向过程) 可以说在C中一切皆对象。 …

World of Warcraft [WeakAuras]Barney Raid Kit - Collapsing Star Indicator

https://wago.io/BarneyCS 黄色数字表示需要修的血量。 绿色数字表示停止修血。 红色数字表示修血过量,以及该坍缩星将在大爆炸读条结束前多少秒爆炸。 Numbers in yellow means damage required. Numbers in green means HP is good, dont damage anymore. Numbers…

Elasticsearch retrievers 通常与 Elasticsearch 8.16.0 一起正式发布!

作者:来自 Elastic Panagiotis Bailis Elasticsearch 检索器经过了重大改进,现在可供所有人使用。了解其架构和用例。 在这篇博文中,我们将再次深入探讨检索器(retrievers)。我们已经在之前的博文中讨论过它们&#xf…

C++清除所有输出【DEV-C++】所有编辑器通用 | 算法基础NO.1

各位小伙伴们,上一期的保留小数位数教学够用一辈子,有不错的点赞量,可我连一个粉丝铁粉都没有,你愿意做我的第一个铁粉吗?OK废话不多说,开始! 温故与知心 可能你也学过,且是工作者…

麒麟kysec安全

一、kysec安全框架管理 开启kysec getstatus Copy security-switch --set default Copy 重启系统 reboot Copy 刷新页面,等待几分钟,即可完成文件的扫描。 查看kysec状态 getstatus Copy 切换到管理员身份(密码:devuser…

本地 / 网络多绑定用例总结

原文连接:AUTOSAR_EXP_ARAComAPI的7章笔记(4) 情景设定 在前一节的基础上,假设有类似情景,区别在于服务实例 2 位于与 AP 产品相同以太网的不同 ECU 上,服务消费者及其代理驻留在 AP 产品 ECU 上。因以太网…

Android笔记(三十六):封装一个Matrix从顶部/底部对齐的ImageView

背景 ImageView的scaleType默认显示图片是这样,但是有时候设计稿需求希望图片左右能紧贴着ImageView左右边缘,又不破坏图片的比例,用自带的matrix,centerCrop等都可以满足 但是都会造成图片的某些区域被裁剪了,如果设…

什么是项目完整性管理?

项目完整性管理是一种在项目生命周期中确保项目质量、进度、成本、资源等各方面保持一致性与协调性的系统性方法。它不仅涉及项目的规划与执行,还包括对项目中的各项资源、流程、技术的整合和控制,以保障项目的最终交付质量和效果。随着项目复杂性的提升…

【3D Slicer】的小白入门使用指南四

开源解剖影像浏览工具Open Anatomy Browser使用及介绍 和3D slicer米有太大关系,该工具是网页版影像数据的浏览工具(可以简单理解为网页版的3D slicer) 介绍 ● 开放解剖(OA)浏览器是由神经影像分析中心开发的,基于网络浏览器技术构建的图谱查看器。 ● OA浏览器将解剖模…

如何优化Kafka消费者的性能

要优化 Kafka 消费者性能,你可以考虑以下策略: 并行消费:通过增加消费者组中的消费者数量来并行处理更多的消息,从而提升消费速度。 批量消费:配置 fetch.min.bytes 和 fetch.max.wait.ms 参数来控制批量消费的大小和…

论文 | On Second Thought, Let’s Not Think Step by Step!

概述与研究背景 本文探讨了“零样本链式思维”(Zero-shot Chain of Thought, CoT)在大语言模型(LLM)中的应用及其潜在的偏见与有害内容生成风险。论文指出,尽管CoT在多种逻辑推理任务中提高了模型的表现,但…

华为云前台展示公网访问需要购买EIP,EIP流量走向

华为云前台网络(VPC,安全组,EIP) 1.EIP网段是从哪里划分的? 管理员在后台Service_OM已设置 Service_OM-网络资源-外部网络-创建外部网络基本信息:配置参数:*名称 public*网络类型 LOCAL 不带标签 类似开…

4. Spring Cloud Ribbon 实现“负载均衡”的详细配置说明

4. Spring Cloud Ribbon 实现“负载均衡”的详细配置说明 文章目录 4. Spring Cloud Ribbon 实现“负载均衡”的详细配置说明前言1. Ribbon 介绍1.1 LB(Load Balance 负载均衡) 2. Ribbon 原理2.2 Ribbon 机制 3. Spring Cloud Ribbon 实现负载均衡算法-应用实例4. 总结&#x…

apk反编译修改教程系列-----apk应用反编译中AndroidManifest.xml详细代码释义解析 包含各种权限 代码含义【二】

💝💝💝💝在上期博文中解析了一个常规apk中 AndroidManifest.xml的权限以及代码。应粉丝需求。这次解析一个权限较高的apk。这款apk是一个家长管控的应用。需求的各种权限较高。而且通过管控端可以设置控制端的app隐藏与否。 通过博文了解💝💝💝💝 1💝💝…

如何修改npm包

前言 开发中遇到一个问题,配置 Element Plus 自定义主题时,添加了 ElementPlusResolver({ importStyle: "sass" }) 后,控制台出现报错,这是因为 Dart Sass 2.0 不再支持使用 !global 来声明新变量,虽然当前…

神经网络与Transformer详解

一、模型就是一个数学公式 模型可以描述为:给定一组输入数据,经过一系列数学公式计算后,输出n个概率,分别代表该用户对话属于某分类的概率。 图中 a, b 就是模型的参数,a决定斜率,b决定截距。 二、神经网络的公式结构 举例:MNIST包含了70,000张手写数字的图像,其中…

谷歌Gemini发布iOS版App,live语音聊天免费用!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工…