版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇编语逾域工曙院言设计
报告
课题:打字计时练习程序
专业计算机科学与技术(网络工程)
学生姓名_______________________
班级___________B计算机092__________
学号____________________
指导教师_______________________
完成日期2011年6月22日
打字计时练习程序设计
1.问题提出及功能要求
设计一个在键盘上练习打字并能统计时间的程序。通过它练习英文打字练习,并能够
统计时间。
要求:在缓冲区中预放了一些字母,运行时,可按照屏幕上显示的字母输入练习,,
每输入完一行后按回车键,可显示出练习输入的时间和下一行例句。按Esc键可退出程序。
2.算法设计
2.1设计思路
在键盘上练习的打字例句及其地址表、计时单元等预先放在DATA数据段中,自编的中
断程序kbint检测按键时产生的中断,并把按键的扫描码转换为ASCII码存入缓存区
buffer,这个工作和R0M09类型的键盘中断例行程序所完成的工作大致相同,只是在解释
各个键时作了简化,即只解释了可显示字符,如英文字母、数字及一些符号;其他特殊键,
如组合键、双态键、功能键等都未作解释,只作为字符码0来处理。在主程序局部保存原
09类型的中断向量,设置自编例行程序的中断向量,设置中断屏蔽位,然后开中断。当键
盘中断处理后,主程序中安排指令读取缓冲区中的字符并显示在屏幕上。在主程序的末尾,
利用DOS功能恢复原09类型的中断向量,然后返回DOS。在显示键入的字符时,还应判断
字符是否为回车(ODH)。如为回车符,说明一个句子输入完毕,此时调用显示时间的子程序
显示出打字时间,然后顺序显示下一个例句。如果所存放的例句都已显示完,那么又从第
一个例句开始显示,直至键入某一功能键(如Esc键、ShifL键等)退出程赤,结束打字
练习。打字时间统计利用自定时器中断处理程序clint来完成。每输完一例句,计时一次。
在此中断例行程序中,定时器中断的次数记录在计数单元count中,当count计数值为18
时,sec计数单元加1,当sec计数值到达60时,min计数单元加1。因为输入完一个句
子无论如何也不会到达小时级,所以对hours计数值的调整判断,实际上只起到退出定时
器中断的作用。
显示时间的子程序disptime分别将各遍野单元的二进制数转换为十进制数,并以
min:sec:msec的形式显示出来。其中msec是由count记数值转换成的:
countX1秒/18.2=countX55ms
2.2程序流程图
******预设置打字练习的句子******
STR1DB'ABCDEFGHIJKLMNOPQRSTUVWXYZ.';句子1
DBODH,OAH,'$'
STR2DB'THEREARESOMENEWSPAPERSONTHETABLE.'
DBODII,OAH,'$'
STR3DB'THEREARESOMECLOUDSINTHESKY.'
DB0D11,OAH,'$'
STR4DB'SHEALWAYSEATSHERLUNCHATNOON.?
DBODH,OAH,'$'
STR5DB'IDONOTLIKEAUTUMNANDWINTER.
CMLFDBODH,OAH,'$'
COLONDB
EVEN
SADDRDWSTR1,STR2,STR3,STR4,STR5
******定义时间参数******
COUNTDW0;记时器记数
SECDW0;秒
MINDW0;分
HOURSDW0;小时
SAVELCDW2DUP(?);1C向量地址
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA,ES::DATA,SS:STACK
MAINPROCFAR
START:
MOVAX,STACK
MOVSS,AX
MOVSP,OFFSETTOE
PUSHDS;现场保护
SUBAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVES,AX
;*******将原中断向量09H保存在自设的单元中******
MOVAH,0
MOVAL,4
INT2111
MOVAH,OBH
MOVBlI,0
MOVBL,4
INT11H
MOVAH,35H;取中断向量的功能调用
MOVAL,09H
INT2111
MOV0LDCS9,ES
MOV0LDIP9,BX
;******设置H编处理程序的中断向量******
PUSHDS
MOVDX,SEGKBINT;自编中断类型程序段地址放入DS
MOVDS,DX
MOVDX,OFFSETKBINT;自编中断类型程序偏移地址放入DX
MOVAL,0911
MOVAH,25H;设置中断向量功能调用
INT21H
POPDS
;******将原中断向量1CH保存在自设的单元中******
MOVAH,35H
MOVAL,1CH
INT21H
MOVSAVEJ£,BX
MOVSAVE_LC+2,ES
;******设置自编处理程序的中断向量******
PUSHDS
MOVDX,SEGCLINT
MOVDS,DX
MOVDX,OFFSETCLINT
MOVAL,1CH
MOVAH,25H
INT21H
POPDS
;******允许键盘和定时器中断******
TNAL,21H;允许键盘和定时器中断
ANDAL,11111100B
OUT21H,AL
;******设置显示方,式******
FIRST:MOVAll,0
MOVAL,3
INT1011
;******显示提示信息******
MOVDX,OFFSETPROMPT;显示提示信息
MOVAH,9
INT21H
;******在屏幕上显例如句******
MOVSI,0
NEXT:MOVDX,SADDR[S1];显例如句
MOVAH,09H
INT21H
;******初始化变量******
MOVCOUNT,0;设置初值
MOVSEC,0
MOVMIN,0
MOVHOURS,0
;******允许更高一级的中断******
STI
FOREVER:
CALLKBGET
TESTKBFLAG,80H
JNZENDINT
PUSHAX
CALLDISPCHAR
POPAX
CMPAL,ODH
JNZFOREVER
MOVAL,OAH
CALLDISPCHAR
;******显示时间******
CALLDISPTIME
LEADX,CRLF
MOVAH,09H
INT2111
;******显例如句结束否?******
ADDSI,2
CMPSI,5*2
JNENEXT
JMPFIRST
;******原来的中断向量******
ENDINT:CL1
PUSHDS
MOVDX,SAVE_LC
MOVAX,SAVE_LC+2
MOVDS,AX
MOVAL,1CH;恢复中断向量1CH
MOVAH,25H
INT2111
POPDS
PUSHDS
MOVDX,OLDTP9
MOVAX,OLDCS9
MOVDS,AX
MOVAL,09H
MOVAH,2511
INT21H
POPDS
STI
RET
MAINENDP
;******定时器中断处理程序******
CLINTPROCNEAR
PUSHDS
MOVBX,DATA
MOVDS,BX
LEABX,COUNT
INCWORDPTRtBX]
CMPWORDPTR[BX],18;初始化记数
JNERETURN
CALLINCT
ADJ:
CMPHOURS,12;是否满12小时
JLERETURN
SUBHOURS,12;满足减去12
RETURN:
POPDS
STI
RET
CLINTENDP
INCTPROCNEAR
MOVWORDPTRtBX],0
ADDBX,2
INCWORDPTRtBX];BX内容自增1
CMPWORDPTRtBX],60;和60比拟
JNEEXIT
CALLINCT
EXIT:RET
TNCTENDP
;******显示打字练习时间******
DISPTTMEPROCNEAR;显示时间主段
MOVAX,MIN;分移动到AX存放器
CALLBINDEC;显示数字
MOVBX,0
MOVAL,':'
MOVAH,OEH;显示冒号
INT10H
MOVAX,SEC;秒移动到AX
CALLBINDEC
MOVBX,0
MOVAL,'
MOVAll,OEH
INT10H
MOVBX,COUNT
MOVAL,55D;百分秒
MULBL
CALLBINDEC
RET
DfSPTIMEENDP
******将二进转化为十进显示时间******
BINDECPROCNEAR
MOVCX,100D;显示百位
CALLDECDIV
MOVCX,10D;显示十位
CALLDECDIV
MOVCX,1;显示个位
CALLDECDIV
RET
BINDECENDP
DECDIVPROCNEAR;转化成字符显示
MOVDX,0
DIVCX
MOVBX,0
ADDAL,3OH;转换成ASCII
MOVAH,OEH
INT1OH;显示一个字符
MOVAX,DX
RET
DECDIVENDP
******获取键盘键入的信息******
KBGETPROCNEAR
PUSHBX
CLI
MOVBX,BUFPT1;标志缓冲区的大小
CMPBX,BUFPT2
JNZKBGET2
CMPKBFLAG,0;!二OOH的时候,一直获取键盘
JNZKBGET3
STI
POPBX
JMPKBGET
KBGET2:
MOVAL,[BUFFER+BX]
INCBX
CMPBX,16H
JCKBGET3
MOVBX,0
KBGET3:
MOVBUFPT1,BX
POPBX
RET
KBGETENDP
;******键盘中断处理程序******
KBINTPROCNEAR
PUSHBX
PUSHAX
INAL,6011;键盘输入存放器端口地址
PUSHAX
INAL,6111;控制商品存放器地址
ORAL,80H
OUT61H,AL;读数据
ANDAL,7FH;第八位清0,ASCH只有7位
OUT61H,AL
POPAX
TESTAL,80H
JNZKBINT2
MOVBX,OFFSETSCANTAB;查表输出字符
XLATSCANTAB;查表
CMPAL,0
JNZKBINT4
MOVKBFLAG,80H
JMPKBINT2
KBINT4:
MOVBX,BUFPT2
MOV[BUFFER+BX],AL
INCBX
CMPBX,16H
JCKBINT3
MOVBX,0
KBINT3:
CMPBX,BUFPT1
JZKB1NT2
MOVBUFPT2,BX
KBINT2:CLI
MOVAL,20H
OUT20H,AL;送82592送端口
POPAX
POPBX
STI
RET
KBINTENDP
DISPCHARPROCNEAR;显示字符
PUSHBX
MOVBX,0
MOVAH,OEH;显示一个字符在AL里
INT1011;显示一个字条符
POPBX
RET
DISPCHARENDP
CODEENDS
ENDSTART
4.调试与运行
4.1实验步骤:
1)翻开windows命令窗口
2)进入masm程序的安装目录,汇编源文件,如图:
图汇编程序
3)连接程序,并查看生成可执行文件weijia.exe。
图4.1.3查看生成可执行文件
4)关闭对话框,翻开可执行文件weijia.exe,开始打字计时练习。
4.2运行程序:
1)设置主程序段显示提示信息,程序功能应该实现下列图所示:
图程序调试
2)调用DI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 药膳汤品食材规范
- 工作场所职业病危害告知牌
- 体检报告解读专业话术手册
- 厂房坍塌应急救援预案
- 蔬菜采后预冷处理管理规范
- 暴雨防汛应急响应工作方案
- 长期服务关怀计划方案
- 重大危险源专项风险管控措施
- 颈椎牵引标准操作流程
- 风电场临电布置方案
- MSOP(测量标准作业规范)测量SOP
- 供应链中的再制造与回收
- ARCGIS中提取坡位方法
- 灵魂出生前的人生计划
- 太阳能热水器自动控制系统毕业设计
- 电力电子技术第二版张兴课后习题答案
- 国际商务谈判课件(同名951)
- 《煤矿安全规程》专家解读(详细版)
- 2023年新教科版科学六年级下册学生活动手册答案
- 中枢神经系统淋巴瘤的诊断和治疗 课件
- 幼儿园大班安全:《危险的洞洞》 课件
评论
0/150
提交评论