打字游戏程序设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.1 设计目的
本次课程设计的目的主要是将课堂上所学的知识学以致用,通过程序的制作过程学习课外的新知识,并加强加深对旧知识的理解与掌握,最终使学生达到以下三点:
1.使学生增进对汇编语言的认识,加强用汇编语言编程的能力。
2.使学生了解和掌握汇编语言程序设计过程、方法及其实现,为以后微机原理课程的深入学习打下良好基础。
3. 使学生进一步掌握屏幕输出显示的设计方法。
1.2 课程设计在教学计划中的地位和作用
《微机计算机原理与接口技术》这门课是自动化和电子等专业重要的基础专业课程之一,要求我们要有实际的动手能力。由于我们在课堂上学到的大多都是理论知识,所以需要通过课程设计这个环节,把我们所学到的知识运用到实践,这也是课程设计的主要目的,其中包括提高汇编等语言的编程能力及对接口等硬件的理解与分析能力和设计接口电路的能力。本次设计课题使我们在汇编等语言的编程方面得到了很大的提高,是我受益匪浅。原本陌生的和不太熟悉的指令程序及各种定义,现在都有了一些认识及更深的理解。这对我们以后走向社会,更快地适应工作奠定了很好的基础。
第二章打字游戏程序设计内容要求和设计思想
2.1 设计内容要求
要求设计的程序需包括:在游戏开始后,按回车键进入打字游戏;按ESC 键返回主界面;按空格暂停;按大写字母E程序结束。26个字母中的任意一字母从屏幕落下,在下落的过程中键入落下的字母,如果正确,字母消失,分数增加;如果不正确,字母继续下落。接着继续下落其他字母,如果不正确的字母数大于10个,则游戏结束并返回到成绩界面。进入成绩界面后显示所得游戏分数,暂停大概2秒后返回到主菜单。
2.2 整体设计思想
程序首先通过宏的定义以及调用宏来画出游戏边框,再通过定义一个函数并调用MOV AH,09 INT 21H 来显示字符串, DS:DX定义字符串位置。游戏主程
序调用BIOS INT 10 的9号功能实现对目标文本的颜色和定位。游戏主程序可以用MOV AH ,00 INT 16H 从键盘读取输入的字符再调用MOV AH ,01 INT 21H 让键盘输入显示在屏幕中 AL =输入的字符,用CMP 指令对输入的文本和目标文本进行比较,再利用选择语句在打错字符后对wrong 的基数加1,在打对字符后对right 的基数加1,并调用清屏函数clear 将该字符消除。对于要求柱形图实时显示正确和错误的数目,可以通过利用“*”在竖向上叠加来实现,字符串结束后直接退到dos 环境。 2.3 整体设计方案流程图
开始
欢迎界面
结束
速度选择
1,2,3
游戏运行
游戏结束
ESC
E
ENTER
输入字母并进行相关操作后返回
显示成绩
图2.1
第三章软件设计
3.1 程序流程详细说明
首先运行程序,进入主界面,通过键盘输入字符,先判断是否是“E”,是则直接退出,如果不是“E”,则进入下一步判断是否为数字1,是就按速度1 下落字母,否就进入下一步判断,是否为数字2,是就按速度2下落字母,否就进入下一步判断,是否为数字3,是就按速度3下落字母,否就返回重新输入。字母随机下落的过程中,检查键盘是否输入ESC,是就返回到主界面,否就继续下落,接着判断玩家输入的字母跟下落的字母是否一样,是就清除该字母,并使RIGHT的基数加1,否就使WRONG的基数加1,接着判断WRONG是否大于10,否就又重新随机下落一字母,是游戏就结束并显示最终成绩,接着就返回到主界面等待新的指令。
3.2程序流程图
开
主界
键盘输
是否E
结束
是否1
速度1 是否
是否
速度2
速度3
字母随机
检查键
是否
输入字符正
下落字母
3.3 重点子程序分析 3.3.1 随机产生字母
先初始定义一个由61个无序字母组成的字母列STRD,此字母列包含从A-Z 26个字母,将STRD 的偏移地址存在DI 中,又将字母列的备份存在SI 中,定义一个计数寄存器CX ,首先置CX 为0,程序每产生一个随机字母后CX 自动加1,并且比较每次循环时CX 是否已经大于61,如果大于61则对屏幕初始化置0,如果大于则继续随机下落字母。 3.3.2 字母的下落
字母的下落是整个程序的核心部分,实现该功能的原理是让字母在规定的时间间隔内多次显示,字母每次下移1位,同时上一位自动以空格代替,这样在视觉上就起到了字母自动下落的效果,下落的速度由我们自己决定,本程序中设置了三种速度。
3.4 程序中使用的部分重要指令 3.
4.1通用数据转送指令MOV
它表示把操作数(SRC ),转送给目的操作数(DIST ),源操作数不变,目的
WRONG+1 WRONG>10
显示最终成绩
RIGHT+1
图3.1
操作数被源操作数所替代。转送指令每次可以转送一个字节或一个字,可以实现CPU的内部寄存器之间的数据转送、寄存器和内存之间的数据转送,还可以将立即数送给CPU内部的寄存器。本设计中大量的用到了MOV指令,如MOV AH,0AH MOV AL,OP3 MOV CX,01H MOV BH,00H 等等,以实现起数据的传送。
3.4.2 无条件转移指令JMP、CALL、RET
(1)当程序中出现JMP指令时,无条件的跳至JMP后所跟的变量处。其主要有段内短转移、段内直接转移、段间直接转移、段内间接转移、段间间接转移、段内间接转移等操作。
(2)CALL指令为调用子程序,其功能为保护程序断点后,转到子程序处执行。主要包括段内调用和段间调用。
(3)RET返回指令,通常与CALL指令连用,从子程序返回主程序,通常放在子程序之后。也包括段内返回和段间返回。
3.4.3 条件转移指令
条件转移指令是根据执行该指令时CPU标志的状态而决定是否发生控制转移的指令。如果满足条件则程序转移到指定的目标地址;如果不满足则继续执行该条件下的下一条指令。一般与比较指令CMP连用。在本程序设计中主要用到“JE (相等转移)”、“JA(大于转移)”、“JNE(不相等转移)”等。
3.4.4 堆栈操作指令PUSH、POP
PUSH进栈指令的功能是将操作数推入堆栈。它的源操作数可以是16为通用寄存器、段寄存器或存储器中的数据字,打不能是立即数。堆栈是以“先进后出”的方式工作的一个存储区,栈区的段址由SS寄存器的内容确定。堆栈的最大容量可为64K,即一个段的最大容量。堆栈指针SP始终指向栈顶,其值可以从FFFEH (偶地址)开始,向低地址方向发展,最小为0。每次执行PUSH操作时,先修改SP的值,使SP←SP - 2后,然后把操作数压入堆栈种SP指示的位置上,低位字节放在较低地址单元,高位字节放在交高地址单元中。
POP出栈指令的功能是把当前的SP所指向的堆栈顶部的一个字送到指定的目的操作数中。它的目的操作数可以是16位通用寄存器,段寄存器或存储单元,但CS不能做目的操作数。每执行一次出栈操作,SP←SP+2,即SP向高地址方向移动,指向新的栈顶。