汇编课程设计打字游戏

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(2)游戏设置
模块名:GameSetting
模块描述:此模块可以通过键盘输入,进行打字游戏的游戏速度的设置。
(3)产生随机字母函数的子程序
模块名:Randchar
模块描述:通过读时钟计数器值,产生随机数,通过清除高六位,再除26得到的余数存放在BX中作为随机出现的字母。
(4)子程序,产生字母出现的随机位置
_________________________________________
_________________________________________
_________________________________________
_________________________________________
initWindow 0,3EH,0,0,24,4FH;宏调用
MENU:
setCurPos 2,2,0
showString Linec
setCurPos 4,10,0;设置主菜单光标位置
showString GameMenu
setCurPos 8,10,0
showString GameMenu[12]
DB0dh,0ah,'Press any kick to exit the game!','$'
AFTERDB'H','$'
DATA_SEGENDS
STACK_SEGSEGMENTSTACK;堆栈段定义
STACK_BUFDW120DUP(?)
TOPEQU$-STACK_BUF
STACK_SEGENDS
打字游戏
菜单包括:开始,游戏速度设置,退出。
使之提供以下功能:
1、显示菜单
2、通过开始游戏,进行打字游戏
3、游戏速度设置(分为快速,慢速,中速)
4、游戏成绩统计(总共出现字母数,打错的字母数)
5、退出
二、总体设计
功能结构图设计
依据程序的功能需求,描述该系统功能的结构图如下:
图1系统功能结构图
模块简介
2、子过程的算法设计
(1)Gameplay(2)GameSetting
该过程的程序流程图如图所示。该过程的程序流程图如图所示。
(3)GameExit(4)Randchar 和RandNum
该过程的程序流程图如图所示。过程的程序流程图如图所示。
(5)INT_1CH子程序,新1CH中断处理。(6)ShowNum显示数字和ShowOne显示一个数字
INT 10H
POPAX
ENDM
initWindow MACRO A,B,C1,C2,D1,D2;初始化窗口或窗口内容向上卷动,也可以用于清屏
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVAH,6
MOVAL,A;上卷行数
MOVBH,B;卷入行属性(颜色)
MOVCH,C1;左上角行号
MOVCL,C2;左上角列号
CODE_SEGSEGMENT;程序代码区
ASSUMECS:CODE_SEG,DS:DATA_SEG,SS:STACK_SEG
MAIN PROC FAR
START:
MOVAX,STACK_SEG
MOVSS,AX
MOVSP,TOP
MOVAX,DATA_SEG
MOVDS,AX
BEGIN:
initShowModel 0
依据程序的功能模块的划分,各模块定义如下:
(1)游戏
模块名:GamePlay
模块描述:调用Randchar和RandNum实现确定随机字母和随机字母出现位置的情况。然后取1CH中断号的入口地址,出口参数:ES:BX。再设置中断向量表,AH中断号为1CH。使出现的随机字母在某一随机位置延时一段时间,然后清除这个字符,然后在下一位置显示这个字符,再延时一段时间,最终出现字母在下落的视觉效果。
DB'Start',0dh,0ah,'$'
DB'Setting',0dh,0ah,'$'
DB'Quit',0dh,0ah,'$'
KickDB?
XDB?
YDB?
ErrorMsgDB'Error!',0dh,0ah,'$'
EXITMsgDB' You really want to exit,enter Y to exit,and N to continue! (Y/N)',0dh,0ah,'$'
附录:程序主要代码
;程序中要用到的一些宏指令及其说明
getChar MACRO char;调用1号功能,接收一个字符,将字符放在char里
PUSHAX
MOVAH,1
INT 21H
MOVchar,AL
POPAX
ENDM
showChar MACRO char;调用2号功能显示字符
PUSHAX
PUSHDX
四、编码和测试
1、程序运行结果主界面如图所示。
2、在主菜单下选项Setting项,则出现如图所示模块界面。测试实例如图。
3、键盘输入H(h)将游戏速度设置为快速
4、键盘输入其他字符(除H,h,S,s),自动将游戏速度设置为NORMAL
5、游戏界面
6、按Esc,统计游戏信息界面
7、选择Quit,如图所示。
PUSHAX
PUSHBX
PUSHDX
MOVAH,3;读光标位置
MOVBH,0
INT 10H
MOVM,DH
MOVN,DL
POPDX
POPBX
POPAX
ENDM
initShowModel MACRO A;初始化显示模式
PUSHAX
MOVAH,0;用来设定显示模式的服务程序
MOVAL,A;AL寄存器表示欲设定的模式:
华北科技学院
课程设计说明书
专 业:网络工程
课程名称:汇编课程设计班级:网络B091
姓名:张学号:200907024124
设计题目:打字游戏
设计时间:2011-12-05至2011-12-16
评语: ________________________________
_________________________________________
SpeedDB'N'
SpeedNumDW3
SpeedSetMsgDB'Input the speed value:',0dh,0ah;游戏速度设置菜单
DB' H(h)----HIGH speed',0dh,0ah
DB' S(s)----slow speed',0dh,0ah
DB' ELSE----normal speed!',0dh,0ah,'$'
在编写打字游戏的时候,模仿着别人的程序,一步一步进行。很多地方乍眼一看很简单,但是等到自己亲自实践的时候就觉得很复杂,用到了很多书上没有讲过的指令。汇编语言的前后联系非常紧密,如果要改一点东西的话整个程序的很多地方都要重新做,可以说是牵一发而动全身。所以在编写的时候要很仔细,要记住前面已经实现了那些功能,还有那些功能要实现,这些必须记好,否则程序会出错。
模块名:RandNum
模块描述:此模块可以通过读时钟计数器值,产生随机数,通过清除高六位,再除33得到的余数存放在BX中作为随机字母出现的随机位置。
(5)子程序,新1CH中断处理
模块名:INT_1CH
模块描述:
(6)显示数字
模块名:showNum
模块描述:通过调用四次ShowOne显示四位十六进制数,显示出打字游戏的统计结果。
在具体实现的过程中遇到了很多困难。由于自己的电脑是64位的不兼容,所以平时对编好的程序在windows环境下用记事本打开程序对其进行说明注释,由于使用了中文,所以回到dos环境时出现了乱码。本次课程设计让我们充分了解了汇编在实际软件开发中的作用和地位。在这次课程设计过程中我们把课堂上的知识充分运用了还是不能完成实际软件开发。这说明程序开发是不能够停留在书本上的,想要把程序作好,必须要不断通过各种途径掌握更多更好的知识,并且最重要的是要将获得的知识运用到实际编程中,要学以致用。本次课程设计是自由分组、自由选题。我们可以根据我们的兴趣和优势来选择题目。通过这次编写打字游戏程序的课程设计,最基本的收获是我了解了汇编语言编写程序的步骤:先确定程序要实现的功能,接着定义需要的寄存器、存储器,画出流程图。然后逐个模块实现其功能。此次的课程设计,提高了我阅读和分析程序的能力,以及模仿能力。编程能力实事求是地说还有待提高,觉得自己逻辑性太差,但相对于原来学的高级语言,对汇编很感兴趣,最终虽然不会从事汇编的编程工作,但知识就是力量,学习汇编拓展了自己的知识面。
五.总结与体会
本次的课程设计在选题时,因为对打字游戏感兴趣,就毫不犹豫的选了打字游戏。刚拿到这个题目感觉很盲目,无从下手。汇编语言不同于高级语言,对于高级语言,我们心中可以有一个非常清晰的思路,在实现功能的时候非常得心应手。但汇编语言不同,它是面向机器的语言。用它编写程序时的思路应该按照机器执行程序的思路来编写,所以这个挑战对我来说非常大。在编写程序之前,首先要摒弃高级语言思路的干扰。在做准备工作的时候,我从网上找到了相关的代码,照着别人的步骤感受汇编语言编写程序的思路。很多地方都不是太明白,通过查询课本以及上网找相关资料,最终理解了。
评阅成绩:____评阅教师:_朱冬梅_
一、问题陈述及其需求分析
要求:利用汇编语言编写打字游戏的基本方法。
内容:编写程序,显示一个英文菜单Game Menu。要求分别显示“Start”,“Setting”,“Quit”,并对每项菜单的操作有所响应。
打字游戏其中包括以下几个模块:
(1)Main
(2)GamePlay子程序。
setCurPos 12,10,0
showString GameMenu[20]
setCurPos 16,10,0
showString GameMenu[30]
setCurPos 21,2,0
showString Linec
MOVAH,2
MOVDL,char
INT 21H
POPDX
POPAX
ENDM
showString MACRO string;调用9号功能显示字符串
PUSHAX
PUSHDX
PUSHDS
MOVAX,DATA_SEG
MOVDS,AX
MOVAH,9
LEADX,string
INT 21H
POPຫໍສະໝຸດ BaiduS
POPDX
POPAX
ENDM
setCurPos MACRO M,N,P;设置光标的位置在M行,N列,p页
PUSHAX
PUSHBX
PUSHDX
MOVAH,2
MOVBH,P
MOVDH,M
MOVDL,N
INT 10H
POPDX
POPBX
POPAX
ENDM
getCurPos MACRO M,N;获取光标的位置,将相应的行放在M中,列值放在N中
(7)显示一个数字
模块名:showOne
模块描述:判断单个数字是否小于等于9,大于则变为十六进制,然后加30h,变为ASCII码,调用2号功能输出。
(8)退出游戏
模块名:GameExit
模块描述:退出游戏。
三、详细设计
算法说明
1、主过程的算法设计:
清屏、显示菜单及运用选择操作,调用各个菜单功能,最后选择QUIT退出程序,也可按快捷键ESC退出程序。
LinecDB'/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/',0dh,0ah,'$'
WrongNumDW0
TotalNumDW0
ResultMsgDB'The Char You Kick: ',0dh,0ah,' TotalNum = ','$';游戏结果菜单显示
DB0dh,0ah,' WrongNum = ','$'
SPeedValueDB'Now the speed is ','$'
TotalKickDB?
RightKickDB?
WrongKickDB?
CharDB?
LineADB'-------------GamePlay--------------',0dh,0ah,'$'
LineBDB'-----------------------------------',0dh,0ah,'$'
(3)GameSetting游戏速度设置子程序。
(4)GameExit退出游戏子程序。
(5)Randchar产生随机字母函数的子程序。
(6)RandNum产生随机字母出现的随机位置函数的子程序。
(7)INT_1CH子程序,新1CH中断处理。
(8)showNum显示数字子程序。
(9)showOne显示一个数字子程序。
MOVDH,D1;右下角行号
MOVDL,D2;右下角列号
INT 10H
POPDX
POPCX
POPBX
POPAX
ENDM
Pause MACRO
PUSHAX
MOVAH,01H
INT 21H
POPAX
ENDM
DATA_SEGSEGMENT;数据段定义
FlagDB0
countDW1
GameMenuDB'Game Menu',0dh,0ah,'$';主菜单
相关文档
最新文档