版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、汇编语言程序设计课程设计报告题 目: 练习打字小游戏 指导老师: 姓 名: 学 号: 专 业: 班 级: 2011年6月28日1设计目的汇编语言是一门面向机器的语言,它是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。由于汇编语言如此的接近计算机硬件,因此,它可以最大限度地发挥计算机硬件的性能。使用汇编语言完成课程设计,能进一步学习汇编语言这门技术,提高编程思想和编程技术。本程序时使用汇编语言,设计一个打字练习小游戏的程序。运行程序时,显示菜单界面。按下Enter键后界面上方出现由26个字母组成的乱序行。这时有字母随即下落。这时候在键盘上敲击该字母,如果字母正确,则这个字母消失,下一个字
2、母开始下落;如果字母不正确,则该字母落下后将失去下方的一个图标,继而产生下一个字母。在程序运行时,按Space键可以暂停程序,按Esc键返回主界面。通过设计本程序,使我们进一步了解汇编程序的编译、连接、执行操作。2详细设计2.1 主模块及子模块说明首先先定义一个清屏幕的宏。调用这个宏,就清除Dos界面上的所有内容,专门显示我们所需要的菜单。接着定义我们的数据段代码。在数据段中,有我们菜单中所需要显示的提示信息,还有要显示在界面上方的字母乱序,以及给显示字母乱序所留出的数据空间。接下来就是定义堆栈段代码,为各段留下空间。再下来就是最重要的代码段,因为所有的功能都是在代码段中实现的。代码段中先实现
3、显示主菜单、按Enter键开始程序这几项简单的功能。接着实现显示字母乱序的功能,主要思想是将字母乱序放到之前定义的寄存器中。然后实现接受键盘所输入的内容的功能。如果输入的是Esc,则返回主菜单;如果输入的是Space,程序就暂停;如果是正确的字母,该字母消失。消失的思想就是在当前字母位置输入空格,然后光标放到下一个下落的字母的位置。以上就是这个程序的总体设计思想。下面给出各部分的解释。(1)clear_screen macro op1,op2,op3,op4这是一个清屏宏定义。op1、 op2是字符显示处的行列坐标,op3、op4是光标所在位置的坐标。(2)data segmentdata e
4、nds这是数据段的代码,其中要定义菜单的内容,界面上方的字母乱序,给字母乱序留出的数据空间,以及字母下落的速度。(3)stack segment para stack stack db 64 dup(0) stack ends这是堆栈段。是为了给代码段和数据段留下空间。此段不定义也能通过编译,只是在连接的时候会有一个警告,但是也能正确地运行程序。(4)code segmentmain proc far assume cs:code,ds:data,ss:stackmain endpcode ends这里是代码段,是最重要的部分。整个程序功能的实现全依仗于代码段。先声明一个主过程,过程的类型是F
5、AR类型,因为要用到段间调用。然后将代码段、数据段、堆栈段放入到相应的寄存器。接下来就是对所有功能的定义。2.2主模块流程图 程序开始显示菜单键盘输入选择速度提示页面E退出Esc返回主菜单Enter游戏开始字母显示字母下落暂停处理退出处理2.3我所负责模块详细设计(1)clr macro op1,op2,op3,op4,op5,op6。mov cx,00h mov dh,op1 mov dl,op2 op6: mov ah,02h mov bh,00h int 10h push cx mov ah,0ah mov al,op3 mov bh,00h mov cx,01h int 10h pop
6、 cx inc cx inc op4 cmp cx,op5 jne op6 endm这是一个宏定义。op1、 op2是字符显示处的行列坐标,op3、op4是光标所在位置的坐标,op5是循环的次数,op6是四周的标志。(2)clear_screen macro op1,op2,op3,op4 mov ah,06h mov al,00h mov bh,07h mov ch,op1 mov cl,op2 mov dh,op3 mov dl,op4 int 10h mov ah,02h mov bh,00h mov dh,00h mov dl,00h int 10h endm这是清屏宏定义(3)men
7、u macro op1,op2,op3 mov ah,02h mov bh,00h mov dh,op1 mov dl,op2 int 10h mov ah,09h lea dx,op3 int 21h endm这是菜单宏定义(4)data segment forth db Made by forth$ no db NO.:4$ meg db Let us have a game!Come on!$ meg1 db *Select Menu*$ meg2 dbPlease select the game speed,ESC to quit.$ meg3 db 1.Very slow Too e
8、asy,speed up!$ meg4 db 2.Slow Everybody can deal.$ meg5 db 3.Nomal I think you can deal!$ meg6 db 4.Fast A challenge.Pay attention!$ meg7 db 5.Very Fast Too hard,Have a try?$ meg8 db6.Fastest Are you crazy?$ meg9 db *Select the number among 1-6 and press ENTER to start!*$ meg10 db Game Speed Select:
9、$ hotkey db When you are playing games:$ hotkey1 db ESC to return to menu$ hotkey2 db SPACE to pause the game$ hotkey3dbE to exit$hotkey4 db Press any key to play games.$ hotkey5 db Are you ready?$ failmeg db The letter is arrive the bottom, You are lost ! :($ failmeg0 db Press ENTER to go on.$ fail
10、meg1 db Game is over!$ failmeg2 db Press ENTER to return menu and press ESC to return!$ failmeg3 db Bye-Bye!Thank for your playing!$ failmeg4 db Press any key to quit.$ speed dw 00d,5000d,4000d,3000d,2000d,1000d,500d letters db jwmilzoeucgpravskntxhdyqfb db iytpkwnxlsvxrmofzhgaebudjq db nwimzoexrphy
11、sfqtvdcgljukda letters_bak db jwmilzoeucgpravskntxhdyqfb db iytpkwnxlsvxrmofzhgaebudjq db nwimzoexrphysfqtvdcgljukda letter_counter db 0 life_flag db 78 dup(0) position_flag db 78 dup(0) present_position db 1 data ends这部分是对菜单各部分项的显示的定义,以方便后续工作中,各提示语句的调用 (4)start: mov ax,data mov ds,ax mov letter_cou
12、nter,00h ;记录正确集中字符数mov present_position,1 ;记录当前光标的列数lea si,position_flag ;每个字符是否下落过mov ah,00h mov cx,00h init_postion_flag: ;初始化每个字符都未落下过mov si,ah inc si inc cx cmp cx,78d jne init_postion_flag ;结束lea di,letters ;将letters_bak中的字符转入letters中lea si,letters_bak mov cx,00h init_letters: mov ah,si mov di,
13、ah inc si inc di inc cx cmp cx,78d jne init_letters ;到此结束 mov ah,00h lea si,life_flag mov cx,00h init_life_flag: ;life_flag全置零mov si,ah inc si inc cx cmp cx,78d jne init_life_flag ;结束mov cx,00h mov ah,01h or ch,00010000b int 10h clear_screen 00d,00d,24d,79d Init_game 00d,00d,0ah,dl,80d,nextsign1 Ini
14、t_game 24d,00d,0ah,dl,80d,nextsign2 Init_game 00d,00d,0ah,dh,25d,nextsign3 Init_game 00d,79d,0ah,dh,25d,nextsign4 menu 01d,15d,meg ;菜单信息的宏展开 menu 01h,61d,forth menu 03d,20d,meg1 menu 03d,68d,no menu 05d,15d,meg2 menu 07d,15d,meg3 menu 09d,15d,meg4 menu 11d,15d,meg5 menu 13d,15d,meg6 menu 15d,15d,meg
15、7 menu 17d,15d,meg8 menu 19d,15d,meg9 menu 22d,15d,meg10这段就是我所负责的代码段的功能实现部分,主要定义的是清屏宏、菜单宏、提示信息的定义、字符的初始化以及前期的菜单宏的展开,以及部分计数等功能。本段主要的设计思想如下:关于数据段定义。变量menu是显示的菜单,它采用的是DB伪指令,后面跟的是字节常量。变量speed的作用是控制字母下落的速度,这里用的是DW伪指令,其数值是十进制的2000。变量letters是界面上方的字母乱序,也是用DB伪指令,将字母赋给它。letter_counter是判断字母个数的变量,先给它赋初值0,与字母的个数
16、进行比较,之后要让这个变量进行自增运算,直到将所有字母显示在界面中。life_flag定义的是字母空间,这里定义的是78,也就是letters的个数。position_flag是光标位置标志,这个光标是从界面上方的字母中产生的,所以也赋值为78。present_position定义的是当前位置。之后结束数据段的定义。数据段的流程图如图2-1。数据段开始菜单信息的定义下落速度定义显示字母的定义字母的个数、位置标签、当前位置等参数的定义数据段定义结束图2-1 数据段流程图3运行界面分析在编译器中通过编译、连接、运行后,进入游戏初始界面,如图3-1所示。图3-1 游戏初始界面选择速度后,进入到等待界面图3-2 等待界面4心得体会刚拿到这个题目觉得特别难,感觉无从下手。在做准备工作的时候,我从网上找到了相关的代码,照着别人的步骤感受汇编语言编写程序的思路。很多地方都不是太明白,但是通过查询课本以及上网找相关资料,还是把一些内容理解了。在编写的时候,我也是按照别人的思路,一步一步进行。很多地方看似简单,但是等到自己亲自实践的时候就编的很复杂。汇编语言的前后联系非常紧密,我们这个课程设计更是这样,要和小组的其它成员所负责的设计部分紧密联系在一起。任何一个人要改一点东西的话整个程序的很多地方都要重新做,可以说是牵一发而动全身。所以在编写的时候要很
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重晶石开采劳务合同(2026版)
- 2023年6月卫生资格考试呼吸内科肺脓肿预防历年真题及答案
- 双鸭山友谊县招聘公益性岗位笔试真题2025
- 环县高中学校选调专任教师笔试真题2025
- 社群基础及运营 23
- 2026 年夜班轮转护士安全带教与风险提示
- 2026 年初中秋季开学第一课班级集体荣誉感培育主题
- 造纸厂环保制度
- 2025-2026学年广东省深圳市宝安区某中学初中部七年级(下)期中英语试卷(含答案)
- 某造船厂员工激励细则
- 2026年医保经办管护综合岗事业单位招聘考试笔试试题(含答案)
- 2026年新上岗护士测试题及答案
- 沪粤版八年级物理上册期末考试卷及答案解析(100分版)
- 2025四川九洲电器集团有限责任公司招聘光电系统总体工程师(校招)等岗位测试笔试历年参考题库附带答案详解
- 2025江苏南京栖霞区中考一模数学试卷及答案
- 广西卫生职业技术学院招聘考试真题2025
- 《电气控制与S7-1200PLC应用》课件 第6章S7-1200 PLC程序块
- 2026镇江市护士招聘考试题及答案
- 钢结构更换构件施工工艺流程
- 2026年河南省安阳市重点学校初一新生入学分班考试试题及答案
- 医疗器械设计转换管理手册
评论
0/150
提交评论