打字计时练习程序设计

合集下载

打字练习程序

打字练习程序
qp 0,25h,0,20,2,60
mov ah,09h
lea dx,cd8
int 21h
gbdw 0,2,24
mov ah,09h
lea dx,cd7
int 21h
; **************************************************
gbdw 0,5,36
mov di,0
3)、当按结束,可显示出练习输入的时间,并且能显示出正确率。
4)、要求界面美观。
2、功能设计:
2.1、功能模块:
1)主程序模块-----主要是随机产生字符并将字符送入缓冲区,通过调用其他子程序和宏设置窗口、字符总数和正确个数,并实现打字练习功能,计算出正确率及打字输入的总时间。
打字结果计算与显示模块( UseTimeAndOut,true_rate_out):主要计算打字输入所用的总时间及打字正确率并输出总时间和打字正确率。
3.2、各功能模块及流程图
输出正确率模块计算打字时间并输出模块
数据打印输出模块
记录当前时间和改变字符颜色模块
正确个数及已打个数模块
3.3重点难点及解决办法:
学习了汇编语言,对汇编语言的的一些基本指令有所理解。刚开始看到这个题目的时候,我感觉这个题目还是很简单的,在数据区直接存放一串字符,接着输入字符与已有字符做比较,记录正确个数和总的字符个数,然后二者一除就得到正确率了,至于打字时间就是取两次系统时间,结束和开始时间相减便得到了。当我着手做时我才发现这并不是我想象的那样。我遇到的问题是怎么才能在屏幕上正确的显示信息,当要在屏幕上显示 ‘12:21:23’这些时我不知道该怎么解决了。我最终的解决办法是将字符拆开一个一个输出。在本程序中已知字符串我采用了随机产生,在随机产生时我遇到的问题是产生的字符由于程序运行时间太短而都是同一字符,后来我通过向同学请教,采用延时的办法解决了这个问题。

微机原理应用打字计时练习源程序

微机原理应用打字计时练习源程序
data ends
;*************************
;以字符形式存储错误个数 *
;*************************
count segment
db 16 dup(0)
count ends
;*************************
;以字符形式存储打字用时 *
mov cl,0ach
mov si,0
call show_str
pop ds
pop si
pop dx
pop cx
pop ax
;显示时间 *
;***************************
time_disp:push ax
push cx
push dx
push si
push ds
je p_end;遇到0则输入结束
mov ah,2;设置光标
int 10h
mov ah,0;输入一个数
int 16h
cmp al,ds:[si]
;***********************************************************
dtoc: push ds
push ax
push cx
push dx
push di
mov di,0
mov ah,0
add ax,bx
sub ax,t
mov t,ax
pop bx
pop ax
ret
;***************************
mul dh

微机课设打字计时程序

微机课设打字计时程序

目录一、设计要求 (1)二、设计目的 (1)三、设计的具体实现 (1)1.系统概述 (2)2.软件程序设计 (3)四、结论与展望 (14)五、心得体会及建议 (15)六、参考文献 (16)打字计时练习设计报告一、设计要求本系统中,要求所需执行的操作由相应的开关状态反映,其驾驶操作与灯光信号对应关系如下:。

1)在缓冲区中预放了一些字母,程序运行时,可按照屏幕上显示的小写字母进行输入练习;2)每输入完一行按回车键后,可显示出练习输入的时间。

二、设计目的通过课程设计,主要达到以下目的:1. 使学生增进对汇编语言的认识,加强用汇编语言编程的能力。

2. 使学生掌握汇编语言的中断调用功能的应用,可以用汇编语言调用各种中断调用功能,并由此实现对硬件的控制等。

3. 使学生了解和掌握汇编语言程序设计过程、方法及实现,为以后微机原理课程的学习打下良好基础。

4. 通过课程设计可以使我们更加了解书上的知识,了解书上的语句并且能够应用自己的程序中。

5. 进一步掌握屏幕输出显示的设计方法。

三、设计的具体实现1.系统概述1.1设计环境程序主要利用Masm for window集成实验环境来编辑、编译、运行和调试。

Masm for Windows 集成实验环境是一个简单易用的汇编语言的学习软件,它具有错误信息自动定位、关键字实时帮助(动画演示汇编指令执行过程)、语法着色、无限的撤消与恢复、WORD式的查找、替换、定位、支持中文长文件名等功能。

程序中也广泛的运用Dos和Bios功能。

DOS是IBM PC系列微机的操作系统(现在的微机仍能运行DOS,而且新的操作系统也能继续提供几乎所有的DOS功能调用)负责管理系统的所有资源,协调微机的操作,其中包括大量可供用户调用的服务程序。

DOS的功能调用不依赖于具体的硬件系统。

1.2设计思路将打字计时练习程序的功能分块实现成子程序、宏指令和中断等形式,并通过主程序将它们沟通起来,从而最终实现用程序来打字计时练习的目标。

打字练习课程设计分析

打字练习课程设计分析

打字练习课程设计单位电气与电子工程分院(系)专业电气与电子工程学号学生姓名指导教师完成日期年月日一个好的打字员也必须经过指法练习的磨练才能成才,同样,一个好的指法练习系统对一个打字员也是必不可少的工具。

以下是用C语言编写的指法练习系统软件的设计报告。

一.系统功能本程序完成简单的指法练习全程,实现测试打字过程中返回正确错误个数的功能,并显示用户测试成绩。

部分功能通过类似window界面实现,完全符合课程设计的要求。

二.系统总框图及函数定义及说明系统总框图:三.设计分析程序主要以函数为模块,一个函数实现一个功能或一个设置项,为了阅读的方便,函数里又包含了自定义函数,最后主函数调用自定义的函数,整个过程清晰,各个函数独立性强。

算法方面主要是产生随机字符这块要研究一下,其他的大概也没什么好研究的,基本都是输入输出操作。

随机字符的产生我利用了数组的下标和random()函数,数组先给赋值了,三个数组就三种情况,达到了设计的要求。

还有就是倒计时的实现,因为C语言不能同时执行两条语句,故在打字的过程中和倒计时不能同时实现,为了解决这个问题,我用了kbhit()如果键盘没输入就退出这次输入循环,让倒计时继续执行,当有键盘的输入这次的输入循环也就结束,也是让倒计时继续执行,问题解决。

四.程序存在的问题由于本人水平有限,本程序存在一些问题,主要有以下几个方面:1.在打字过程中,当打错了字时不能删掉重新输入,只能继续打下去,因为这个过程用的是循环输入,当每入一字就结束了这个字的输入不能修改。

2.部分界面的输入没考虑用户各种输入的情况,当用户非正常输入时,系统可能会中止。

3.没有考虑当用户选择背景字体颜色都一样时的情况(这种情况导致界面没有东西显示,主要就是背景和字体用了一样的颜色),只是用提示语句提醒用户。

五.心得体会经过两周的课程设计,对C语言有了更深刻的了解,学到了很多以前没了解过的函数和算法。

一直以来就认为C语言就是学编程的基础但用不上场,现在觉得它的确也能用上场了,可以编写软件。

C语言打字练习程序课程设计报告

C语言打字练习程序课程设计报告
且充分得利用的C语言的简洁高效表达的特点,让代码在最短的长度内发挥出最多的作用, 提高了程序运行得速度。我觉得C语言在这点上是非常的好用!
八、参考文献
李春葆C语言程序设计教程(第二版)清华大学出版社2011
李春葆C语言程序设计教程(第二版)学习指导清华大学出版社2012
刘汝佳算法竞赛入门经典
清华大学出版社2012
总的来说,通过这次的程序设计,我的收获良多!对C语言的认识和掌握也进入新的
一个阶段。比如,switch语句的使用,我不但对switch语句的语法能够全面的掌握,而且能 够很熟练的使用它。另一点,我开始能够较为熟练的使用数组和掌握函数的编写和调用的关 系。本程序共用了九个函数, 每一个函数的每一个语句都是经过不断的斟酌后才写出的,而
字符下降函数
6
、int wordHit()
击中字符函数
7
、int result ()
结果输出函数
8
、int start()
程序开始提示操作
9
、void leave()
函数结束
五、流程图
六、程序运行效果图序设计的过程有了很具体的认识,我明白了作为
一个开发者应该具有坚持和吃苦耐劳的素质和乐于交流和共享的品德。而且由于在程序设计
使用者在本次使用中的击中数和总下落字母的个数之比。并且游戏设置了九个等级,随着数
字的增加,等级越高,字母下落的速度逐步提高, 这样能够更好的迎合不同水平的用户需求。 使用本程序很简单, 因为在写代码时,我很注重的是界面的友好,所以,在用户的每次操作
前,界面上都有详细的操作提醒,只要跟着提示输入就能很快速地进入并开始练习。
青岛理工大学
《C语言程序设计》
题目
指导教师:李兰老师

打字练习

打字练习

课程设计任务书学生姓名:陈德君专业班级:自动化0804指导教师:苏义鑫工作单位:自动化学院题目: 打字练习程序设计初始条件:带有编辑器、汇编程序、连接程序和调试程序的电脑一台。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)采用汇编语言设计一个打字练习程序,按回车键出现由26个字母组成的乱序行,这时其中任一字母落下,在键盘上敲入该字母,如果输入正确,字母消失。

按Q退出程序。

(1)设计任务及要求分析(2)方案比较及认证说明(3)系统原理阐述(4)软件设计课题需要说明:软件思想,流程图,源程序及程序注释(5)调试记录及结果分析(6)总结(7)参考资料(8)附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图时间安排:1月10日~1月12日:收集资料,方案选择1月13日~1月16日:整体流程,程序细节1月17日~1月20日:调试程序,报告撰写1月21日:交设计报告,程序演示,答辩指导教师签名:年月日系主任(或责任教师)签名:年月日目录1 设计的整体原理基础 (1)1.1 设计目的 (1)1.2 设计任务 (1)1.3 程序设计原理分析 (2)1.4 程序流程图 (3)1.4.1主程序流程图 (3)1.4.2延时程序流程图 (4)2 程序代码分析 (4)2.1 主菜单程序设计 (4)2.2打字阶段程序设计 (6)3 调试结果记录及分析 (11)4 设计过程用到的DOS及BIOS (12)4.1 DOS功能中的屏幕输出 (12)4.2 BIOS中的屏幕操作功能 (12)5总结 (13)6参考文献 (14)附录: (15)打字练习程序设计1 设计的整体原理基础1.1 设计目的通过本次课程设计,主要想达到以下目的:1. 进一步加深对汇编语言的理解,使真正的学有所用。

2. 使掌握汇编语言的中断调用功能的应用,可以用汇编语言调用各种中断调用功能,并由此实现对硬件的控制等。

3能够正确运用书上的语句进行简单功能的设计,在不断的编程与检查问题的过程中提高自己的能力,真正达到学习知识的目的。

打字练习课程设计

打字练习课程设计

1.引言汇编语言程序设计是电子信息类专业的重要基础课程,是计算机应用开发人员必须接受的最重要的专业基础训练之一,是计算机软,硬件研究的基础,是一个优秀计算机工作者必须掌握的基础知识和基本技能。

汇编语言也是计算机能够提供给用户的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。

因而,对程序的空间个时间的要求很高的场合,汇编语言的应用时必不可少的。

2.设计任务与要求1、随机显示一段字符(可含有字母和数字)2、根据屏幕显示进行打字练习,出错时声响报警3、打字完成后统计正确率和打字时间4、程序采用汇编语言在PC机上完成5、完成符合学校要求的设计说明书3.设计方案(1)本次课程设计通过对8253 的设置,使之产生一定频率的波形,将该波形输出到中断口IRQ。

每次进入中断都刷新LED点阵上的字母显示,从而控制打字练习的速度。

通过改变8253的计数初值可以改变速度。

(2)8253 通道1 工作于方式3,输入1MHZ 的时钟,设置分频系数为1000,输出1KHZ 的方波,此输出作为通道0 的输入时钟。

通道0 工作于方式3,分频系数为用户输入的速度等级×1000。

[注:速度等级:1---快速 2---中速 3----慢速](3)将8255 的A 口接到LED 点阵的COL1-8,C 口接到LED 点阵的ROW1-8,每当进入中断,就把在数据段存好的字母的段码送到A 口和C 口,显示相应的字母。

(4) 每个字母都需要分段循环显示,利用人眼的视觉暂留便可看见点阵上显示整个字母。

(5)为避免中断服务程序过长,在写中断服务程序时,只需要把中断标志置1即可,其余操作可在主程序中进行。

(6)在字母显示期间,要不断读取按键输入,直到按键正确或进入下一次中断(即表示该字母的出现时间已经结束),准备出现下一个字母。

(7)在字母显示期间,若读入的按键是错误的,则在屏幕上显示“错误”,并继续显示该字母,等待按键或中断;若未能在字母消失前按下正确的键,则在屏幕上显示“超时”,并显示下一个字母;若在字母消失前按下正确的键,则在屏幕上显示“正确”,往A 口和C 口输出00H,使字母消失,分数加1,并准备显示下一个字母。

打字计时练习

打字计时练习

学生课程设计(论文)题目:打字计时练习学生姓名:李*学号:************所在院(系):计算机学院专业:计算机科学与技术班级:计算机科学与技术(1)班指导教师:李**2011年 12 月 31日攀枝花学院本科学生课程设计任务书注:任务书由指导教师填写。

摘要微机原理及应用是一门实践性很强的课程;其课程设计目的在于综合运用所学知识,全面掌握微型计算机与DOS方式的工作原理、编程和使用方法;在设计中,通过小组协作提出并论证设计方案,进行软件调试,最后获得正确的结果,可以加深和巩固对理论知识的更好掌握,进一步建立计算机应用系统体概念,初步掌握DOS开发方法,为以后进行实际的软件应用开发奠定良好的基础。

本设计是利用Masm for window集成实验环境来实现的打字练习计时程序,在程序中利用自编的中断程序kbint检测按键时产生的中断,并把按键的扫描码转换为ASCII码存入缓存区BUFFER(内存中的一个区域),这个工作和EOM 09类型的键盘中断例行程序所完成的工作大致相同,只是在解释各个键时作了简化,既只解释了可显示字符(入英文小写字母、数字及一些字符),其他特殊键(如组合键、双态键、功能键等)都未做解释,只作字符码0来处理。

另外加入一个菜单模块,增加了程序的观赏性。

关键词: 打字计时,寄存器,缓冲区,中断向量1.1设计任务设计一个在键盘上练习打字并能统计时间的程序。

通过它练习英文打字练习,并能够统计时间。

屏幕上显示出提示信息和练习例句,按照例句从键盘上输入字母即可,每输入完一行后按回车键,可显示出练习输入的时间和下一行例句。

按Esc键可退出程序。

1.2设计要求在本系统中,要求所需执行的操作由相应的开关状态反映,其驾驶操作与灯光信号对应关系如下:。

1)自行编制键盘中断和时间中断处理程序,并保存原中断向量,程序运行时,使用自编的中断向量处理程序,程序退出时,恢复中断向量;2)在缓冲区中预放了一些字母,程序运行时,可按照屏幕上显示的小写字母进行输入练习;3)每输入完一行按回车键后,可显示出练习输入的时间。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录一.设计要求 (1)二.设计目的 (1)三.设计的具体体现 (1)1.系统概述 (1)2.硬件电路设计 (4)3.软件程序设计 (5)四.结论与展望 (17)五.心得体会及建议 (18)六.附录 (19)七.参考文献 (21)打字计时练习程序设计报告一.设计要求1.自行编制键盘中断和时间中断处理程序,并保存原中断向量,程序运行时,使用自编的中断向量处理程序,程序退出时,恢复中断向量;2.在缓冲区中预放了一些字母,程序运行时,可按照屏幕上显示的小写字母进行输入练习;3.每输入完一行按回车键后,可显示出练习输入的时间。

4.自行添加若干功能。

二.设计目的1.增进对汇编语言的认识,加强运用汇编语言编程的能力;2.掌握汇编语言的中断调用功能的应用,可以用汇编语言调用各种调用功能,并由此实现对硬件的控制等;3.了解和掌握汇编语言程序设计过程、方法及实现,为以后微机原理课程的学习打下坚实的基础;4.通过课程设计可以使我们更加了解书上的知识,了解书上的语句并能用到自己的程序设计中;5.掌握屏幕输出显示的设计方法。

三.设计的具体体现1.系统概述1.1 Masm for window集成实验环境介绍Masm for window集成实验环境是从事一线教学的大学教师针对汇编语言初学者的特点开发的一个简单易用的汇编语言学习软件,它具有错误信息自动定位、关键字实时帮助、语法着色、无限的撤销与恢复、替换、定位等1.2 DOS中断介绍利用DOS提供的程序控制硬件。

优点是兼容性好,使用方便。

DOS是IBM PC系列微机的操作系统负责管理系统的所有资源,协调微机的操作,其中包括大量可供用户调用的服务程序。

DOS 的功能调用不依赖于硬件系统。

所有的DOS系统功能调用都是利用软件中断指令INT 21H来实现的。

也就是说在程序中需要调用DOS功能的时候,只要使用一条INT 21H指令即可。

INT 21H是一个具有90多个子功能的中断服务程序,这些子功能大致可以分为4类:设备管理、目录管理、文件管理和其他。

为了方便用户使用这些子功能,INT 21H对每一个子功能都进行了编号—称为功能号。

这样用户就能通过指定功能号来调用INT 21H的不同子功能。

DOS系统功能调用的方法如下:1.AH->功能号。

2.在其他的寄存器中放入该功能所要求的入口参数。

3.在执行INT 21H指令。

4.分析出口参数。

用户与DOS、BIOS和硬件的关系如图1.3 设计思路在键盘上联系的打字例句及其地址表、计时单位等预放在DATA数据段中。

自编的中断程序Kbint检测按键时产生的中断,并把按键扫描码转换为ASCII码存入缓存区BUFFER(内存中的一个区域),这个工作和EOM 09类型的键盘中断例行程序所完成的工作大致相同,只是在解释各个键时做了简化,即只解释了可显示字符(如英文小写字母、数字及一些字符),其他特殊键(如组合键、双态键、功能键等)都未做解释,只做字符码0来处理。

在主程序部分保存原有09类型的中断向量,设置自编例行程序的中断向量,设置中断屏蔽位,然后开中断。

当键盘中段处理后,主程序安排指令读取缓存区中的字符并显示在屏幕上。

在主程序的末尾,利用DOS功能恢复原09类型的中断向量,然后返回DOS。

在显示键入的字符时,还应判断字符是否为回车符(0DH)。

如为回车符,说明一个句子输入完毕,此时调用显示时间的子程序显示打字时间,然后顺序显示一个例句。

如果所存放的例句都已显示完毕,则再次从第一个例句开始显示,直至键入某个功能(如ESC键等)退出程序,结束打字练习。

打字时间统计利用自编的定时器中断处理程序Clint来完成。

每输入一个例句,计时一次。

在此中断例行程序中,定时器中断的次数记录在计数单位count中,当count的计数值为18时,sec计数单位加1,当sec计数值打到60时,min计数单位加 1.因为输入完一个句子无论如何也不会达到小时级,所以hours计数值的调整判断,实际上只起到退出定时器的作用。

加入一个显示菜单程序,使得原来的程序更具有观赏性;显示时间的子程序disptime分别将各计时单位的二进制数转换为十进制,并以min:sec:msec的形式出来。

其中msec 是由count中的计数值转换成的。

Count*1s/18.2=count*55ms此式中,18.2是计算机系统中产生的一个时间中断,每秒18.2次。

2. 硬件电路设计通过将从8259A的INT端与主8259A的IRQ2相连来实现两片8259A的级联,主8259A的IRQ0接收8254的55ms定时器中断,IRQ1接收键盘中断。

主8259A的INT端与CPU相连。

3. 软件程序设计程序清单Init_game macro op1,op2,op3,op4,op5,op6 mov cx,00hmov dh,op1mov dl,op2op6:mov ah,02hmov bh,00hint 10hpush cxmov ah,0ahmov al,op3mov bh,00hmov cx,01hint 10hpop cxinc cxinc op4cmp cx,op5jne op6endmclear_screen macro op1,op2,op3,op4 ; 清屏宏定义mov ah,06hmov al,00hmov bh,07hmov ch,op1mov cl,op2mov dh,op3mov dl,op4int 10hmov ah,02hmov bh,00hmov dh,00hmov dl,00hint 10hendmmenu macro op1,op2,op3 ; 菜单显示宏定义mov ah,02hmov bh,00hmov dh,op1mov dl,op2int 10hmov ah,09hlea dx,op3int 21hendmSTACK SEGMENT PARA STACK 'STACK'; 堆栈段定义DB 256 DUP(0);改其他数字?TOP LABEL WORDSTACK ENDSDATA SEGMENT PARA PUBLIC 'DATA';数据段定义BUFFER DB 16H DUP(0)BUFPT1 DW 0BUFPT2 DW 0KBFLAG DB 0PROMPT DB' *PLEASE PRACTISE TYPING*',0DH,0AH,'$' SCANTAB DB 0,0,'1234567890-=',8,0 ; 检测是否为规定字符DB'QWERTYUIOP[]',0DH,0DB'ASDFGHJKL;',0,0,0,0DB'ZXCVBNM,./',0,0,0DB' ',0,0,0,0,0,0,0,0,0,0,0,0,0DB'789-456+1230.'EVENOLDCS9 DW?OLDIP9 DW?STR1 DB'ABCD EFGH IJKL MNOP QRST UVWX YZ.';打字练习的字母DB 0DH,0AH,'$'STR2 DB'THERE ARE SOME NEWSPAPERS ON THE TABLE.' DB 0DH,0AH,'$'STR3 DB'THERE ARE SOME CLOUDS IN THE SKY.'DB 0DH,0AH,'$'STR4 DB'SHE ALWAYS EATS HER LUNCH AT NOON.'DB 0DH,0AH,'$'STR5 DB'I DO NOT LIKE AUTUMN AND WINTER.'CRLF DB 0DH,0AH,'$'COLON DB':','$'EVENSADDR DW STR1,STR2,STR3,STR4,STR5 ;存放以上的字母COUNT DW 0SEC DW 0 ;定义秒数MIN DW 0 ;定义分数HOURS DW 0 ;定义时数SAVE_LC DW 2 DUP(?)evenZK db"WELCOME TO PLAY$";菜单的形式信息no db"date:2003/6/01$"meg db"press Enter key to continue.......$"meg1 db"when a letter is dropping,please hit it!$"meg2 db"Producer:caopodian,kangyonghong,lirui,hancong$" meg3 db"Number:200624101002,20062410101031,200624101020,200624 101032$"meg4 db"Hope that we play happy!$"speed dw 600dDATA ENDS;数据段结束STACK SEGMENT PARA STACK 'STACK'; 堆栈段定义DB 256 DUP(0)TOP LABEL WORDSTACK ENDSDATA SEGMENT PARA PUBLIC 'DATA'; 数据段定义BUFFER DB 16H DUP(0)BUFPT1 DW 0BUFPT2 DW 0KBFLAG DB 0PROMPT DB' *PLEASE PRACTISE TYPING*',0DH,0AH,'$' SCANTAB DB 0,0,'1234567890-=',8,0 ;检测是否为规定字符DB'QWERTYUIOP[]',0DH,0DB'ASDFGHJKL;',0,0,0,0DB'ZXCVBNM,./',0,0,0DB' ',0,0,0,0,0,0,0,0,0,0,0,0,0DB'789-456+1230.'EVENOLDCS9 DW?OLDIP9 DW?DB'ABCD EFGH IJKL MNOP QRST UVWX YZ.';打字练习的字母DB 0DH,0AH,'$'STR2 DB'THERE ARE SOME NEWSPAPERS ON THE TABLE.' DB 0DH,0AH,'$'STR3 DB'THERE ARE SOME CLOUDS IN THE SKY.'DB 0DH,0AH,'$'STR4 DB'SHE ALWAYS EATS HER LUNCH AT NOON.'DB 0DH,0AH,'$'STR5 DB'I DO NOT LIKE AUTUMN AND WINTER.'CRLF DB 0DH,0AH,'$'COLON DB':','$'EVENSADDR DW STR1,STR2,STR3,STR4,STR5 ;存放以上的字母saddr开辟存贮器空间COUNT DW 0SEC DW 0 ;定义秒数MIN DW 0 ;定义分数HOURS DW 0 ;定义时数SAVE_LC DW 2 DUP(?)evenZK db"WELCOME TO PLAY$";菜单的形式信息no db"date:2003/6/01$"meg db"press Enter key to continue.......$"meg1 db"when a letter is dropping,please hit it!$"meg2 db"Producer:caopodian,kangyonghong,lirui,hancong$" meg3 db"Number:200624101002,20062410101031,200624101020,200624 101032$"meg4 db"Hope that we play happy!$"speed dw 600d;?????????DATA ENDS;数据段结束CODE SEGMENT;定义代码段ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKMAIN PROC FARSTART:MOV AX,STACKMOV SS,AXMOV SP,OFFSET TOP ;把TOP的偏移地址赋给SP PUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV ES,AXclear_screen 00d,00d,24d,79dInit_game 00d,00d,0ah,dl,80d,nextsign1Init_game 24d,00d,0ah,dl,80d,nextsign2Init_game 00d,00d,0ah,dh,25d,nextsign3Init_game 00d,79d,0ah,dh,25d,nextsign4 menu 05d,15d,ZK ; 菜单信息的宏调用menu 07h,15d,nomenu 09d,15d,megmenu 11d,15d,meg1menu 13d,15d,meg2menu 15d,15d,meg3menu 17d,15d,meg4MOV AH,35HMOV AL,09HINT 21Hmov ah,01h ;从键盘输入回车字符int 21hcmp al,0dhje speed3cmp al,45hje exitexit:mov ah,4chint 21hspeed3: mov ax,speed+12;?为什么加12mov speed,axjmp beginbegin:clear_screen 01d,01d,23d,78d ;清屏宏调用clear_screen 01d,01d,23d,78dInit_game 23d,01d,01h,dl,78d,nextsign5 mov ah,02hmov bh,00hmov dh,01hmov dl,01hint 10hMOV OLDCS9,ESMOV OLDIP9,BXPUSH DSMOV DX,SEG KBINTMOV DS,DXMOV DX,OFFSET KBINTMOV AL,09HMOV AH,25HINT 21HPOP DSMOV AH,35HMOV AL,1CHINT 21HMOV SAVE_LC,BXMOV SAVE_LC+2,ESPUSH DSMOV DX,SEG CLINTMOV DS,DXMOV DX,OFFSET CLINTMOV AL,1CHMOV AH,25HINT 21HPOP DSIN AL,21HAND AL,11111100BOUT 21H,ALFIRST: MOV AH,0MOV AL,3INT 10HMOV DX,OFFSET PROMPT MOV AH,9INT 21HMOV SI,0NEXT:MOV DX,SADDR[SI] MOV AH,09HINT 21HMOV COUNT,0MOV SEC,0MOV MIN,0 MOV HOURS,0STIFOREVER:CALL KBGETTEST KBFLAG,80HJNZ ENDINTPUSH AXCALL DISPCHARPOP AXCMP AL,0DHJNZ FOREVERMOV AL,0AHCALL DISPCHARCALL DISPTIMELEA DX,CRLFMOV AH,09HINT 21HADD SI,2CMP SI,5*2JNE NEXTJMP FIRSTENDINT: CLIPUSH DSMOV DX,SAVE_LCMOV AX,SAVE_LC+2MOV DS,AXMOV AL,1CHMOV AH,25HINT 21HPOP DSPUSH DSMOV DX,OLDIP9MOV AX,OLDCS9MOV DS,AXMOV AL,09HMOV AH,25HINT 21HPOP DSSTIRETMAIN ENDPCLINT PROC NEARPUSH DSMOV BX,DATAMOV DS,BXLEA BX,COUNTINC WORD PTR[BX]CMP WORD PTR[BX],18JNE RETURNCALL INCTADJ:CMP HOURS,12JLE RETURNSUB HOURS,12RETURN:POP DSSTIIRETCLINT ENDPINCT PROC NEARMOV WORD PTR[BX],0ADD BX,2INC WORD PTR[BX]CMP WORD PTR[BX],60 JNE EXITeCALL INCTEXITE: RETINCT ENDP DISPTIME PROC NEAR MOV AX,MINCALL BINDECMOV BX,0MOV AL,':'MOV AH,0EHINT 10HMOV AX,SECCALL BINDECMOV BX,0MOV AL,':'MOV AH,0EHINT 10HMOV BX,COUNTMOV AL,55DMUL BLCALL BINDECRETDISPTIME ENDP BINDEC PROC NEAR MOV CX,100DCALL DECDIVMOV CX,10D CALL DECDIVMOV CX,1CALL DECDIVRETBINDEC ENDPDECDIV PROC NEARMOV DX,0DIV CXMOV BX,0ADD AL,30HMOV AH,0EHINT 10HMOV AX,DXRETDECDIV ENDP KBGET PROC NEAR PUSH BXCLIMOV BX,BUFPT1CMP BX,BUFPT2JNZ KBGET2CMP KBFLAG,0JNZ KBGET3STIPOP BXJMP KBGETKBGET2:MOV AL,[BUFFER+BX] INC BXCMP BX,16HJC KBGET3 MOV BX,0KBGET3:MOV BUFPT1,BXPOP BXRETKBGET ENDP KBINT PROC NEAR PUSH BXPUSH AXIN AL,60HPUSH AXIN AL,61HOR AL,80HOUT 61H,ALAND AL,7FHOUT 61H,ALPOP AXTEST AL,80HJNZ KBINT2MOV BX,OFFSET SCANTAB XLAT SCANTABCMP AL,0JNZ KBINT4MOV KBFLAG,80HJMP KBINT2KBINT4:MOV BX,BUFPT2MOV [BUFFER+BX],AL INC BXCMP BX,16HJC KBINT3 MOV BX,0KBINT3:CMP BX,BUFPT1JZ KBINT2MOV BUFPT2,BXKBINT2: CLIMOV AL,20HOUT 20H,ALPOP AXPOP BXSTIIRETKBINT ENDP DISPCHAR PROC NEAR PUSH BXMOV BX,0MOV AH,0EHINT 10HPOP BXRETDISPCHAR ENDPCODE ENDSEND START四.结论与展望通过设计和编写程序代码,运行程序后,其结果为先显示开始界面即为菜单界面,而后进入打字训练界面,打完字敲击回车键就马上进入下一行语句的训练,其具体的调试结果如下所示:1.进入运行界面:(开始的菜单界面)2.敲击回车键进入打字练习界面:五.心得体会及建议课程设计对我们多数初学汇编的学生来说,确实是个一座高峰。

相关文档
最新文档