欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    汇编语言程序设计打字练习程序.docx

    • 资源ID:12153288       资源大小:234.52KB        全文页数:23页
    • 资源格式: DOCX        下载积分:1金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要1金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    汇编语言程序设计打字练习程序.docx

    1、汇编语言程序设计打字练习程序 汇编语言课程设计报告( 2014 - 2015 年度第 1 学期)专业xxx学生姓名xxxx班级xxx学号xxxx指导教师xxx完成日期xxxxx1.设计目的与设计要求一.设计目的 本课程设计是在学完教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的汇编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高分析问题,解决问题的综合应用能力。设计要求在缓冲区预放了一些字母,运行时,可按照屏幕上显示的字母输入练习,每输入完一行按回车键后,可显示出练习输入的时间。设计思路1.系统总体分析在缓存区预放了一些字母,运行时可按照屏幕上显示的字母输入练习,每输

    2、入完一行按回车键后,可显示出练习输入的时间。当一个句子分析完后(回车键作为结束符),屏幕上以min:sec:msec的格式显示出键入字符的时间。在每次打字之前,屏幕上先显示一个例句,然后打字员按照例句,将句中字符通过键盘输入。这个过程共进行五次,当键入一个enter键时,推出打字计时练习程序。在键盘上联系的打字例句及其他地址表,计时单位等预存在DATA数据段中。自编的中断程序Kbint检测按键时产生的中断,并将按键扫描码转换为ASCII码存入缓存区BUFFER(内存中一个区域),这个工作和EOM09类型的键盘中断例行程序所完成的工作大致相同,只是在解释各个键时作了简化,即只解释了可显示字符(如

    3、英文小写字母,数字及一些字符),其他特殊键(如组合键,双态键,功能键),都未做解释,只做字符码0来处理。在主程序部分保存原有09类型的中断向量,设置自编例行程序的中断向量,设置中断屏蔽位,然后在开断。当键盘中断处理后,主程序安排指令读取缓存区中的字符并显示在屏幕上。在主程序的末尾,利用DOS功能恢复原09类型的中断向量,然后返回DOS。在显示键入的字符时,还应判断字符是否为回车符。说明一个句子输入完毕,此时调用显示时间的子程序显示打字时间,然后顺序显示一个例句。如果所存放的例句都已显示完毕,则再次从第一个例句开始显示,直至键入某个功能(如ESC键等)退出程序,结束打字练习。打字时间统计利用自编

    4、的计时器中断处理程序Clint来完成。每输入一个例句,计时一次。在此中断例行程序中,定时器中断的次数记录在计数单位count中,当count的计数单位为18 时,sec计数单位加1,当sec计数值达到60时,min计数单位加1,因为输入一个句子无论如何不会达到小时级,所以hours计数值得调整判断,实际上只起到退出计时器的作用。加入一个显示菜单程序,使得原来的程序具有观赏性;显示时间的子程序disptime分别将各计时单位的二进制数转化为十进制,并以min:sec:msec的形式出来。其中msec是由count中的计数值转化成的。Count*1s/18.2=count*55ms 此式中,18.

    5、2是计算机系统中产生的一个中断,每秒18.2次。 2 主模块框图 程序的核心模块是打字计时,通过显示的例句进行打字练习,最后显示打字时间,主题流程图如下:a. 建立汇编源程序通过 b.编译为目标文件d.连接执行文件c.不通过,重新修改(语句错误) e.运行 f.不正确,用调试工具调试,重新修改(逻辑错误) g.正确完成2程序流程图2.1主程序流程图、 图1 主程序流程图主程序的流程图如图1所示:说明:首先定义堆栈段,数据段,代码段等,初始化。显示提示信息提示打字练字的规则,说明如何开始,如何退出等。显示出字符串后,开始读取系统时间并保存。然后输入字符串存到指定的缓冲区。输入结束后,再次读取系统

    6、时间,并由两次所读取的时间计算出输入字符串所用的时间并显示。调用正确率计算函数,并显示在屏幕上。看输入字符串对应位正确的个数是不是十个,如果是十个,则继续往下,看输入的是不是退出键1,如果是,则退出。如果不是,则继续下一串字符的练习。如果输入正确的个数不是十个,则返回继续该字符串的练习,指导最后输入的正确个数是十个。2.2时间计算流程图计算时间的流程图如图3所示: 说明:第一次读取系统时间后,分和秒分别存在了second和minutes里,第二次读取系统时间后,比较DH里的内容和second里的内容,比较结果是second里的内容比较小,则不用向分借位,直接进行减法运算,并把计算结果转换成AS

    7、CII码并在屏幕上显示。如果比较的结果是second里的内容是比较大,则进行减法运算时,要向分借位,所以,将DH寄存器的内容加上60,再与second里的内容进行减法运算,最后把运算结果转化成ASCII码,并显示在屏幕上。图3 时间计算流程图2.3正确率计算流程图正确率显示函数的流程图如图4所示:说明:调用争取率判断子程序,首先保护现场,BX指向字符串ADDRESSSI首地址,BX+2,指向第一个要显示的字母,DI指向输入缓冲区的首地址,CX寄存器存入十,控制循环次数。比较BXHE DI里的内容,即判断显示的和输入的字母是否相同。如果相同,计数寄存器AL内容则加一,BX加一,DI加一,继续下次

    8、比较,直到十次循环结束。如果不相同,则计数寄存器AL内容不变,BX加一,DI加一,继续下一次循环,知道十次循环结束。当十次循环结束后,即字符串输入结束后,寄存器AL里的内容就是输入正确的个数,AL高四位是输入正确数的十位,低四位是输入正确数的个位,将十位和个位分别转化成ASCII码,并将其存入字符串中,调用DOS的9号功能输出字符串,输出的就是屏幕显示的字符串和输入的十位字符串对应位相同的个数,然后恢复现场。每调用一次正确率判断函数,SI加二,即第一次调用该子程序屏幕上显示的是第一组字符串,第二次调用,当SI大于5时,就退出程序。图4 正确率显示函数的流程图3.设计关键问题在打字练习汇编语言程

    9、序设计中,主要有三个问题,分别为输入和输出问题、输入字符串时间的计算、正确率的判断。3.1输入输出3.1.1 输出显示信息输出字符串,主要是利用DOS的9号功能调用。当开始打字练习时,要输出提示信息说明打字练习时的规则,其程序为: message db 0ah,0dh, Welcome to WUHAN UUIVERSITY, Please type 10 letters, and you must input 10 right words, then press any key to practice the next one db 0ah,0dh, if you want to quit,

    10、 press 1 ,0ah,0dh,$ lea dx,message mov ah,9 int 21h 显示信息输出后,要显示预先存在缓冲区的三组字符串,显示字符串用DOS9号调用,其程序为: str1 db 0ah,0dh,wuhanunive db 0dh,0ah,$ str2 db 0ah,0dh,hubeichina db 0ah,0dh,$ str3 db 0ah,0dh,qmpzwmoxid db 0ah,0dh,$ address dw str1,str2,str3 mov dx,offset addresssi mov ah,9 int 21h 只有当输入的字符串中的十个字符全

    11、部正确时,则显示进入下一字符串的练习并输出鼓励语,其程序为: et db 0dh,0ah,Congratulations, Well done!,0ah,0dh,$ mov dx,offset etmov ah,09h int 21h当要显示输入字符串所用的时间以及显示输入字符串个数时,可以采用单个字符的输出,但是为了在屏幕上看起来直观,就把要显示的时间和正确个数的十位和个位分别存在缓冲区,并把缓冲区的内容采用9号调用输出在屏幕上,其程序为:(1)显示输入字符所用的时间的程序 time db 2 dup(?),$ mov time0,ah ;输入字符串所用时间的十位送入time0 mov ti

    12、me1,al ;输入字符串所用时间的个位送入time1 mov dx,offset time ;显示time中的内容 mov ah,9 int 21h(2) 显示输入字符串正确个数的程序为: num db 2 dup(?),$ mov num0,bh ;输入字符串正确个数的十位送入num0 mov num1,bl ;输入字符串正确个数的个位送入num1 mov dx,offset num ;显示num中的内容 mov ah,9 int 21h3.1.2 输入十个字符当屏幕显示出要练习字符串时,就要输入十个字符存到指定的缓冲区中,使用DOS 1号功能调用,其功能是输入单个字符,输出参数是AL=输

    13、入字符的ASCII码,循环十次,将十个字符存入指定的缓冲区buff中,其程序为: buff db 15 dup(?) mov cx,10 ;cx=10,控制循环次数 mov bx,0again: mov ah,1 ;输入单个字符 int 21h mov buffbx,al ;将输入的字符存到指定的缓冲区 inc bx loop again3.2 输入字符串所用时间计算 对输入字符串时间的计算,需要知道输入字符串前的时间和输入字符串后的时间,将两者相减,即得输入字符串所用的时间。 具体为:当显示第一串字符串后,调用DOS 的2CH号功能读取系统时间,读取完系统时间后,系统时间的时、分和秒分别存在

    14、寄存器CH、CL、DH中。并将CL和DH的内容保存到minutes和second中,以便计算输入字符串所用时间用;第一次读取系统时间后,开始输入10个字符,当输入字符结束后,再次读取系统时间,首先第二次的分钟数减去第一次的分钟数,如果结果大于零,则用第二次的秒数减去第一次的秒数,所得的结果转化称ASCII码显示在屏幕上,即为输入字符串所用的时间。如果第二次的分钟数减去第一次的分钟数的结果小于零,则第二次的秒数加上60后,再减去第一次的分钟数,所得结果妆化称ASCII码后显示在屏幕上,则为输入字符串所用的时间。计算输入字符串所用的时间,其程序为: time1 db the time you ha

    15、ve spent is:,$ time2 db second,$ time db 2 dup(?) mov ah,2ch ;读取系统时间,时分秒分别存在CH CL DH int 21h mov minute,cl ;保存第一次系统时间的分和秒 mov second,dh mov ah,2ch ;读取系统时间 int 21h sub cl,minute ;计算输入字符串所用时间 mov minute,cl cmp dh,second jb a2 jmp gettime a2: add dh,60 dec minute gettime: sub dh,second mov second,dh le

    16、a dx,time1 mov ah,09h int 21h call timechange ;调用timedchange mov time0,ah mov time1,al mov dx,offset time ;显示输入10个字符所用时间 mov ah,9 int 21h lea dx,time2 mov ah,09h int 21h3.3 正确率判断 正确率的判断前提是,首先要有比较的对象,题目中给定的字符串,其次要有练习者输入的字符串,并且要存到指定的即缓冲区,然后,用两个寄存器分别指向要比较和被比较字符串的首地址,首先比较第一个字符是不是相等,如果相等,计数寄存器加一,两指针寄存器各自

    17、加一,开始下一轮比较,知道十次比较结束,将计数寄存器的内容转化称ASCII码输出,结果即为输入字符的正确数。 其程序如下所示:judge proc near push cx ;保护现场 push dx xor al,allop: mov bx,offset addresssi ;bx指向addresssi的首地址 add bx,2 mov di,offset buff ;di指向buff的首地址 mov cx,0bh lp2: mov dl,bx ;看bx和di的内容是否相同 cmp dl,di jnz next1 inc al ;计数寄存器加一next1: inc bx inc di loo

    18、p lp2 cbw mov cl,10 div cl mov bl,ah ;保存余数 mov dl,al ;将商转化称ASCII码 add dl,30h mov bh,dl mov dl,bl ;将余数转化称ASCII码 add dl,30h mov bl,dl xor al,al pop dx ;恢复现场 pop cx retjudge endp4.调试运行结果分析当汇编连接运行完程序后,屏幕显示如图5所示: 其显示的是提示信息以及第一串字符串wuhanunive,等待进行打字练习者从键盘输入10个字符。图4 编译连接运行结果当打字练习者从键盘输入10个字符后,第二次读取系统时间后,计算出输

    19、入10个字符所用时间并显示,计算出正确率并显示在屏幕上。当输入的10个字符为wuhanyuniv时,输入正确的个数应该为5个,输入后,屏幕显示结果如图6所示,正确率为5,所用时间为4秒,结果正确。由于正确率不是10个,所以下一组练习还应为第一组字符串wuhanunive的练习,即正确率显示结束后所显示的下一组字符练习仍为wuhanunive,图5显示的结果正式如此。图5 输入不完全真确的10个字符运行结果当输入10个完全正确的字符后,显示时间后,还显示输入正确的个数为10,并显示出提示语,提示练习者可以进行下一组字符串的联系了,同时显示出下一组练习字符为第二组字符串hubeichina,结果如

    20、图6所示:图6 输入10个完全正确字符显示结果第一组的10个字符完全输入正确后,如果想退出练习,则按1,退出练习;若想继续下一组练习,则按任意键,屏幕上自动直接显示出第二组要练习的字符串hubeichina,开始第二组打字练习,同上,第二组字符输入完全正确后,按1 可以退出,按任意键进行第三组打字练习,就不再赘述。第二组打字练字屏幕显示结果如图7所示:图7 第二组字符串练习5心得体会到这一刻为止,汇编课设就接近尾声了,有兴奋,也有惶恐,兴奋的是任务终于完成了,同时也很担心,自己还站在汇编语言的门口,只是一个初学者。在课程设计的过程中,深刻地觉得汇编语言真的是很神奇,不过这也从侧面说明自己对汇编

    21、语言了解的不多。通过本次的汇编语言程序设计课程设计,真的学到了很多东西。是对这学期所学的汇编语言程序设计知识的一个综合和提升。在这次课程设计中,最重要的是编制汇编语言程序的调试。通过这次课程设计,我对汇编语言的调试有了很深刻的了解,当程序出错时,主要是通过调试来找出程序中的错误,当然在调试过程中,遇到很多困难,主要是平时练习不够,没有注意培养汇编语言的调试练习,在做实验时,忽略了对程序的调试。微机的应用已渗透到生活中的方方面面,利用微机,以前难以实现的东西轻而易举地成为现实。所以,作为工科学生,要了解微机的内部结构、系统构成、指令系统、输入输出接口、存储器和接口的扩展等等,这些对我们来说非常重

    22、要。 汇编语言程序设计的方法和多模块程序设计。作为最基本的编程语言之一,汇编语言的重要性勿庸置疑,因为它能够完成许多其它语言所无法完成的功能。尤其在和硬件关系非常密切的程序或要提高运算速度的程序,即使是 C 语言也会有些力不从心,而汇编语言则能够很好扬长避短,最大限度地发挥硬件的性能。这次汇编语言程序设计历时九天,在整整九天的日子里,可以说是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,还学到了很多在书本上所没有学到过的知识。还有我意识到画程序方框图是很有必要的。因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而

    23、且在程序测试的过程中也有利于查错。不仅如此,以前对于编程工具的使用还处于一知半解的状态上,但是经过一段上机的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个寄存器的内容以确保程序的正确性的认识上都有了很大程度的提高。总之,这次课程设计让我受益匪浅,使我更加深入地理解了汇编语言程序设计上讲到的各种芯片的功能,以及中断调用,同时加深了对于主要芯片的应用的认识,同时也更加清楚了汇编程序的编写过程和运行过程。这不仅加深和巩固了我们的课本知识,而且增强了我们自己动脑,自己动手的能力。参考文献1 周佩玲,彭虎,傅忠谦编著汇编语言程序设计(基于16位机)北京:电子工业出版社,20052

    24、张雪兰,谭毓安,李元章编著汇编语言程序设计(从DOS到Windows)清华大学出版社,20063 杨季文等编著80x86汇编语言程序设计教程清华大学出版社,19984马力妮80x86汇编语言程序设计北京:机械工业出版社,2004 5曹加恒,苏光奎,许先斌新一代汇编语言程序设计北京:高等教育出版社,2003 附录附录一 打字计时练习程序stack segment para stack stack db 256 dup(0)stack endsdata segment message db 0ah,0dh, Welcome to WUHAN UUIVERSITY, Please type 10 l

    25、etters, and you must input 10 right words, then press any key to practice the next one db 0ah,0dh, if you want to quit, press 1 ,0ah,0dh,$ str db 0ah,0dh,$ str1 db 0ah,0dh,wuhanunive db 0dh,0ah,$ str2 db 0ah,0dh,hubeichina db 0ah,0dh,$ str3 db 0ah,0dh,qmpzwmoxid db 0ah,0dh,$ address dw str1,str2,str

    26、3 time1 db the time you have spent is:,$ time2 db second,$ number db the right number is:,$ buff db 15 dup(?) minute db (?) second db(?) time db 2 dup(?),$ num db 2 dup(?),$ et db 0dh,0ah,Congratulations, Well done! db 0ah,0dh,$data endscode segment assume cs:code,ds:data,ss:stackstart: mov ax,data

    27、mov ds,ax lea dx,message ;显示提示信息 mov ah,9 int 21h mov si,0lp1: mov dx,offset addresssi ;显示给定字符串 mov ah,9 int 21h mov ah,2ch ;读取系统时间 int 21h mov minute,cl ;保存第一次系统时间的分和秒 mov second,dh lea dx,str ;显示回车换行 mov ah,09h int 21h mov cx,10 ;cx=10,控制循环次数 mov bx,0again: mov ah,1 ;输入单个字符 int 21h mov buffbx,al ;

    28、将输入的字符存到指定的缓冲区 inc bx loop again lea dx,str mov ah,09h int 21h mov ah,2ch ;读取系统时间 int 21h sub cl,minute ;计算输入字符串所用时间 mov minute,cl cmp dh,second jb a2 jmp gettimea2: dec minute add dh,60gettime: sub dh,second mov second,dh lea dx,time1 mov ah,09h int 21h call timechange ;调用timechange子程序 mov time0,ah

    29、 ;保存输入字符所用时间的十位送入 mov time1,al ;保存输入字符所用时间的个位 mov dx,offset time ;显示time中的内容 mov ah,9 int 21h lea dx,time2 mov ah,09h int 21h lea dx,str mov ah,09h int 21h mov dx,offset number mov ah,9 int 21h call judge mov num0,bh ;保存输入正确个数的十位 mov num1,bl ;保存输入正确个数的个位 mov dx,offset num ;显示num中的内容 mov ah,9 int 21h cmp bh,31h jnz lp8 mov dx,o


    注意事项

    本文(汇编语言程序设计打字练习程序.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开