打字练习程序文档格式.docx
- 文档编号:17267599
- 上传时间:2022-11-30
- 格式:DOCX
- 页数:25
- 大小:124.09KB
打字练习程序文档格式.docx
《打字练习程序文档格式.docx》由会员分享,可在线阅读,更多相关《打字练习程序文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
在打字时通过比较记录正确个数,最终除以总个数得到正确率。
在打字过程中还通过设置字符属性来区分正确和错误字符的不同。
3.2、各功能模块及流程图
输出正确率模块计算打字时间并输出模块
数据打印输出模块
记录当前时间和改变字符颜色模块
正确个数及已打个数模块
3.3重点难点及解决办法:
刚开始看到这个题目的时候,我感觉这个题目还是很简单的,在数据区直接存放一串字符,接着输入字符与已有字符做比较,记录正确个数和总的字符个数,然后二者一除就得到正确率了,至于打字时间就是取两次系统时间,结束和开始时间相减便得到了。
当我着手做时我才发现这并不是我想象的那样。
我遇到的第一个问题就是怎么把字符串显示在屏幕上指定的位置及在打字时怎么看到自己在打那个字符(我们不可能去数吧!
),经过查阅资料我学到了用光标定位和设置字符的颜色来解决这一问题。
其次我遇到的问题是怎么才能在屏幕上正确的显示信息,当要在屏幕上显示‘12:
21:
23’,‘12.2%’,‘123’这些时我该怎么解决呢?
我最终的解决办法是将字符拆开一个一个输出。
在本程序中已知字符串我采用了随机产生,在随机产生时我遇到的问题是产生的字符由于程序运行时间太短而都是同一字符,后来我通过延时解决了这个问题。
4、总结:
通过多次的实践,使我深切的体会到培养动手能力的重要性,程序设计是一门实践性很强的东西,不仅要学好书本知识,那是远远不够的,还必须随时把所学知识投入实际应用之中,在此过程中多参照些相关资料,只有这样,才能达到学习的目的,才能学好一门编程语言。
这次实践中,我感觉到自己掌握的只是太匮乏了,太不深刻了,当用到某个知识点时,经常是脑子了有个印象,而确切的却想不起来,幸亏还可以查阅资料要不就什么也不会了。
通过这次实践,我觉的必须很熟练的掌握专业知识,才能很顺畅的编程,才能提高效率,考虑问题也会更全面,编写的程序也会很健壮。
5、参考文献:
[1]《IBM-PC汇编语言程序设计》沈美明清华大学出版社2001年8月第2版
[2]《IBM-PC汇编语言程序设计例题习题集》沈美明清华大学出版社1991年6月第1版
[3]《微机系统和接口应用技术》朱世鸿著清华大学出版社2006年9月第1版
6、附:
源程序
;
---------------------------------------------
COLORCHARMACROchar,color
pushax
pushbx
pushcx
pushdx
movah,9h;
在光标位置显示字符和字符属性
moval,char;
AL字符
movbh,0;
显示页
movbl,color;
字符属性
movcx,1;
字符重复个数
int10h
movah,03h;
读光标位置;
DH:
DL=行:
列
显示页号
movah,02;
置光标位置
incdl;
popdx
popcx
popbx
popax
ENDM
---------------------------------------
BACKCHARMACROchar,color
movah,02h;
movdl,08h;
退格
int21h
COLORCHARchar,color
CLEARMACROalz,bhz,chz,clz,dhz,dlz;
清屏窗口
moval,alz;
上卷行数
movbh,bhz;
卷入行属性
movch,chz;
左上角行数
movcl,clz;
左上角列数
movdh,dhz;
左下角行数
movdl,dlz;
左下角列数
movah,06h
------------------------------------------
SETGBMACRObhz,dhz,dlz;
设置光标位置
行
movah,2;
-------------------------------------------
READGBMACRObhz;
读光标位置
movgbattr[0],dh;
记录光标行
movgbattr[1],dl;
记录光标列
LINEFULLMACROlmax,lact
movax,lact
cmpax,0
jzLFEXIT
movdx,0
cwd
movbx,lmax
divbx
cmpdx,0
jzLNFU
jmpLFEXIT
LNFU:
movFullFlag,1
LFEXIT:
TISHIMACROrow,col,addrr
SETGB0,row,col;
movah,09h
leadx,addrr
datasegment
addrrdb400dup('
$'
)
addrr1db'
abcdefghijklmnopqrstuvwxyz0123456789$'
addrr2db400dup('
Anumberdw0;
总字符个数
Rnumberdw0;
正确字符个数
LineMaxdw0;
满行的字符数
LineActdw0;
当前行字符数
FullFlagdb0;
满行标志FullFlag=1满行,FullFlag=0未满
gbattrdb2dup(0);
存放字符所在行列
Stimedb3dup(0)
tempdb5dup(0)
ts1db'
Stime:
ts2db'
Rrate:
ts3db'
TotalUse-Time:
ts4db'
TotalCharacters:
ts5db'
Correct-Reta:
ts6db'
Pressanykeytoend!
ts7db'
AnESCJianKeYiSuiShiTuiChu!
ts8db'
***DaZiLianXi***$'
dataends
codesegment
assumeds:
data,cs:
code
start:
movax,data
movds,ax
----------------------------------------------
movdi,0;
随机产生字符
movbx,65
zifu:
movah,2ch
moval,dl
cbw
movsi,ax
cmpsi,35
jazifu
moval,addrr1[si]
movaddrr[di],al
incdi
decbx
pushdi
pushsi
movdi,400h
Aa1:
movsi,0ffffh
Aa2:
decsi
jnzAa2
decdi
jnzAa1
popsi
popdi
cmpbx,0
jnzzifu
CLEAR0,57h,0,10,23,69
CLEAR0,17H,3,12,22,66
CLEAR0,70h,4,14,22,64
CLEAR0,25H,12,14,14,64
CLEAR0,70h,13,18,13,35
CLEAR0,70H,13,43,13,60
SETGB0,0,30;
输出上面提示语句
CLEAR0,25h,0,28,0,49
CLEAR0,25h,2,23,2,54
CLEAR0,57h,1,14,1,64
leadx,ts8
int21h
SETGB0,2,24
leadx,ts7
---------------------------------------------
SETGB0,4,14
movdi,0
movcx,0ffffh
AD:
movdl,addrr[di];
装载字符
cmpdl,'
jzA2
movbp,di
CALLisFullLine
movah,02h
loopAD
A2:
movah,2ch;
取系统时间
movStime[0],ch
movStime[1],cl
movStime[2],dh
SETGB0,15,14
CALLTONGJI
movdi,0h
AS:
cmpaddrr[di],'
jnzASnt00
jmpAEND
ASnt00:
CALLisFullLine
CALLclew_char;
改变字符颜色
==========================================
reinput:
;
输入字符开始打字
READGB0
movah,01
cmpal,27;
是否退出
jnzal27nt
jmpexit
al27nt:
cmpal,0dh
jnzal0dnt
SETGB0,gbattr[0],gbattr[1]
jmpreinput
al0dnt:
cmpal,08
jnzASnext
cmpgbattr[1],14
jnzASnz
ASnz:
movdl,'
'
movdl,08h
decdi
decAnumber
moval,addrr2[di]
cmpal,addrr[di]
jnzAS1nt
decRnumber
AS1nt:
==========================================
ASnext:
incAnumber
movaddrr2[di],al
jnzAER
incRnumber
A3:
loopAS1;
直接跳太远
AS1:
jmpAS
AEND:
AER:
movtemp[1],al
BACKCHARtemp[1],74h
jmpA3
exit:
CLEAR0,07,8,16,17,63
CLEAR0,57,10,20,15,59
TISHI11,24,ts3
callUseTimeAndOut
TISHI12,24,ts4
movbx,Anumber
callbtod_out
TISHI13,24,ts5
callRightRata_out
TISHI14,30,ts6
movah,08
movah,4ch
---------------------------------------------------
RightRata_outprocnear;
输出正确率
movax,Rnumber;
movcx,100
mulcx
divAnumber;
字符总数
movbx,ax
CALLbtod_out
.'
movax,dx
divAnumber
CALLbtod_out
movah,2h
%'
ret
RightRata_outendp
UseTimeAndOutprocnear;
计算打字时间并输出
subdh,Stime[2]
jnsSecUnBlow
jzSecUnBlow
adddh,60
deccl
SecUnBlow:
subcl,Stime[1]
jnsMinUnBlow
addcl,60
decch
MinUnBlow:
subch,Stime[0]
CALLOutTime
UseTimeAndOutendp
-----------------------------------------------
OutTimeprocnear;
显示时间 ch:
cl:
dh
moval,ch
:
'
moval,cl
moval,dh
OutTimeendp
TONGJIprocnear;
记录当前时间和正确个数及已打个数
SETGB0,13,20
leadx,ts1
SETGB0,13,45
leadx,ts2
movax,Rnumber
/'
movax,Anumber
TONGJIendp
----------------------------------------------
btod_outprocnear;
输出BX中内容把数据打印输出
pushbp
movax,bx
movsi,3
rota1:
movbl,10
divbl
movtemp[si],ah
andax,00ffh
decsi
cmpsi,0
jnzrota1
movbp,1
movsi,1
rota2:
movdl,temp[si]
adddl,'
0'
jzbtodeal
movbp,0
btrt1:
btrt2:
incsi
cmpsi,3
jnarota2
--------------------------------全部为0时输出一个0
cmpbp,1
jnzRT
------------------------------------
jmpRT
btodeal:
jzbtrt2
jmpbtrt1
RT:
popbp
popax
btod_outendp
--------------------------------------------------
isFullLineprocnear;
满行后换行
pushax
movah,gbattr[0]
moval,gbattr[1]
movLineMax,51;
满行时为51个字符
movLineAct,bp
LINEFULLLineMax,LineAct;
判断是否满行
movbl,FullFlag;
满行时为FullFlag=1
cmpbl,0
jzisfexit
READGB0;
addgbattr[0],1
subgbattr[1],51
SETGB0,gbattr[0],gbattr[1];
movFullFlag,0;
满行标志置0
isfexit:
movgbattr[0],ah;
记录光标当前位置
movgbattr[1],al
isFullLineendp
clew_charprocnear;
movax,bp
movbl,51
movdh,4
movdl,14
adddh,al
adddl,ah
movtemp[0],dh
movtemp[1],dl
SETGB0,temp[0],temp[1]
COLORCHARaddrr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 打字 练习 程序