《2022年打字练习程》由会员分享,可在线阅读,更多相关《2022年打字练习程(19页珍藏版)》请在金锄头文库上搜索。
1、信息科学与技术学院微机原理与接口技术课程设计课 题 名 称:打 字 练 习 程 序学 生 姓 名:孟健学号: 2006081778 专业 、年级:计科06-2 指 导 教 师:农峰时间: 2008.9.4 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 19 页 - - - - - - - - - 1、题目及要求:1.1 、题目: 打字练习程序1.2 、要求:1) 、缓冲区中预放了一些字母2) 、运行时 ,可按照屏幕上显示的字母输入练习3) 、当按结束 ,可显示出练习输入
2、的时间,并且能显示出正确率。4) 、要求界面美观。2、功能设计:2.1 、功能模块:主程序模块 -主要是随机产生字符并将字符送入缓冲区,调用其他子程序和宏设置窗口及时间、字符总数和正确个数。打字结果计算与显示模块 ( UseTimeAndOut ,RightRata_out)-主要计算所用时间及正确率并输出。设置字符颜色模块 (clew_char )-主要设置打字时缓冲区字符和打字区字符的颜色,包括错误时字符的颜色显示。字符满行处理模块( isFullLine)-主要功能是当字符输入满行时进行换行。输出模块( OutTime,btod_out )-输出程序运行时的时间。统计模块( Tongji
3、 )-统计字符个数和正确个数并记录时间。宏的作用:清屏( Clear )- 用于按要求清理屏幕(不同颜色),以便产生想要的窗口。设置光标位置( SETGB )-用于移动光标位置,以便按要求输出。读光标位置( READGB)-用于读取当前光标位置。提示( Tishi )-用于输出提示语句。2.2 、功能图 :名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 19 页 - - - - - - - - - 开始段地址初始化随机产生字符串开窗口开始打字输入字符字符=27?退出打字屏
4、幕上显示结果结束将产生的字符串输出到屏幕上缓冲区中字是否打完?YYNN3、详细设计:3.1 、设计方法 :该课程设计只是应用了些简单的函数调用,中断,宏调用。其中随机产生字符的实现是通过调用中断( ah=2ch,int 10)取系统时间的 1/100 来得到一组随机数,把这些随机数当做指针,然后取指针对应的字符表中相应的字符,来得到一串字符。在把结果名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 19 页 - - - - - - - - - 显示到屏幕上时将数据拆分后输出
5、到屏幕上。如123在屏幕上显示时必须一个一个输出,还有在输出小数点时也采取了相应的办法。在计算时间上记录系统在打字开始和结束时的时间,然后相减得到。在打字时通过比较记录正确个数,最终除以总个数得到正确率。在打字过程中还通过设置字符属性来区分正确和错误字符的不同。3.2 、各功能模块及流程图输出正确率模块计算打字时间并输出模块输出正确率RightRata_outMov ax,Rnumber mov cx,100Mul cxdiv Anumbermov bx,ax输出整数部分输出. 输出小数部分输出%结束计算打字时间并输出UseTimeAndOut 提取打字结束时系统时间 sub dh,Stime
6、2jae SecUnBlow add dh,60 dec cl sub cl,Stime1 jns MinUnBlowjz SecUnBlowadd cl,60 dec ch sub ch,Stime0 CALL OutTime结束NNNYYY名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 19 页 - - - - - - - - - 数据打印输出模块输出BX 中内容btod_outMov ax,bxmov si,3Mov bl,10 div blMovtempsi,ah
7、and ax,00ffhdec sicmp si,0 mov bp,1 mov si,1YNmov dl,tempsi add dl,0 cmp dl,0Ymov bp,0N输出字符inc sicmp si,3Ncmp bp,1YNY输出字符 cmp bp,1YN退出名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 19 页 - - - - - - - - - 记录当前时间和改变字符颜色模块正确个数及已打个数模块记录当前时间和正确个数及已打个数TONGJI开窗口设置光标位置
8、输出提示时间输出字符正确与总的个数比结束改变字符颜色读光标位置READGB 0mov ax,bpMov bl,51 div bl mov dh,4 mov dl,14add dh,aladd dl,ahmov temp0,dhmov temp1,dl设置光标及字符属性N cmp bp,0cmp temp1,14Y sub temp1,1Nmov bx,bp dec bx设置光标及字符属性Ysub temp0,1add temp1,50返回3.3 重点难点及解决办法:刚开始看到这个题目的时候,我感觉这个题目还是很简单的,在数据区直接存放一串字符,接着输入字符与已有字符做比较,记录正确个数和总的字
9、符个数,然后二者一除就得到正确率了,至于打字时间就是取两次系统时间,结束和开始时间相减便得到了。当我着手做时我才发现这并不是我想象的那样。我遇到的第一个问题就是怎么把字名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 19 页 - - - - - - - - - 符串显示在屏幕上指定的位置及在打字时怎么看到自己在打那个字符(我们不可能去数吧!),经过查阅资料我学到了用光标定位和设置字符的颜色来解决这一问题。其次我遇到的问题是怎么才能在屏幕上正确的显示信息,当要在屏幕上显示1
10、2:21:23,12.2%,123这些时我该怎么解决呢?我最终的解决办法是将字符拆开一个一个输出。在本程序中已知字符串我采用了随机产生,在随机产生时我遇到的问题是产生的字符由于程序运行时间太短而都是同一字符,后来我通过延时解决了这个问题。4、总结:通过多次的实践,使我深切的体会到培养动手能力的重要性,程序设计是一门实践性很强的东西,不仅要学好书本知识,那是远远不够的,还必须随时把所学知识投入实际应用之中,在此过程中多参照些相关资料,只有这样,才能达到学习的目的,才能学好一门编程语言。这次实践中,我感觉到自己掌握的只是太匮乏了,太不深刻了,当用到某个知识点时,经常是脑子了有个印象,而确切的却想不
11、起来,幸亏还可以查阅资料要不就什么也不会了。通过这次实践,我觉的必须很熟练的掌握专业知识,才能很顺畅的编程,才能提高效率,考虑问题也会更全面,编写的程序也会很健壮。5、参考文献:1 IBM-PC 汇编语言程序设计沈美明 清华大学出版社 2001 年8月第2版2 IBM-PC 汇编语言程序设计例题习题集沈美明清华大学出版社 1991年6月第1版3 微机系统和接口应用技术朱世鸿著 清华大学出版社 2006年9月第1版6、附: 源程序;- COLORCHAR MACRO char,color push ax push bx push cx push dx mov ah,9h;在光标位置显示字符和字符
12、属性 mov al,char;AL字符 mov bh,0;显示页 mov bl,color;字符属性 mov cx,1;字符重复个数 int 10h mov ah,03h;读光标位置 ;DH:DL= 行:列 mov bh,0;显示页号 int 10h mov ah,02;置光标位置 inc dl;列 int 10h pop dx pop cx pop bx pop ax 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 19 页 - - - - - - - - - ENDM
13、 ;- BACKCHAR MACRO char,color mov ah,02h; mov dl,08h;退格 int 21h COLORCHAR char,color ENDM ;- CLEAR MACRO alz,bhz,chz,clz,dhz,dlz;清屏窗口 push ax push bx push cx push dx mov al,alz;上卷行数 mov bh,bhz;卷入行属性 mov ch,chz;左上角行数 mov cl,clz;左上角列数 mov dh,dhz;左下角行数 mov dl,dlz;左下角列数 mov ah,06h int 10h pop dx pop cx
14、pop bx pop ax ENDM ;- ;- SETGB MACRO bhz,dhz,dlz; 设置光标位置 push ax push bx push cx push ax mov bh,bhz;显示页号 mov dh,dhz;行 mov dl,dlz;列 mov ah,2;置光标位置 int 10h pop dx pop cx pop bx pop ax 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 19 页 - - - - - - - - - ENDM ;- R
15、EADGB MACRO bhz;读光标位置 push ax push bx push cx push dx mov bh,bhz;显示页号 mov ah,03h;读光标位置 int 10h mov gbattr0,dh;记录光标行 mov gbattr1,dl;记录光标列 pop dx pop cx pop bx pop ax ENDM ;- LINEFULL MACRO lmax,lact push ax push bx push cx push dx mov ax,lact cmp ax,0 jz LFEXIT mov dx,0 cwd mov bx,lmax div bx cmp dx,
16、0 jz LNFU jmp LFEXIT LNFU: mov FullFlag,1 LFEXIT: pop dx pop cx pop bx pop ax ENDM ;- TISHI MACRO row,col,addrr push ax push dx SETGB 0,row,col;设置光标位置名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 19 页 - - - - - - - - - mov ah,09h lea dx,addrr int 21h pop dx po
17、p ax ENDM ;- data segment addrr db 400 dup($) addrr1 db abcdefghijklmnopqrstuvwxyz0123456789$ addrr2 db 400 dup($) Anumber dw 0 ;总字符个数 Rnumber dw 0 ;正确字符个数 LineMax dw 0 ;满行的字符数 LineAct dw 0 ;当前行字符数 FullFlag db 0 ;满行标志 FullFlag=1 满行, FullFlag=0 未满 gbattr db 2 dup(0) ;存放字符所在行列 Stime db 3 dup(0) temp d
18、b 5 dup(0) ts1 db Stime:$ ts2 db Rrate:$ ts3 db Total Use-Time:$ ts4 db Total Characters:$ ts5 db Correct-Reta:$ ts6 db Press any key to end!$ ts7 db An ESC Jian KeYi SuiShi TuiChu!$ ts8 db *DaZi LianXi*$ data ends code segment assume ds:data,cs:code start: mov ax,data mov ds,ax ;- mov di,0 ;随机产生字符
19、mov bx,65 zifu: mov ah,2ch int 21h mov al,dl cbw mov si,ax cmp si,35 ja zifu 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 19 页 - - - - - - - - - mov al,addrr1si mov addrrdi,al inc di dec bx push di push si mov di,400h Aa1: mov si,0ffffh Aa2: dec si jnz Aa2 d
20、ec di jnz Aa1 pop si pop di cmp bx,0 jnz zifu ;- CLEAR 0,57h,0,10,23,69 CLEAR 0,17H,3,12,22,66 CLEAR 0,70h,4,14,22,64 CLEAR 0,25H,12,14,14,64 CLEAR 0,70h,13,18,13,35 CLEAR 0,70H,13,43,13,60 ;- SETGB 0,0,30 ;输出上面提示语句 CLEAR 0,25h,0,28,0,49 CLEAR 0,25h,2,23,2,54 CLEAR 0,57h,1,14,1,64 mov ah,09h lea dx,
21、ts8 int 21h SETGB 0,2,24 mov ah,09h lea dx,ts7 int 21h ;- SETGB 0,4,14 mov di,0 mov cx,0ffffh AD: mov dl,addrrdi ;装载字符 cmp dl,$ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 19 页 - - - - - - - - - jz A2 push dx mov bp,di CALL isFullLine pop dx mov ah,02h int
22、21h inc di loop AD A2: mov ah,2ch ;取系统时间 int 21h mov Stime0,ch mov Stime1,cl mov Stime2,dh SETGB 0,15,14 CALL TONGJI mov cx,0ffffh mov di,0h AS: cmp addrrdi,$ jnz ASnt00 jmp AEND ASnt00: mov bp,di CALL isFullLine mov bp,di CALL clew_char ;改变字符颜色;= reinput: ;输入字符开始打字 READGB 0 mov ah,01 int 21h cmp al
23、,27 ;是否退出 jnz al27nt jmp exit ;- al27nt: cmp al,0dh jnz al0dnt SETGB 0,gbattr0,gbattr1 jmp reinput al0dnt: cmp al,08 jnz ASnext cmp gbattr1,14 jnz ASnz SETGB 0,gbattr0,gbattr1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 19 页 - - - - - - - - - jmp reinput AS
24、nz: mov ah,02h mov dl, int 21h mov ah,02h mov dl,08h int 21h dec di dec Anumber push ax mov al,addrr2di cmp al,addrrdi jnz AS1nt dec Rnumber AS1nt: pop ax CALL TONGJI mov bp,di CALL clew_char ;改变字符颜色 jmp reinput ;- ;= ASnext: inc Anumber CALL TONGJI mov addrr2di,al cmp al,addrrdi jnz AER inc Rnumber
25、 CALL TONGJI A3: inc di loop AS1 ;直接跳太远AS1: jmp AS AEND: jmp exit AER: mov temp1,al BACKCHAR temp1,74h jmp A3 exit: CLEAR 0,07,8,16,17,63 CLEAR 0,57,10,20,15,59 TISHI 11,24,ts3 call UseTimeAndOut TISHI 12,24,ts4 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 1
26、9 页 - - - - - - - - - mov bx,Anumber call btod_out TISHI 13,24,ts5 call RightRata_out TISHI 14,30,ts6 mov ah,08 int 21h mov ah,4ch int 21h ;- RightRata_out proc near ;输出正确率 push ax push bx push cx push dx mov ax,Rnumber;正确字符个数 mov cx,100 mul cx div Anumber ;字符总数 mov bx,ax CALL btod_out push dx mov a
27、h,02h mov dl,. int 21h pop dx mov ax,dx mul cx div Anumber mov bx,ax CALL btod_out mov ah,2h mov dl,% int 21h pop dx pop cx pop bx pop ax ret RightRata_out endp ;- 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 19 页 - - - - - - - - - UseTimeAndOut proc near ;计
28、算打字时间并输出 mov ah,2ch int 21h sub dh,Stime2 jns SecUnBlow jz SecUnBlow add dh,60 dec cl SecUnBlow: sub cl,Stime1 jns MinUnBlow jz SecUnBlow add cl,60 dec ch MinUnBlow: sub ch,Stime0 CALL OutTime ret UseTimeAndOut endp ;- OutTime proc near ;显示时间ch:cl:dh mov al,ch cbw mov bx,ax CALL btod_out mov ah,02h
29、mov dl,: int 21h mov al,cl cbw mov bx,ax CALL btod_out mov ah,02h mov dl,: int 21h mov al,dh cbw mov bx,ax CALL btod_out ret OutTime endp ;- TONGJI proc near ;记录当前时间和正确个数及已打个数 push ax 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 19 页 - - - - - - - - - push b
30、x push cx push dx READGB 0 SETGB 0,13,20 CLEAR 0,70h,13,18,13,35 mov ah,09h lea dx,ts1 int 21h mov ah,2ch int 21h call UseTimeAndOut SETGB 0,13,45 mov ah,09h lea dx,ts2 int 21h mov ax,Rnumber mov bx,ax call btod_out mov ah,2h mov dl,/ int 21h mov ax,Anumber mov bx,ax call btod_out SETGB 0,gbattr0,gb
31、attr1 pop dx pop cx pop bx pop ax ret TONGJI endp ;- btod_out proc near ;输出BX 中内容 把数据打印输出 push ax push cx push dx push bp mov ax,bx mov si,3 rota1: mov bl,10 div bl mov tempsi,ah 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 19 页 - - - - - - - - - and ax,00ff
32、h dec si cmp si,0 jnz rota1 mov bp,1 mov si,1 rota2: mov dl,tempsi add dl,0 cmp dl,0 jz btodeal mov bp,0 btrt1: mov ah,02h int 21h btrt2: inc si cmp si,3 jna rota2 ;- 全部为 0时输出一个 0 cmp bp,1 jnz RT mov ah,2h int 21h ;- jmp RT btodeal: cmp bp,1 jz btrt2 jmp btrt1 RT: pop bp pop dx pop cx pop ax ret bto
33、d_out endp ;- isFullLine proc near ;满行后换行 push ax push bx mov ah,gbattr0 mov al,gbattr1 mov LineMax,51 ;满行时为 51个字符 mov LineAct,bp LINEFULL LineMax,LineAct ;判断是否满行 mov bl,FullFlag ;满行时为 FullFlag= 1 cmp bl,0 jz isfexit 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17
34、页,共 19 页 - - - - - - - - - READGB 0 ;读光标位置 add gbattr0,1 sub gbattr1,51 SETGB 0,gbattr0,gbattr1;设置光标位置 mov FullFlag,0 ;满行标志置 0 isfexit: mov gbattr0,ah ;记录光标当前位置 mov gbattr1,al pop bx pop ax ret isFullLine endp ;- clew_char proc near ;改变字符颜色 push ax push bx push cx push dx push si READGB 0 mov ax,bp
35、mov bl,51 div bl mov dh,4 mov dl,14 add dh,al add dl,ah mov temp0,dh mov temp1,dl SETGB 0,temp0,temp1 COLORCHAR addrrbp,70h cmp bp,0 jz resetgb cmp temp1,14 jz clew2 sub temp1,1 clew1: mov bx,bp dec bx SETGB 0,temp0,temp1 COLORCHAR addrrbx,5eh jmp resetgb clew2: sub temp0,1 add temp1,50 jmp clew1 re
36、setgb: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 19 页 - - - - - - - - - SETGB 0,gbattr0,gbattr1 pop si pop dx pop cx pop bx pop ax ret clew_char endp ;- code ends end start 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 19 页 - - - - - - - - -