打字练习程序文档格式.docx

上传人:b****4 文档编号:17267599 上传时间:2022-11-30 格式:DOCX 页数:25 大小:124.09KB
下载 相关 举报
打字练习程序文档格式.docx_第1页
第1页 / 共25页
打字练习程序文档格式.docx_第2页
第2页 / 共25页
打字练习程序文档格式.docx_第3页
第3页 / 共25页
打字练习程序文档格式.docx_第4页
第4页 / 共25页
打字练习程序文档格式.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

打字练习程序文档格式.docx

《打字练习程序文档格式.docx》由会员分享,可在线阅读,更多相关《打字练习程序文档格式.docx(25页珍藏版)》请在冰豆网上搜索。

打字练习程序文档格式.docx

在打字时通过比较记录正确个数,最终除以总个数得到正确率。

在打字过程中还通过设置字符属性来区分正确和错误字符的不同。

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1