汇编设计报告打字计时练习程序
打字练习程序
![打字练习程序](https://img.taocdn.com/s3/m/25f329533169a4517623a321.png)
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’这些时我不知道该怎么解决了。我最终的解决办法是将字符拆开一个一个输出。在本程序中已知字符串我采用了随机产生,在随机产生时我遇到的问题是产生的字符由于程序运行时间太短而都是同一字符,后来我通过向同学请教,采用延时的办法解决了这个问题。
微机课设打字计时程序
![微机课设打字计时程序](https://img.taocdn.com/s3/m/0a9c4918a8114431b90dd896.png)
目录一、设计要求 (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设计思路将打字计时练习程序的功能分块实现成子程序、宏指令和中断等形式,并通过主程序将它们沟通起来,从而最终实现用程序来打字计时练习的目标。
打字练习课程设计
![打字练习课程设计](https://img.taocdn.com/s3/m/63519534eefdc8d376ee3273.png)
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,并准备显示下一个字母。
打字计时练习
![打字计时练习](https://img.taocdn.com/s3/m/4bd5686ca98271fe910ef9e1.png)
学生课程设计(论文)题目:打字计时练习学生姓名:李*学号:************所在院(系):计算机学院专业:计算机科学与技术班级:计算机科学与技术(1)班指导教师:李**2011年 12 月 31日攀枝花学院本科学生课程设计任务书注:任务书由指导教师填写。
摘要微机原理及应用是一门实践性很强的课程;其课程设计目的在于综合运用所学知识,全面掌握微型计算机与DOS方式的工作原理、编程和使用方法;在设计中,通过小组协作提出并论证设计方案,进行软件调试,最后获得正确的结果,可以加深和巩固对理论知识的更好掌握,进一步建立计算机应用系统体概念,初步掌握DOS开发方法,为以后进行实际的软件应用开发奠定良好的基础。
本设计是利用Masm for window集成实验环境来实现的打字练习计时程序,在程序中利用自编的中断程序kbint检测按键时产生的中断,并把按键的扫描码转换为ASCII码存入缓存区BUFFER(内存中的一个区域),这个工作和EOM 09类型的键盘中断例行程序所完成的工作大致相同,只是在解释各个键时作了简化,既只解释了可显示字符(入英文小写字母、数字及一些字符),其他特殊键(如组合键、双态键、功能键等)都未做解释,只作字符码0来处理。
另外加入一个菜单模块,增加了程序的观赏性。
关键词: 打字计时,寄存器,缓冲区,中断向量1.1设计任务设计一个在键盘上练习打字并能统计时间的程序。
通过它练习英文打字练习,并能够统计时间。
屏幕上显示出提示信息和练习例句,按照例句从键盘上输入字母即可,每输入完一行后按回车键,可显示出练习输入的时间和下一行例句。
按Esc键可退出程序。
1.2设计要求在本系统中,要求所需执行的操作由相应的开关状态反映,其驾驶操作与灯光信号对应关系如下:。
1)自行编制键盘中断和时间中断处理程序,并保存原中断向量,程序运行时,使用自编的中断向量处理程序,程序退出时,恢复中断向量;2)在缓冲区中预放了一些字母,程序运行时,可按照屏幕上显示的小写字母进行输入练习;3)每输入完一行按回车键后,可显示出练习输入的时间。
汇编语言打字练习程序实验报告
![汇编语言打字练习程序实验报告](https://img.taocdn.com/s3/m/6bc7bc3a482fb4daa58d4bb3.png)
课程设计说明书题目: 打字练习摘要在IBM-PC系统中,驻留的ROM中有8KB的BIOS。
它实现对系统中种种常用设备的输入输出操作的管理。
其中的16H中断调用即为键盘输入输出中断调用,实现从键盘输入字符到AL寄存器、读键盘缓冲区字符到AL寄存器、读取特殊功能键的状态等功能。
本程序是一个在键盘上打字练习的程序,运行可执行程序后,出现主界面,按回车键出现由78个字母组成的乱序行,这时其中任一字母落下,在键盘上敲入该字母,如果输入正确,字母消失;按回车键进入打字练习;按ESC 健返回主界面;按空格键暂停;按’E’退出。
关键词:中断调用,打字练习,回车键进入,空格键暂停目录1设计目的 (1)2概要设计 (2)2.1 系统总体分析 (2)2.2 主模块框图及说明 (2)3详细设计 (4)3.1 主模块及子模块说明 (4)3.2 各模块详细设计 (4)4程序调试 (10)4.1 运行界面分析 (10)4.2 调试过程及分析 (12)5心得体会 (13)5.1 设计体会 (13)5.2 系统改进 (13)参考文献 (14)1设计目的汇编语言是计算机能够提供给用户使用的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
由于汇编语言如此的接近计算机硬件,因此,它可以最大限度地发挥计算机硬件的性能。
由此可见汇编语言的重要性,学好这门课程,同样可为相关的专业打下基础。
汇编语言程序设计课程设计是在教学实践基础上进行的一次试验,也是对该课程所学理论知识的深化和提高。
因此,要求学生能综合应用所学知识,设计和制造出具有具有一定功能的应用系统,并且在实验的基本技能方面进行了一次全面的训练。
此外,它还可以培养学生综合运用所学知识独立完成汇编程序课题的能力,使学生能够较全面的巩固和应用课堂上所学的基本理论和程序设计方法,能够较熟练地完成汇编语言程序的设计和调试。
再者,它同样可以提高学生运用理论去处理实际问题的能力和独立思考的能力,使学生的编程思想和编程能力有所提高,最终达到熟练地掌握编写汇编源程序的基本方法的目的。
中文打字练习程序报告
![中文打字练习程序报告](https://img.taocdn.com/s3/m/51af362aba1aa8114431d9a5.png)
中文打字练习程序报告程序名称:中文打字练习系统英文简名:CTT实现功能:练习打字,输入法由用户而定,打字练习范文也可由用户自己定义,可以测打字速度和正确率。
编写单位:浙江大学城市学院计算机系2003级4班主要编写人员:俞雪永文件说明:CTT.bat 用于windows下运行的DOS批处理文件。
CTT.exe 用于中文DOS下运行的可执行文件。
Text(n).txt 用于打字练习的范文。
Hzk16 用于图形界面下输出汉字的汉字库。
文本文件用于为主程序提供一定数量的范文。
设计过程中遇到的问题:CTT中文打字练习系统界面设计:本意为纯文本主界面,后因效果不好,改为图形界面,内部仍为文本界面。
图形主界面为蓝底,黄色外框,中上部为标识,下左部为主菜单,下右部为说明。
图形界面须调用文件-------UCDOS的hzk16以调用汉字,以便在界面上显示汉字。
显示汉字函数有两个,即puthz16与puthz24,因为hzk16中没有24点阵汉字,故后来舍弃了puthz24函数。
puthz16有9个参数,即显示位置参数x,y,间隔参数z,字色参数color,字符串参数*p,水平/垂直显示参数d,0度/90度显示参数angle,竖直放大参数m,水平放大参数n。
此外还需读取汉字内码函数getbit,打开汉字库函数openhzk。
使用者必须注意一个问题:程序中hzk16的打开是需路径的,即openhzk函数中含有hzk16的路径,系统默认为当前路径,且打字范文的打开是通过打开文本文件形式,系统默认文本文件的路径为当前路径。
在设计过程中本想把一系列的范文作为数组形式保存在主程序中,考虑到程序的亢余,文件不易改动,所以采用了读取文本文件的方式来实现范文选取。
如要改动范文只要改动文本文件即可。
共有范文25篇,分五个等级,每一个等级五篇。
为实现对键盘控制,包括扩充键,采用了函数bioskey()。
由于bioskey在输入字符后光标仍然留在原处,所以输入字符而言,要有一个打印该字符的过程,而对扩充键则没有必要。
汇编语言打字练习程序课程设计报告
![汇编语言打字练习程序课程设计报告](https://img.taocdn.com/s3/m/5d9d822a852458fb770b56a8.png)
课程设计说明书题目: 打字练习院系:专业班级:学号:学生姓名:指导教师:2010 年 12 月 31 日安徽理工大学课程设计(论文)任务书计算机科学与工程学院硬件教研室ﻩ2010年12月17日安徽理工大学课程设计(论文)成绩评定表摘要汇编语言是计算机能够给用户使用的最高效快捷的语言,也是唯一能对计算机所有硬件进行操纵的语言。
鉴于汇编语言的用途广泛以及重要性,我花费的大量的时间完成此次课程时机,打字练习。
打字练习是计算机常用的小应用程序,可以给想练习打字的人提供一个好的练习空间。
本文的核心部分是对于详细设计的讲解与分析,而这当中的侧重点又在于设计思想的再现。
关键词:功能模块,核心代码,随机字符,模块调用,功能分析目录1设计目的ﻩ错误!未定义书签。
2概要设计 .......................................................................... 错误!未定义书签。
2.1系统总体分析 ...................................................................................................... 错误!未定义书签。
2.2主模块框图及说明ﻩ错误!未定义书签。
3 详细设计 ......................................................................... 错误!未定义书签。
3.1主模块及子模块说明 ........................................................................................ 错误!未定义书签。
3.2各模块详细设计ﻩ错误!未定义书签。
3.2.1主界面模块.................................................................................................. 错误!未定义书签。
一个简单的打字练习程序
![一个简单的打字练习程序](https://img.taocdn.com/s3/m/e7467906876fb84ae45c3b3567ec102de2bddf14.png)
类似于学习机上的指法练习程序,简单⽽实⽤#includemain(){int x,y,i,j;unsigned int Timer;char ch;char key;char *kb[]={"Q W E R T Y U I O P [ ]","A S D F G H J K L ; ’","Z X C V B N M , . /"}; long AllCounter=0,RightCounter=0,FalseCounter=0;time_t t;int fun_Esc();srand((unsigned)time(&t));clrscr();gotoxy(18,1);printf("%s\n",kb[0]);gotoxy(20,3);printf("%s\n",kb[1]);gotoxy(22,5);printf("%s\n",kb[2]);gotoxy(11,25);for(i=0;i<60;i++){printf("=");}gotoxy(1,1);printf("AllCh: %ld\nRight: %ld\nFalse: %ld",AllCounter,RightCounter,FalseCounter); printf("\n\n");printf("Esc to exit");printf("\n");printf("Enter to pause");gotoxy(26,12);printf("* * * * * * * * * * * * * * *");gotoxy(26,13);printf("* Press any key to start! *");gotoxy(26,14);printf("* * * * * * * * * * * * * * *");gotoxy(51,13);if(getch()==27){if(fun_Esc()==1){clrscr();exit(0);}}gotoxy(23,12);printf(" ");gotoxy(23,13);printf(" ");gotoxy(23,14);printf(" ");lab_start:y = 6;Timer = 100000;i = rand()%3;j = rand()%(12-i);ch = kb[i][j*4];x = 18+i*2+j*4;while(y<=24){if(kbhit()){key = getch();if(key==ch || key==ch+32){ch = ’*’; Timer = 1000;}else if(key==27){if(fun_Esc()==1){clrscr();exit(0);}}else if(key==’\r’){gotoxy(x,y-1);printf(" ");gotoxy(28,13);printf("Press any key to continue");getch();gotoxy(28,13);printf(" ");}else{FalseCounter++;}}if(y>6){gotoxy(x,y-1);printf(" ");}gotoxy(x,y);printf("%c",ch);gotoxy(1,1);printf("AllCh: %ld\nRight: %ld\nFalse: %ld",AllCounter,RightCounter,FalseCounter); delay(Timer);y++;}AllCounter++;if(ch == ’*’){RightCounter++;}goto lab_start;}int fun_Esc(){int key = ’#’;gotoxy(24,12);printf("* * * * * * * * * * * * * * * * *");gotoxy(24,13);printf("* Are you sure to exit? (Y/N) *");gotoxy(24,14);printf("* * * * * * * * * * * * * * * * *");gotoxy(51,13);while(key!=’Y’ && key!=’y’ && key!=’N’ && key!=’n’){key = getch();if(key==’Y’ || key==’y’) {return 1;}if(key==’N’ || key==’n’) {gotoxy(24,12);printf(" ");gotoxy(24,13);printf(" ");gotoxy(24,14);printf(" ");return 0;}}}。
汇编语言程序设计课程设计-打字练习程序的设计
![汇编语言程序设计课程设计-打字练习程序的设计](https://img.taocdn.com/s3/m/4a47020076c66137ee0619c1.png)
课程设计2013~ 2014学年第二学期设计题目汇编语言程序设计课程设计-打字练习程序的设计院(系)计算机科学与信息工程学院专业网络工程提交日期 2014年7月5日上海应用技术学院课程设计任务书指导教师(签名):教研室主任(签名):杨晶鑫2014年6 月25 日2014年6 月25 日目录上海应用技术学院课程设计任务书..................................................... i错误!未定义书签。
目录.................................................................................................................................... i ii 1概述. (1)1.1基本功能 (1)1.2拓展功能 (1)1.3代码的格式 (1)2详细设计说明 (4)2.1原“TYPETEST.ASM”程序结构 (4)2.2已经实现的功能(修改的、新编写的)程序结构 (5)2.3各模块功能 (7)2.3.1用户验证模块: (7)2.3.2功能选择模块: (9)2.3.3游戏选择模式: (12)2.3.4游戏模块: (15)2.3.5游戏结束模式: (22)2.3.6退回主菜单: (23)3课程设计总结 (25)3.1设计体会 (25)3.2系统改进 (25)4软件使用说明 (26)4.1用户密码: (26)4.2运行环境: (26)4.3使用方法 (26)参考文献 (34)附录 (35)源代码: (35)1 概述本次课程设计主要是设计一个打字游戏,通过对一个较大型的、综合性的应用程序进行阅读、修改、添加功能等工作, 加深对汇编语言程序设计的认识,提高阅读理解复杂程序的能力和程序设计能力。
本程序运行后,出现主界面,按回车键出现由26个字母组成的乱序行,这时其中任一字母落下,在键盘上敲入该字母,如果输入正确,字母消失;按回车键进入打字练习;按ESC键返回主界面;按空格键暂停;按‘E’退出;程序包括自动计分功能,根据打字的快慢分别获得不同的分数,根据打字的难度,分别变化不同的颜色,并且设置了用户名和密码,使软件运行起来更加安全。
打字练习计时程序设计说明书
![打字练习计时程序设计说明书](https://img.taocdn.com/s3/m/804bb70cb52acfc789ebc99d.png)
学号:课程设计题目打字练习计时程序设计学院专业班级姓名指导教师2014 年月日课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目: 打字计时练习程序设计要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.用汇编语言编写一个打字计时练习的程序,在缓冲区中预放一些字母,运行时,可按照屏幕上显示的字母输入练习。
2.按某个键开始练习,每输入完一行按回车键后,可显示出练习的时间及正确率。
3.撰写课程设计说明书。
内容包括:摘要、目录、正文、参考文献、附录(程序清单)。
正文部分包括:设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。
时间安排:12月30日-----12月31日查阅资料及方案设计1月2日-----1月3日编程1月6日调试程序1月7日-----1月8日撰写课程设计报告指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (1)1.设计要求 (2)1.1设计任务 (2)1.2设计要求 (2)1.3设计目的 (2)2.算法设计 (3)2.1设计思路 (3)2.2程序流程图 (3)3设计说明 (5)3.1BIOS中断 (5)3.1.1显示输出管理 (5)3.2DOS中断 (6)3.2.1DOS中断 (6)3.2.2 DOS中断和BIOS中断使用方法 (6)4.程序说明 (8)4.1计算正确率子程序 (8)4.2键盘获取子程序 (9)5.调试与运行 (11)5.1运行程序: (11)5.2调试中出现的问题 (12)6.总结 (13)参考文献 (14)附录 (15)摘要计算机的不断更新发展,在各个领域的应用越来越多。
而汇编语言是计算机能够提供用户使用的最快而又最好最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
因而,对程序的空间和时间要求很高的场合,汇编语言的应用就显得必不可少了,一些直接控制硬件的应用场合,则更是非用汇编语言不可。
微机原理课程设计打字练习计时
![微机原理课程设计打字练习计时](https://img.taocdn.com/s3/m/fddcd033f111f18583d05a6f.png)
微机原理课程设计书院别电气工程学院专业电气工程及其自动化班级题目打字计时程序学生学号同组者2011年 1 月7日目录第一章设计要求 (1)1.1设计任务 (1)1.2设计要求 (1)1.3设计目的 (1)第二章设计环境 (1)DOS中断介绍 (1)第三章课题设计 (3)3.1硬件设计 (3)3.2软件设计 (3)3.3系统运行过程描述 (4)3.4 设计中遇到的问题及解决方法 (5)3.5 新增功能及其实现方法 (5)第四章设计体会 (6)附录 (6)附录一程序流程图 (6)附录二源程序 (8)第一章设计要求1.1设计任务利用PC机键盘和时间中断、字符显示实现打字练习程序。
1.2设计要求1)自行编制键盘中断和时间中断处理程序,并保存原中断向量,程序运行时,使用自编的中断向量处理程序,程序退出时,恢复中断向量;2)在缓冲区中预放了一些字母,程序运行时,可按照屏幕上显示的小写字母进行输入练习;3)每输入完一行按回车键后,可显示出练习输入的时间。
4)自行添加若干功能。
1.3设计目的熟悉与掌握有关键盘和时间的中断及字符显示技术。
第二章设计环境DOS中断介绍使用DOS提供的程序控制硬件。
优点是兼容性好,使用方便。
DOS是IBM PC系列微机的操作系统(现在的微机仍能运行DOS,而且新的操作系统也能继续提供几乎所有的DOS功能调用)负责管理系统的所有资源,协调微机的操作,其中包括大量可供用户调用的服务程序。
DOS的功能调用不依赖于具体的硬件系统。
所有的DOS系统功能调用都是利用软件中断指令INT 21H来实现的。
也就是说,在程序中需要调用DOS功能的时候,只要使用一条INT 21H指令即可。
INT 21H是一个具有90多个子功能的中断服务程序,这些子功能大致可以分为四类:设备管理、目录管理、文件管理和其他。
其功能一览表可参见附录。
为了方便用户使用这些子功能,INT 21H对每一个子功能都进行了编号——称为功能号。
微机原理课程设计--打字计时练习
![微机原理课程设计--打字计时练习](https://img.taocdn.com/s3/m/e352aadbf111f18582d05add.png)
打字计时练习1设计目的通过课程设计,主要达到以下目的:1.使学生增进对汇编语言的认识,加强用汇编语言编程的能力。
2.使学生掌握汇编语言的中断调用功能的应用,可以用汇编语言调用各种中断调用功能,并由此实现对硬件的控制等。
3.使学生了解和掌握汇编语言程序设计过程、方法及实现,巩固微机原理课程上学到的知识。
4.通过课程设计可以使我们更加了解书上的知识,了解书上的语句并且能够应用自己的程序中.5.进一步掌握屏幕输出显示的设计方法.2设计思想题目的要求是通过系统时钟得到输入30个字符所需的时间间隔,并在屏幕上显示输入字符和时间间隔。
用汇编语言实现打字程序的思想,首先用指针保存30个测试用的字符,接着用DOS的21H中断类型的09H功能显示字符串来显示主界面;调用DOS的21H的01H功能,接受从键盘输入的第一个字符字符,然后调用DOS的21H的2cH功能获取系统时间,将系统时间存入TIMEBUFF中。
接着将输入的剩余29个字符放在循环中,待输入30个字符完毕后再次调用DOS的21H的2cH功能获取系统时间,将此次的时间运算后放入dx中,将开始输入的时间放入ax中,将两次的时间差放入cx中,其中ch放秒钟十位,cl放个位。
调用比较输入的字符是否正确的函数,通过DOS的21H的02H功能调用显示输入的字母和其中输错字母的个数,然后显示时间间隔。
调用DOS的21H中断类型的07H,当接下来输入如果是”q”就退出,是其他字符就清空错误的数目还有30个字符的指针,开始新一轮的打字计时。
3软件流程图是4程序DATA segmentTIPdb0DH,0AH,'-----------now begin-----------',0DH,0AH,'$'TIMEBUFF1 db 0 ;保存考试输入时的分钟数TIMEBUFF2 db 0 ;保存开始输入时的秒STR1 db 'abcdefghijklmnopqrstuvwxyzabcd',0DH,0AH,'$' ;30个字符ERRORFLAG db 0 ;保存30个字符的指针ERROR db 0 ;保存错误的数目TIMEIS db 0DH,0AH,'the time is ','$' ERRORIS db 0DH,0AH,'the error is ','$'RESTART db 0DH,0AH,'>>press q to exit or others to restart','$' DATA endsACK segmentdw 20 dup(0)ACK endsCODE segmentassume cs:CODE,ds:DATA,ss:ACKstart:mov ax, ACKmov ss, axmov sp, 40mov ax, DATA ;屏幕初始显示mov ds, axmov dx, offset TIPmov ah, 9int 21Hmov dx, offset STR1 ;显示30个字符mov ah, 9int 21Hmov ah, 1 ;调用1号中断接受第一个字符int 21hcall Comparemov ah, 2CH ;调用2CH号中断,获取系统时间int 21Hmov TIMEBUFF1, cl ;将系统时间存入TIMEBUFF中mov TIMEBUFF2, dhmov cx, 29 ;剩余的29个字符放在循环中loops:mov ah,1int 21Hcall Compareloop loopsmov ah, 2CH ;输入完毕,再次获取系统时间int 21Hmov al, cl ;将此次的时间运算后放入dx中mov cl, 60mul clmov cl, 8shr dx, cladd ax, dxmov dx, axmov al, TIMEBUFF1 ;将开始输入的时间放入ax中mov cl, 60mul clxor cx, cxmov cl, TIMEBUFF2add ax, cxsub dx, ax ;将两次的时间差放入cx中,其中ch放秒钟十位,cl放个位mov ax, dxmov cl, 10div clmov ch, almov cl, ahmov ax, DATA ;显示“the time is”mov dx, offset TIMEISmov ah, 9int 21Hmov dl, ch ;显示时间间隔add dl, 48mov ah,2int 21hmov dl, cladd dl, 48mov ah,2int 21hmov ax, DATA ;显示“the error is”mov dx, offset ERRORISmov ah, 9int 21Hxor dx,dx ;显示errormov dl, ERRORmov ax, dxmov cl, 10div clmov cx, axmov dl, aladd dl, 48mov ah,2int 21hmov dl, chadd dl, 48mov ah,2int 21hmov ax, DATA ;显示“press q to exit or others to restart'mov dx, offset RESTARTmov ah, 9int 21Hmov ah,7 ;如果是q就退出,其他的继续int 21hcmp al,'q'jne REjmp KOUTRE:mov bl, ERRORFLAG ;如果继续的话清空错误的数目还有30个字符的指针mov bh, ERRORmov bx, 0mov ERRORFLAG, blmov ERROR, bhjmp startKOUT:mov ah, 4CHint 21hCompare: ;比较输入的字符是否正确的函数push bxpush cxpush dxxor bx,bxmov bl, ERRORFLAGmov dl, ERRORmov cl, STR1[bx]cmp al, clje nextinc dlnext:add bl, 1mov ERROR,dlmov ERRORFLAG,blpop dxpop cxpop bxretCODE endsend start5调试运行结果初步调试的时候遇到很多错误,后来经过检查发现是因为输入法不对输入的标点计算机无法识别,从而不能编译成功。
汇编设计报告打字计时练习程序
![汇编设计报告打字计时练习程序](https://img.taocdn.com/s3/m/14205b23b4daa58da0114a0a.png)
汇编语言课程设计报告( 2012 -- 2013 年度第 1 学期)课题名称:打字计时练习程序目录1 设计目的 (1)2 概要设计 (1)2.1系统总体分析 (1)2.2主模块框图 (2)3 详细设计 (2)3.1主模块及子模块说明 (2)3.2各模块详细设计 (3)3.2.1主界面模块 (3)3.2.2中断处理模块 (3)3.2.3 打字计时模块 (5)4 程序调试 (8)4.1运行界面分析 (8)4.2调试过程及分析 (10)5 心得体会 (10)5.1设计体会 (10)5.2系统改进 (11)参考文献 (12)附录 (13)附录1源程序清单 (13)附录1.1 打字计时练习模块源程序 (13)打字计时练习程序1 设计目的这次课程的任务是写一个在键盘上练习打字并能统计时间的程序,运行可执行程序后,按回车键出现主界面,进入英文打字练习并计时,通过课程设计,主要达到以下目的:1.增进对汇编语言的认识,加强运用汇编语言编程的能力;2.掌握汇编语言的中断调用功能的应用,可以用汇编语言调用各种调用功能,并由此实现对硬件的控制等;3.了解和掌握汇编语言程序设计过程、方法及实现,为以后微机原理课程的学习打下坚实的基础;4.通过课程设计可以使我们更加了解书上的知识,了解书上的语句并能用到自己的程序设计中;5.掌握屏幕输出显示的设计方法。
2 概要设计2.1 系统总体分析在缓冲区中预放了一些字母,运行时,可按照屏幕上显示的字母输入练习,每输入完一行按回车键后,可显示出练习输入的时间。
当一个句子输入完后(回车键作为结束符),屏幕上以min:sec:msec的格式显示出键入字符的时间。
在每次打字之前,屏幕上先显示一个例句,然后打字员按照例句,将句中字符通过键盘输入。
这个过程共进行五次,当键入一个Enter键时,退出打字计时练习程序。
在键盘上联系的打字例句及其地址表、计时单位等预放在DATA数据段中。
自编的中断程序Kbint检测按键时产生的中断,并把按键扫描码转换为ASCII码存入缓存区BUFFER(内存中的一个区域),这个工作和EOM 09类型的键盘中断例行程序所完成的工作大致相同,只是在解释各个键时做了简化,即只解释了可显示字符(如英文小写字母、数字及一些字符),其他特殊键(如组合键、双态键、功能键等)都未做解释,只做字符码0来处理。
微机课设报告 打字游戏汇编语言的设计
![微机课设报告 打字游戏汇编语言的设计](https://img.taocdn.com/s3/m/98aeaf05b52acfc789ebc96b.png)
学号09750223实习报告微型计算机原理及应用课程设计报告打字游戏程序设计起止日期:2012 年1 月3 日至2012年 1 月6 日学生姓名马聪班级09电气2班成绩指导教师(签字)电子与信息工程系2012年1月05日摘要为了更好地掌握学习微机原理的知识,我们进行了这次课程实验,以完善我们的知识体系,我们通过汇编语言在PC机上完成了一个打字游戏的设计,它具有练习打字的功能。
本有游戏主要针对指法练习,并提供字母和单词两种选择。
根据用户自身情况,可以进行速度调节,以达到最佳的练习效果。
同时本游戏提供显示得分,正确率和失败个数的功能。
当失败个数超过一定个数后,游戏结束并提示是否继续。
目录一、课程设计题目 (2)二、设计思路模块划分流程图 (2)㈠设计思路 (2)㈡模块划分 (2)㈢流程图 (3)三、程序源代码 (4)四、调试过程,运行结果和出现的问题及解决 (12)1、调试结果 (12)2、在调试中碰到问题 (14)五、课程设计心得 (14)六、成绩单 (15)一、课程设计题目、内容和实现的功能字母打字游戏基本功能:0 菜单主界面由“开始”“速度调整”“暂停”“结束”“统计得分”等项组成1 按ESC键退出游戏,显示得分,正确打字数和错误打字数.二、设计思路、模块划分、流程图(一)设计思路:利用计算机控制发声的原理,来演奏乐曲的程序。
乐曲按一定的高低、长短和强弱关系组成的音调。
根据歌谱,来编写歌程序的音符表和节奏表。
组成乐谱的每个音符的频率值和持续时间是乐曲程序发声所需要的两个数据。
通过来设时间值,然后通过发声程序“*”来播放音乐。
通过键盘控制扬声器发出各种音符声音,使计算机键盘变成钢琴键盘,这是可以用它来演奏各种简单的声音。
弹奏时对应乐谱上的q音符,按下1,程序将接收到的1键的频率为262Hz送入程序中。
1、音乐播放选择从键盘上输入“1”,则播放“新年好”;从键盘上输入“q”,则退出;从键盘上输入其它字符,则等待重新输入。
打字计时练习程序设计微机原理设计
![打字计时练习程序设计微机原理设计](https://img.taocdn.com/s3/m/de01f3513b3567ec102d8a5d.png)
录目
书明说计设程课》计设口接与理原机微《学大工理汉武
1
器时计字打 用调序程子 用调 SOD 言语编汇�词键关
。用运活灵 应用调、写编的序程于对�题问等面界到虑考�换转的间之制数种各内机算计到 虑考需�计设的序程字打于对。能功的本基现实来�言语编汇用使的练熟加更以 可们我使�悉熟加更法方程编本基对而进�解了的目题对过通�力能的题问决解 身自的们我强加 。法方用使和程编、理原作工的式方 SOD 与机算计型微握掌面全 �识知学所用运合综于在的目计设程课其 �强的常非性践实的它 �同相太不程课的 往以与它�程课础基的要重常非门一是说来生学的化动自们我于对理原机微
段据数 ATAD 在放先预等元单时计、表址地其及句例字打的习练上盘键在
想思计设件软 1.3
案方计设件软
3
书明说计设程课》计设口接与理原机微《学大工理汉武
5
图程流序程主 1-3 图 束结
果结示显上幕屏
态状字打出退 Y 毕完入输 否是符字中区冲缓 N �18 于等符字 Y
N
符字入输字打盘键
出输串符字载装
。用作的器时定出退到起只上际实�断判整调的值数
tnuoc 元单数计在录记数次的断中器时定�中序程行例断中此在。次一时计�句 例个一入输每。成完来 tnilC 序程理处断中器时定的编自用利计统间时字打
nim�时 06 到打值数计 ces 当�1 加元单数计 ces�时 81 为值数计的 tnuoc 当�中
N
始开
块模出输及间时字打算计�4�
书明说计设程课》计设口接与理原机微《学大工理汉武
9
束结
符字出输 N 1=FZ
Y
较比行进 1 与 pb Y 1=FA 较比行进 3 与 is�1+iS Y 0=FZ N Y 较比行进 1 与 pb N 符字出输 0=pd 0=FZ 较比行进’0’与 ld ’’+ ’0’+ld,ld 入送容内]is[pmet 将 1=FZ 0 为否是 is 针指断判 1-iS 位高 xa 蔽屏,01/lB 容内中 XB 出输 N N
用汇编编写的指法打字练习软件TT
![用汇编编写的指法打字练习软件TT](https://img.taocdn.com/s3/m/fed4c3ed19e8b8f67c1cb95c.png)
Init_boarder macro row,col,char,dhdl,countLocal l1mov cx,countmov dh,rowmov dl,coll1:mov ah,02hmov bh,00hint 10hpush cxmov ah,0ahmov al,charmov bh,00hmov cx,01hint 10hpop cxinc dhdlloop l1endmclear_screen macro top,left,bottom,right,col;清屏宏定义 mov ah,06hmov al,00hmov bh,colmov ch,topmov cl,leftmov dh,bottommov dl,rightint 10hendmsetcusor macro page,row,column;设置光标位置mov ah,02hmov bh,pagemov dl,columnmov dh,rowint 10hendmmenu macro row,col,text;菜单显示宏定义mov ah,02hmov bh,00hmov dh,rowmov dl,colint 10hmov cx,0mov ah,09hlea dx,textint 21hendmdata segment; add your data here!;pkey db "press any key...$"kaishi db " welcome to play the game! $"mes0 db " =========================================$"mes1 db " 1.start game $"mes2 db " 2.select $"mes3 db " 3.exit $"mes4 db " =========================================$"mes5 db " select num of menu:$"mes12 db " =========================================$"mes13 db " 1.100 letters $"mes14 db " 2.200 letters $"mes15 db " 3.300 letters $"mes17 db " =========================================$"mes18 db "Correct Rate:$"mes7 db " press any key to start the game... $"mes8 db " press esc key return main menu $"mes10 db " Select The Letter's Num $"mes19 db " wait... $"mes11 db " when the game was over,press enter to restart$"mes9 db "Used Time:$"mes6 db "The correct number:$"col db 00h,24h,0fdh,0dh;颜色num dw ? ;以输入字母的个数numb dw ? ;输入正确字母的个数score dw ? ;每轮游戏的分数grade dw ?sum dw ?n db 26letters db 500 dup(0)hour db 0minu db 0seco db 0endsstack segmentdw 128 dup(0)endscode segmentstart:; set segment registers:mov ax, datamov ds, axmov es, ax; add your code here;clear_screen 0d,0d,24d,79d,07hFrame1:clear_screen 0d,0d,24d,79d,1eh ;清屏Init_boarder 0d,0d,'*',dl,80d ;显示边框上一排星号Init_boarder 24d,0d,'*',dl,80d ;显示边框下一排星号 Init_boarder 0d,0d,'*',dh,25d ;显示边框左一排星号 Init_boarder 0d,79d,'*',dh,25d ;显示边框右一排星号 menu 5d,20d,mes0menu 6d,26d,kaishi ;显示菜单menu 8d,30d,mes1menu 10d,30d,mes2menu 12d,30d,mes3menu 13d,20d,mes4menu 14d,20d,mes5inputMenuNum:mov ah,7 ;输入功能号,无回显int 21hcmp al,'1'je call num1cmp al,'2'je call num2cmp al,'3'je end1jmp inputMenuNum ;输入不符要求重输Frame2 procmov dl,al ;将选择的功能号显示出来mov ah,2int 21hclear_screen 1d,1d,23d,78d,1eh ;清屏,边框还存在menu 9d,20d,mes7menu 11d,20d,mes8; menu 12d,30d,mes10menu 13d,20d,mes11mov cx,2000h ;隐藏光标mov ah,01h ;设置光标大小int 10hmov ah,7 ;无回显输入字符int 21hmov cx,1010h ;显示光标mov ah,01hint 10hretFrame2 endpnum1 procmov dl,al ;将选择的功能号显示出来mov ah,2int 21hclear_screen 1d,1d,23d,78d,1eh;清屏,但边框存在menu 9d,20d,mes7menu 11d,20d,mes8;menu 12d,30d,mes10menu 13d,20d,mes11mov cx,2000h ;隐藏光标mov ah,01hint 10hmov ah,7 ;无回显输入字符int 21hmov cx,1010h ;显示光标mov ah,01hint 10hmov num,100call playretnum1 endpnum2 procmov dl,al ;将选择的功能号显示出来 mov ah,2int 21hclear_screen 1d,1d,23d,78d,1eh;清屏 menu 7d,20d,mes10menu 8d,20d,mes12menu 10d,20d,mes13menu 11d,20d,mes14menu 12d,20d,mes15menu 14d,20d,mes17menu 15d,20d,mes5inputMenuNum1:mov ah,07hint 21hcmp al,'1'jz m1cmp al,'2'jz m2cmp al,'3'jz m3cmp al,27 ;当输入esc键时退到主菜单 jz Frame1jmp inputMenuNum1m1:call Frame2mov num,100 ;设置字符串个数为100call playjmp m4m2:call Frame2mov num,200call playjmp m4m3:call Frame2mov num,300call playjmp m4m4: retnum2 endpplay procmov numb,0 ;正确字符个数clear_screen 02d,02d,23,78,1eh ;清屏(边框还存在) lea si,lettersmov bx,0call getletter ;调用生成字符串子程序menu 20d,15d,mes19setcusor 0d,3d,10d ;设置光标位置clear_screen 02d,02d,23,78,1eh ;清屏(边框还存在) call outlettersetcusor 0d,4d,10d ;设置光标位置mov ah,2ch ;获取当前时间int 21hmov hour,ch ;获取的小时放入hour中mov minu,cl ;获取的分钟放入minu中mov seco,dh ;获取的秒钟放入seco中call inputlettermenu 20d,5d,mes9call counttimecall outtimemenu 20d,25d,mes6mov ax,numbcall PRINTAXmenu 20d,50d,mes18call CorrectRateinput_quit:mov ah,07hint 21hcmp al,27jz Frame1cmp al,0dhjz call playjmp input_quitretplay endp;*************************************;实现随机产生字符串getletter procoutput_letter:mov ah,2ch ;获取时间 ch为小时,cl为分,dh为秒,dl为1%秒int 21hmov al,dl ;将1%秒放入al中mov ah,0 ;将ah置0,ax当被除数div n ;n为26,将商放到al中,将余数放入ah中mov dl,ah ;将余数放入dl中add dl,61h ;a的ascii码为61,将余数加上61得到随机产生字母的ascii码mov [si],dl ;将随机产生的字符放入到letters中inc si ;letters的偏移量加1inc bxcall DELAY ;计数量加1cmp bx,num ;将已产生的字符量与所需产生的字符数比较jnz output_letter ;当小于所需产生的字符数时,跳转至output_lettermov [si],'$' ;字符串结束retgetletter endp;*************************************;实现字符串的换行输出outletter proclea si,letters ;获取letters的首地址again:mov dl,[si] ;将字符串相应偏移地址里的字符放入dl 中mov ah,02h ;显示字符int 21hinc si ;letters偏移地址加1cmp [si],'$' ;判断是否已经到字符串的末尾jz q2 ;当已到达字符串末尾时跳转至q2,反之顺序执行mov ah,03h ;获取光标当前位置 dh=行号,dl=列号 mov bh,0int 10hcmp dl,75d ;判断光标列号是否为75,即已到达改行末尾jz q1 ;当光标列号是为75跳转至q1jmp againq1: add dh,2d ;将当前光标行号加2,实现隔行输出setcusor 0d,dh,10d ;重新设定光标位置jmp againq2: retoutletter endpinputletter proclea si,letters ;获取字符串的首地址mov cx,num ;将字符串的长度放入cx中input:push cx ;将cx压栈mov ah,03h ;获取光标当前位置 dh=行号,dl=列号 mov bh,0 ;页号为0int 10hcmp dl,75d ;将光标当前列号与75作比较jz l5 ;当光标当前列已是75则跳转到l5l6: mov ah,7 ;输入字符无回显,al接收输入字符的ascii 码int 21hcmp al,08h ;判断输入键是否为退格键(退格键ascii 码为08h)je l3 ;当输入退格键跳转至l3,若不是则往下执行cmp al,27 ;判断输入键是否为esc键(esc键ascii 码为27h)je quit ;当输入的是esc键,跳转至qiut,若不是则往下执行cmp al,[si] ;将输入字符与letters里相应字符比较je l1 ;当相等时跳转至l1,反之往下执行jne l2 ;当输入的字符与letters里相应字符不相等,跳转至l2done: mov dl,al ;将输入的字符放入dl中mov ah,2 ;输出字符int 21hinc si ;letters的偏移量加1pop cxdec cxjnz inputjmp l4l1: add numb,1 ;输入的字符正确,记录输入输入正确个数的numb加1mov ah,09H ;在当前光标位置显示字符,不改变光标位置mov bh,0Hmov bl,2fh ;背景颜色为绿色mov cx,1int 10Hjmp donel2:call SOUND ;输入错误mov ah,09H ;在当前光标位置显示字符,不改变光标位置mov bh,0Hmov bl,4fh ;Z表示颜色。
汇编打字练习
![汇编打字练习](https://img.taocdn.com/s3/m/e3a86d0b76c66137ee06195a.png)
攀枝花学院学生课程设计(论文)题目:打字练习学生姓名学号:所在院(系):计算机学院专业:2009计算机科学与技术班级:第二组指导教师:何老师职称:讲师2010年01月07日攀枝花学院本科学生课程设计任务书摘要微机原理及应用是一门实践性很强的课程;其课程设计目的在于综合运用所学知识,全面掌握微机计算机与DOS方式的工作原理、编程和使用方法;在设计中,通过小组协作提出并论证设计方案,进行软件调试,最后获得正确结果,可以加深和巩固对理论知识的更好掌握,进一步建立计算机应用系统体的概念,初步掌握DOS开发方法,为以后进行实际的软件应用开发奠定良好的基础。
本设计是利用Masm for window集成实验环境来实现得打字练习程序,当前,在计算机和许多手机上流行许多小游戏,小软件,应用都很广泛,比如本次编写的练习打字小程序就很有趣,不仅让我们学习打字,更加重要的是我们在编写的过程中更好的掌握学过的知识,锻炼了我们的编程技能。
通过运用汇编语言中有的循环,子程序调用等来完成程序的编写,并且通过对程序的调试,逐步的掌握汇编语言的功能,在自己不足的方面进行改正,进一步的巩固所学的知识,熟练应用汇编语言进行一些程序的制作,进一步培养了对编程的兴趣关键词课程设计,软件调试,打字练习,编程1 设计内容简介1.1 设计任务设计主菜单:按回车键进入打字练习;按ESC键进入延缓界面;按空格键暂停;按大写字母“E”程序结束。
将两位十进制数从屏幕上方落下,用户要在这个过程中键入落下的字母,在下落的过程中键入落下的数字,如果正确,数字消失;键入不正确,数字继续下落。
若键入正确,则得分,没有键入正确,不扣分。
在打字的过程中,每下落十个数记一次总成绩。
1.2 设计思想用汇编语言实现打字程序的思想,首先用BIOS的10H中断类型的02H功能置光标位置,接着用DOS的21H中断类型的09H功能显示字符串来显示主界面;调用DOS的21H的08H功能,接受从键盘输入的字符到AL寄存器,判断AL如果为回车以默认速度开始游戏,如为S键则进入速度选择界面,如为E键则退出程序;进入速度选择界面后,调用DOS的21H的08H功能,选择速度后进入游戏;进入游戏后,随机落下一字母,通过21H的06H功能调用,接受从键盘输入的字符到AL 寄存器,如键入ESC进入成绩界面,如键入空格则暂停游戏,如没有得到输入或输入错误则继续下落,输入正确则字母消失,并通过21H的02H功能调用发生响铃;接着继续下落其他字母,如果落下的字母数大于78个则退出游戏进入成绩界面。
最新汇编语言打字练习程序课程设计报告
![最新汇编语言打字练习程序课程设计报告](https://img.taocdn.com/s3/m/07e6c221f242336c1fb95e25.png)
课程设计说明书题目: 打字练习院系:专业班级:学号:学生姓名:指导教师:2010 年 12 月 31 日安徽理工大学课程设计(论文)任务书计算机科学与工程学院硬件教研室2010年12月17 日安徽理工大学课程设计(论文)成绩评定表摘要汇编语言是计算机能够给用户使用的最高效快捷的语言,也是唯一能对计算机所有硬件进行操纵的语言。
鉴于汇编语言的用途广泛以及重要性,我花费的大量的时间完成此次课程时机,打字练习。
打字练习是计算机常用的小应用程序,可以给想练习打字的人提供一个好的练习空间。
本文的核心部分是对于详细设计的讲解与分析,而这当中的侧重点又在于设计思想的再现。
关键词:功能模块,核心代码,随机字符,模块调用,功能分析目录1设计目的 (1)2概要设计 (2)2.1系统总体分析 (2)2.2主模块框图及说明 (2)3 详细设计 (4)3.1主模块及子模块说明 (4)3.2各模块详细设计 (4)3.2.1主界面模块 (4)3.2.2随机字母产生模块 (6)3.2.3字母落下模块 (7)3.2.4暂停模块 (8)3.2.5返回主界面模块 (9)4.程序调试 (9)4.1运行界面分析 (10)4.2调试过程及分析 (11)5心得体会 (12)5.1设计体会 (12)5.2系统改进 (12)参考文献 (13)1设计目的这次课设的任务是写一个程序,运行可执行程序后,出现主界面,按回车键出现由26个字母组成的乱序行,这时其中任一字母落下,在键盘上敲入该字母,如果输入正确,字母消失;按回车键进入打字练习;按ESC键返回主界面;按空格键暂停;按‘E’退出。
通过课程设计,主要达到以下目的:1. 增进对汇编语言的认识,加强用汇编语言编程的能力;2. 掌握汇编语言的中断调用功能的应用,可以用汇编语言调用各种中断调用功能,并由此实现对硬件的控制等;3. 了解和掌握汇编语言程序设计过程、方法及实现,为以后微机原理课程的学习打下良好基础;4. 通过课程设计可以使我们更加了解书上的知识,了解书上的语句并且能够应用自己的程序中;5. 掌握屏幕输出显示的设计方法。
打字计时练习程序设计
![打字计时练习程序设计](https://img.taocdn.com/s3/m/7691793e657d27284b73f242336c1eb91a373363.png)
目录1 设计目的 (3)2 设计任务 (3)3 设计过程 (4)3.1 方案比较与认证 (4)3.2 程序设计思想 (4)3.3 程序流程图设计 (5)3.3.1 主程序流程图设计 (5)3.3.2 其他子程序原理及流程图 (6)3.4 调试过程及结果 (11)3.4.1 调试过程出现的问题及解决 (11)3.4.2 程序运行结果 (12)4 结束语 (14)参考文献 (15)附录 (16)摘要作为一门新兴技术,微机及接口技术的发展在二十至二十一世纪非常迅速,现在对于技术的进步已成为了不可或缺的部分。
微机的应用十分的广泛,种类也很丰富,而且现在科技的进步使得人们对微机的运用变得越来越成熟。
然而提到微机,必不可少的便是汇编语言了,虽说现在的各种高级语言如:C语言、VB等早已变得比汇编语言更加适合于编程人员的使用,但是作为一个想真正学好微机的人,汇编语言是必不可少的工具。
相对于高级语言,汇编更加“接近”硬件,懂得汇编的人员在出现故障时可以更容易发现问题所在,用汇编编写程序可以更加清晰地知道程序的执行过程。
此外,用汇编语言编写的程序相对高级语言来说所占的内存要小的多,且一般执行起来要快得多。
所以,学习汇编对于我们来说仍是很有益的。
本次课程设计就是想通过运用汇编语言来编写程序以达到题目所给的要求,使得对微机(这里是8086)的知识更见牢固,也使得我们能对汇编语言更加灵活地运用。
要想顺利完成这次课程设计的任务,首先得对微机的内部结构有一定的了解,还要有对汇编语言的掌握与熟悉,比如各种指令的灵活运用,各种语句语法的运用以及对程序的灵活调制。
本次课程设计的任务是编写一个打字计时练习的程序,这将会比平时的学习与练习都复杂得多,因此在完成这次课设的过程势必会遇到不少挑战,但与此同时也会给予更多的锻炼和提高。
关键词:微机原理汇编语言打字计时程序调制打字计时练习程序设计1 设计目的微机原理是所需掌握的现代科学中必不可少的一门,微机原理和接口技术的运用以及渗入到生活的方方面面,在人们的技术进步过程中有必不可少的作用。
31微机原理课程设计打字计时练习
![31微机原理课程设计打字计时练习](https://img.taocdn.com/s3/m/24541712c5da50e2524d7f0b.png)
课程设计题目打字计时练习的程序学院自动化专业电气工程及其自动化班级电气1101姓名李萌指导教师石云2014 年 1 月11 日课程设计任务书学生姓名:李萌专业班级:电气1101指导教师:石云工作单位:自动化学院题目: 打字计时练习的程序初始条件:在缓冲区中预放了一些字母,运行时,可按照屏幕上显示的字母输入练习,每输入完一行按回车键后,可显示出练习输入的时间。
按Q退出程序。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)设计任务及要求分析(2)方案比较及认证说明(3)系统原理阐述(4)硬件设计课题需要说明:硬件原理,电路图,采用器件的功能说明(5)软件设计课题需要说明:软件思想,流程图,源程序及程序注释(6)调试记录及结果分析(7)总结(8)参考资料(9)附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图时间安排:12月30日~12月31日:收集资料,方案选择1月2日~1月6日:整体流程,程序细节,调试程序1月7日~1月8日: 课程设计报告撰写1月9:交报告,程序演示,答辩指导教师签名:年月日系主任(或责任教师)签名:年月日摘要 (1)1. 设计概述 (2)1.1设计任务 (2)1.2设计要求 (2)1.3设计目的 (2)1.4设备环境 (2)2. Masm for window集成实验环境 (3)2.1 Masm for window集成实验环境介绍 (3)2.2 DOS中断介绍 (3)3.课程设计的思路及内容 (5)3.1.硬件设计 (5)3.2软件设计 (6)3.3程序流程图 (6)4.代码设计 (8)4.1功能模块说明 (8)4.1.1定义数据段,设置主要参数: (8)4.1.2代码段 (8)4.1.3使用子程序分化各子功能 (8)4.2系统运行过程描述 (17)4.3程序的调试与运行 (17)4.3.1打字练习的运行情况 (17)4.3.2结果分析 (19)4.4调试中出现的问题 (19)5.总结 (20)参考文献 (22)微机原理及应用是一门实践性很强的课程;其课程设计目的在于综合运用所学知识,全面掌握微型计算机与DOS方式的工作原理、编程和使用方法;在设计中,通过小组协作提出并论证设计方案,进行软件调试,最后获得正确的结果,可以加深和巩固对理论知识的更好掌握,进一步建立计算机应用系统体概念,初步掌握DOS开发方法,为以后进行实际的软件应用开发奠定良好的基础。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言课程设计报告( 2012 -- 2013 年度第 1 学期)课题名称:打字计时练习程序目录1 设计目的 (1)2 概要设计 (1)2.1系统总体分析 (1)2.2主模块框图 (2)3 详细设计 (2)3.1主模块及子模块说明 (2)3.2各模块详细设计 (3)3.2.1主界面模块 (3)3.2.2中断处理模块 (3)3.2.3 打字计时模块 (5)4 程序调试 (8)4.1运行界面分析 (8)4.2调试过程及分析 (10)5 心得体会 (10)5.1设计体会 (10)5.2系统改进 (11)参考文献 (12)附录 (13)附录1源程序清单 (13)附录1.1 打字计时练习模块源程序 (13)打字计时练习程序1 设计目的这次课程的任务是写一个在键盘上练习打字并能统计时间的程序,运行可执行程序后,按回车键出现主界面,进入英文打字练习并计时,通过课程设计,主要达到以下目的:1.增进对汇编语言的认识,加强运用汇编语言编程的能力;2.掌握汇编语言的中断调用功能的应用,可以用汇编语言调用各种调用功能,并由此实现对硬件的控制等;3.了解和掌握汇编语言程序设计过程、方法及实现,为以后微机原理课程的学习打下坚实的基础;4.通过课程设计可以使我们更加了解书上的知识,了解书上的语句并能用到自己的程序设计中;5.掌握屏幕输出显示的设计方法。
2 概要设计2.1 系统总体分析在缓冲区中预放了一些字母,运行时,可按照屏幕上显示的字母输入练习,每输入完一行按回车键后,可显示出练习输入的时间。
当一个句子输入完后(回车键作为结束符),屏幕上以min:sec:msec的格式显示出键入字符的时间。
在每次打字之前,屏幕上先显示一个例句,然后打字员按照例句,将句中字符通过键盘输入。
这个过程共进行五次,当键入一个Enter键时,退出打字计时练习程序。
在键盘上联系的打字例句及其地址表、计时单位等预放在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.2 主模块框图程序的核心模块是打字计时,通过显示的例句进行打字练习,最后显示出运行时间,主体流程图如下:a.建立汇编原程序—通过———→b。
编译为目标文件—↓——→d.连接为可执行文件↑↓∣ c.不通过,重新修改(语句错误)↓∣———————————————————↓↑f.不正确,用调式工具调式,重新修改(逻辑错误)↓﹂———————————————————————e.运行↓正确g.完成3 详细设计3.1 主模块及子模块说明主模块:运行可执行程序显示打字主界面缓冲区:BUFFER, BUFPT1 ,BUFPT2调用中断8259,键盘中断,时钟中断,设置打字计时文件输入所显示的例句、显示所用时间、回到主界面程序顺序。
3.2各模块详细设计3.2.1主界面模块主界面模块:采用宏调用的方式将界面清屏并显示主界面和字母组成的乱序行界面。
程序运行后,我们首先要进行选择要继续进行即进入打字练习程序还是终止练习退出程序。
所以需要设置一个程序判断键盘键入的字符,规定E键和ENTER 键分别为终止程序的控制键和进入打字练习程序的控制键,即当检验到键盘输入E后,退出程序;当键盘输入为ENTER时进入打字练习程序。
程序段中用到了中断INT21,利用中断的有关规定,先将01H存入到AH当中,则AL中即为由键盘键入的字符。
在此,先通过CMP指令来判断输入的字符是否是ENTER键(ENTER键的ASCII码为十六进制的0DH,程序开头部分的宏定义已经令CR 为0DH),如果是的话,程序将跳转到程序speed3,speed3是定义的又一个程序,该程序即为打字练习程序的核心部分。
如果不是ENTER的话,将执行下一条指令,即判断键盘键入的是否为E键,此功能由CMP AL,45H来实现,其中45H是E键的ACSII码的十六进制的表示。
如果是E键的话,程序将跳转到exit子程序,再通过exit程序来判断是否要退出打字练习程序。
如果键盘键入的既不是ENTER也不是E 键的话,程序将继续等待键盘的输入,直到输入的按键为ENTER和E当中的一个为止。
3.2.2中断处理模块利用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.分析出口参数用户自编中断处理程序基本形式(1)将原中断向量保存在堆栈中或自设的存储单元中。
mov ah,35hmov al,int-typeint 21hmov keep-ip,bxmov keep-cs,es(2)设置自编处理程序的中断向量:push dsmov dx,offset routinemov ax,seg routinemov ds,axmov al,int-typemov ah,25hint 21hpop ds(3)当中断程序结束时,必须恢复原来的中断向量,否则后续程序不能正确使用系统提供的例行程序。
push dsmov dx,keep-ipmov ax,keep-csmov ds.axmov al,int-typemov ah,25hint 21hpop ds(4)编写中断处理子程序以完成中断处理功能,结束时由IRET返回中断点。
routine proc farpush axsti::mov al,20hmov 20h,alpop axiretroutine endp3.2.3 打字计时模块打字的计时部分就是定时器中断处理部分。
定时器的终端类型为08H,中断优先级比键盘高,只要在键盘中断处理程序KBINT中用一条STI指令允许高级中断,那么在整个键盘的输入过程中,定时器会以每秒18.2次的频率产生中断。
根据计时的需求,在整个键盘的输入过程中,必须把定时器中断的次数转换成时间,因此需要使用1CH中断扩充原定时期例行程序的功能。
在自编的1CH中断例行程序中,定时器中断的次数记录在计数单元count中,当count计数值为18时,sec计数单元加1,当sec计数值达到60时,main计数单元加1.当然,输入一个句子无论如何也不会达到小时计,所以对hours计数值的调整判断,实际上只起到推出定时器中断的作用。
当打完一个例句后按Enter键显示打字练习时间:call 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,12 return:pop dsstiiretclint endpinct proc nearmov word ptr[bx],0add bx,2inc word ptr[bx]cmp word ptr[bx],60jne exitcall inctexit: retinct endpdisptime proc nearmov 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 endpbindec proc nearmov cx,100dcall decdivmov cx,10dcall decdivmov cx,1call decdivretbindec endpdecdiv proc nearmov dx,0div cxmov bx,0add al,30hmov ah,0ehint 10hmov ax,dxretdecdiv endp4 程序调试4.1 运行界面分析通过设计和编写程序代码,运行程序后其结果为先显示开始界面即为菜单界面,而后进入打字训练界面,打完字敲击回车键就马上进入下一行语句的训练,其具体的调试结果如下所示:进入运行界面:(开始的菜单界面)运行cmd找到C:\TASM50\TASM50\TASM50\BIN中的程序,并通过tasm和tlink 来确认程序正确,无运行错误,具体见上图。