ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:316.40KB ,
资源ID:11181416      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11181416.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(微机原理统计打字练习对错率的程序设计课程设计.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

微机原理统计打字练习对错率的程序设计课程设计.docx

1、微机原理统计打字练习对错率的程序设计课程设计摘 要 随着时代的进步,打字是现代生活中每个人都需要做的事了,无论是娱乐还是工作。而打字的速度和正确率也很重要。用汇编语言编写一个练习打字的小软件,既有趣有能学以致用,增强动手创新能力。汇编语言是面向机器的程序设计语言。在汇编语言中,用助记符代替机器指令和操作码,用地址符号或标号代替指令或操作数的地址,如此就增强了程序的可读性和编写难度,像这样的符号化的程序设计语言就是汇编语言,因此亦称为符号语言。汇编语言是直接面向处理器的程序设计语言,处理器在指令的控制下工作,处理器可以识别的每一条指令称为机器指令。基本上,汇编语言列每一条指令都对应着处理器的一条

2、机器指令。汇编语言包括两个部分:语法部分和编译器。语法部分提供与机器指令相对于的助记符,方便指令的书写和阅读。汇编语言设计的程序直接简洁,目标代码小,占用内存少,执行速度快,但缺乏可移植性,容易产生bug,难于调试,开发效率低。 微机原理及接口技术是一门实践性和工程性很强的专业技术课,因此不仅要重视理论教学更应注意实践技能的培养和训练。课程设计是本课程的重要组成部分,通过课程设计,使学生巩固、加深和拓宽学习内容的理解,培养分析、设计和调试8086微机系统的能力。关键字:汇编语言 指令 操作数目 录1.设计任务及要求 11.1微机原理与接口技术课程设计目的 11.2设计任务 11.3设计要求 1

3、2.方案比较及论证 22.1方案比较 22.2方案论述 23.软件设计说明 33.1软件思想 33.2程序流程图 53.3代码设计 74. 程序的调试与运行 104.1调试环境简介 104.2 调试过程及结果分析 101. 程序调试过程 105.课程设计收获及心得体会 13附录一 15统计打字练习对错率的程序设计1.设计任务及要求1.1微机原理与接口技术课程设计目的 对典型的微机应用系统进行设计,要求根据具体的课题题目画出系统结构框图、系统接线图;能用所学习的汇编语言进行典型的程序设计并上机进行调试。并能根据要求写出设计课程设计报告,报告要求文字整洁、语言通顺、制图规范、程序完整正确。1.2设

4、计任务设计一个统计打字练习对错率的程序。在缓冲区中预放了一些字母,运行时,按照屏幕上显示的字母输入练习,每输入完一行按回车键后,显示练习输入的对错率。按Q退出程序。1.3设计要求1设计要求:(1)设计一个在键盘上练习打字并能统计正确率的程序。(2)熟悉和掌握有关键盘和时间的中断及字符显示计数。(3)编制键盘中断和时间中断处理程序,并保存原中断向量。程序运行时,使用自编的中断向量处理程序。程序退出时,恢复中断向量。2设计功能:(1)按照显示的字母输入练习,每输入完一行按回车键后,可显示出练习输入的时间及正确率,打字练习过程中输入的字符与打字练习的内容不符时会产生警报,打字练习可以一直进行下去直至

5、练习者停止 (2)能用自编的中断向量处理程序处理中断。 2.方案比较及论证2.1方案比较根据打字计时练习的设计要求可知,我们可以依据缓冲区中字符系列的产生这一要求的实现有两种设计方案:方案一是缓冲区中的字母是预先设定好的,后面所进行的打字练习是依照预先设定好的字符系列进行;方案二是缓冲区中的字母是随机生成的,每一次打字练习的字符系列都是随机产生的。其他要求的实现都是一样的。方案一:缓冲区中的字符系列是预先设定好的。这种设计方案要求在内存中预先开辟一段存储空间存放将要进行打字练习的字符系列,在后面进行打字练习的时候再将字符系列取出进行操作。这种设计方案占用的内存较多并且需要先将字符系列取出后再进

6、行操作,程序写起来很长,指令太多,同时设计的方案对于使用者来说太过单一,想尝试不同字符系列的打字练习时还要另行修改程序,适用性差。方案二:缓冲区中的字符系列是系统自动随机生成的。这种设计方案要求系统随机生成字符系列,不需要预先分配内存单元,在开始新一轮的打字练习时就自动随机生成字符系列。这种设计方案运用到的指令少,占用的内存少,设计的程序适用性好,不需要修改程序就可以尝试不同的字符系列的打字练习。2.2方案论述在设计打字练习时,根据打字练习的过程来设计打字计时练习的程序,首先在打字练习的界面上要有输出的提示信息提示对打字练习要进行的操作,其次是打字练习内容字母系列的生成,然后才开始进行打字练习

7、,打字计时练习的过程在系统内部是一个不断循环的过程,在系统内部时钟每次嘀嗒计数循环一次,首先需要判断是否从键盘键入字符,这里面有一个循环检测的过程直至有字符键入系统,其次需要知道键入的字符是否是特殊字符,判断打字练习进行哪步操作。这是一个大的分支程序,需要有很多的跳转并且需要不断的调用子程序实现不同的功能。最后在一轮打字练习结束时需要有一个分支的选择,是再次进行打字练习的设置还是退出打字练习的程序。3.软件设计说明3.1软件思想由打字计时练习的设计要求可知设计主要分为以下几个步骤:打字练习过程中提示信息的输出,随机字母系列的生成,打字练习过程中键入字符的正确与否,打字练习过程的正确率的显示,字

8、母系列是否键入完毕。运用汇编语言设计的程序分为主程序和子程序。主程序主要用于随机字母系列的生成,打字计时练习过程键入字符正确与否的判断,字母系列是否输入完毕,打字计时练习的新一轮的开始。子程序分别实现不同的功能,分别如下:子程序SHUCHU_TISHI中,实现的是打字练习过程中输出提示信息。子程序DECDIV实现的是数字以ASCII字符形式输出子程序TIME实现的是打字练习过程的输出子程序SOUND实现的打字计时练习过程中键入字符与相应打字内容不等时的警报。方案一的设计思路:系统随机生成打字练习的内容将需要输出的提示信息,记录打字练习的正确率参数单元等预先放在DATA数据段中,程序开始时就输出

9、提示信息然后系统随机生成打字内容存放在内存中,然后开始打字练习,由自编的中断程序PRESS检测按键时产生的中断,并把按键的扫描码转换为ASCII码,这个工作和ROM09类型的键盘中断例行程序所完成的工作大致相同,只是在解释各个键时作了简化,即只解释了可显示字符,如英文字母、数字及一些符号;其他特殊键,如组合键、双态键、功能键等都未作解释,只作为字符码0来处理。在主程序部分保存原09类型的中断向量,设置自编例行程序的中断向量,设置中断屏蔽位,然后开中断。键入的字符时,还应判断字符是否为空格(20H)。如为空格,需要再次的调用INT21H中断,从键盘输入字符直至输入的字符不是空格,还要判断是否是退

10、出和回车,如果是跳到重新输入字符处,重新开始从键盘键入字符判断。如果不是,进入键入的字符是否是正确处,进行各自相应的操作直至键入某一功能键(如Esc键、Shift键等)退出程序,结束打字练习。在键盘打字计时采用10类型的键盘中断,来取得输入字符并将字符显示在屏幕上。在统计正确率时需要利用数制转换子程序,将系统自行计数的二进制转换成十进制输出。自行编制键盘中断处理程序,并保存原中断向量。程序运行时,使用自编的中断向量处理程序。程序退出时,恢复中断向量。自编中断处理程序也是本课题需要考虑的重要问题。虽然系统自带了许多中断例行程序可以由INT指令来执行,但在本课题中需要对原中断例行程序的功能进行扩充

11、才可。3.2程序流程图主程序如图所示:图一主程序流程图上图为主程序流程图,是依据设计思路中未调用子程序的几个步骤得来。SOUND PROC PUSH AX 报警子程序流程图如图3所示: PUSH CX IN AL, 61H AND AL, 11111101B OUT 61H, AL MOV CX, 10000AGAIN_S: XOR AL, 2 OUT 61H, AL CALL DELAY LOOP AGAIN_S POP CX POP AX RETSOUND ENDPDELAY PROC PUSH CX MOV CX, 0FFFH NEXT_D: NOP LOOP NEXT_D POP CX

12、 图3 报警子程序流程图 RETDELAY ENDP 在主程序中对键入字符ACSII是否介于33和127之间的判断,其流程图如图4所示:图4:键入字符的判断流程图3.3代码设计1. 功能模块说明 (1)定义数据段,设置主要参数: 输出提示信息,记录正确率的参数(2)代码段调用中断8259,键盘中断(3)使用子程序分化各子功能SHUCHU_TISHI PROC ;输出提示信息SOUND PROC ;发声DECDIV PROC NEAR ;转化成字符显示2. 具体代码实现及关键代码分析;定义堆栈段;*SSEG SEGMENT STACK STACK DW 100 DUP(?)SSEG ENDS;*

13、 整个程序按两个中断源分为两部分。在数据段中,前半部分是键盘处理所需要的数据变量,包括输入字符,字符缓冲区,09H中断向量的保存单元等。后半部分有一个打字练习内容及其地址表SADDR,记录对错率的变量COUNT0,COUNT1中断向量的存贮单元等。在堆栈段定义一个“先进先出”的缓冲区(buffer):由于键盘是通过中断方式工作的,由于键盘中断的出现是完全随机的,因此要示键盘I/O程序要缓冲或保留它接收的任一键盘输入。故需定义一个缓冲区,也叫循环队列。;定义数据段;*DSEG SEGMENT DATA;显示窗口内容 MSG1 DB PRESS ENTER TO START!$ MSG2 DB P

14、RESS ESC TO END! $ MSG4 DB THE RATE OF CORRECT:$ MSG5 DB PRESS ENTER TO RESTART!$ MSG6 DB PRESS ESC TO OUT! $ SECONT DB 0 COUNT0 DW 0 ;为了记录正确的字符数 COUNT1 DW 0 ;字符总个数 COUNT2 DW 0 ;为了到行尾时自动翻行的控制 DSEG ENDS;*数据段定义了在后面要用到的记录打字练习的正确率及需要输出的提示信息;定义代码段;*CSEG SEGMENT CODE ASSUME CS:CSEG, SS:SSEG, DS:DSEG;*主程序s

15、tart:输出打字操作的提示信息,随机生成字符系列,打字练习过程,打字正确率的计算。;输出提示信息程序SHUCHU_TISHI PROC:通过对DH,DL的赋值将光标定位在DH行DL列,调用宏定义OUTPUT设置输出字符串的属性并在DH行DL列输出;输出提示信息*SHUCHU_TISHI PROC ADD DH,3 ADD DL,28 OUTPUT MSG1,14, DH, DL ADD DH, 2 ADD DL,2 OUTPUT MSG2, 11, DH, DL RETSHUCHU_TISHI ENDP;*;正确率统计和报警程序由于本次课设还要求设计的汇编语言程序具有统计正确率的功能,所以必

16、须要有一段可以实现记录输入字符个数,并通过一个判断输入的字符是否与屏幕上由程序自动生成的字符串当中相对应的字符相同的程序,若相同的话,则使得统计输入正确的字符的寄存器增加一,然后将这两个程序联合使用来实现正确率的功能。由于这两个程序当中有需要调用其他子程序,涉及到的程序过多,这里只给出一小段核心程序,如下:MOVTO DH, DL ; 显示光标的位置 MOV AX, COUNT0 CALL BINDEC ; 显示输入字母的个数 MOV AH, 2 MOV DL, / INT 21H MOV AX, BINDEC ; 显示输入正确的字母个数 CALL CHANGE POP DX JMP PRES

17、S 首先在这段程序当中,用到了宏指令MOVTO,前面也说到了该宏指令可以通过控制DH、DL的值来控制输出字符的位置。从而可以方便的控制想要显示的内容在屏幕上的位置。在这段程序当中还涉及到了INT 21H中断的应用,当AH当中为02H时,DL当中的存储内容就是直接显示的内容,在这里我们用到“/”即分数的形式来表达正确率,而不是直接计算出百分比。“/” 前面显示的内容是用户输入的内容与程序显示的字符一致的个数,作为分子,而“/”后面显示的内容是用户一共键入的字符个数,作为分母。由于在计算机当中,数据均以二进制的形式来储存,但二进制并不是我们所习惯的数值表达方式,所以数据输出前需要经过一个进制转换程

18、序的处理,经转换以后再输出到屏幕上供用户观看。在这里就又涉及到了进制转换程序。由于在本程序当中,进制转换程序并不是主要的程序单元,它只用作为辅助程序。需要提到的是当用户键入的字符错误,即不与程序自动产生的字符串中对应的字符相同时,需要调用到报警程序单元。用户键入错误字符有报警是本次课设的又一个主要要求,显然在调用报警程序之前,需要先判断键入的字符是否正确,在错误时才会调用报警程序,这就需要有一个可以判断键入字符的单元程序,该判断单元需要在用户每键入一个字符后便执行一次,因此它可以直接接在输入字符程序后面。4. 程序的调试与运行4.1调试环境简介软件简介: MFPCI98 集成实验环境是针对汇编

19、语言初学者的特点开发的一个简单易用的汇编语言学习软件(支持最新操作系统Vista),它具有错误信息自动定位、关键字实时帮助并且在帮助中动画演示汇编指令的执行过程、语法着色、无限次撤消与恢复、WORD式的查找、替换、定位、支持中文、长文件名、软件可以安装在任意文件夹等功能。4.2 调试过程及结果分析1. 程序调试过程启动全屏幕编辑软件MFPCI98,输入源程序。输入完毕后,按Ctrl+S保存程序,规定扩展名为*.ASM。对源程序进行汇编。源程序进行汇编有三个步骤:第一个是汇编生成OBJ文件,即二进制目标文件,这是汇编的主要目的。第二个是连接。第三个是运行。汇编过程中,如果源程序有语法错误,则汇编

20、结束后,会指出源程序中的错误,这时可以通过修改源程序中的错误,最后,得到没有语法错误的OBJ文件。当没有语法错误而又无法得到正确结果时,可用调试来进行验证。它通过单步、设置断点等多种方式为我们提供非常有效的调试手段。2. 程序运行结果3. 调试窗口如下: 1)设置主程序段显示输出信息,程序功能应该实现下图所示:2)按下ENTER键后开始打字练习出现的界面:3)从键盘上键入字母系列后的界面:4)按下ESC键后,程序停止运行,运行RESTART程序,其输出界面如下:5)按下ENTER后重新开始新一轮的打字练习,界面如下:3. 调试中出现的问题:在设计程序过程中没有注意到要操作的目标数据(内存中的数

21、据)的大小和使用的操作容器(寄存器)的大小不是一致。在整个程序中没有考虑到光标的定位,致使字符的输出在屏幕上没有任何规律。在对堆栈进行操作时,没考虑到压入和弹出堆栈的顺序。在自编中断程序时当中断结束时,必须恢复原来的中断向量,否则后续程序不能正确使用系统提供的例行程序。设置和恢复中断向量时,要访问程序内部数据变量,DS作为调用参数寄存器,要正确设置。 某些硬件中断例行程序在程序起始处将DS置成了ROM的数据段,所以在该中断的嵌套例行程序中,若要访问自编程序的数据变量,则必须将DS切换成用户数据段。5.课程设计收获及心得体会 这次的课程设计有很多的感悟与收获。运用汇编语言来编写一个实用的程序对于

22、我来说是很有难度的。但是当真的要做的时候也只好尽自己最大的努力去做。我在这个过程中有很多自己的感受,感觉汇编语言真的是很神奇,很有意思。从最刚开始的什么都不会到后来可以自己编程序,看着自己做出来的东西,心里感觉很快乐,这次的设计和其他课程设计有共同的地方,那就是不仅加深和巩固了我们的课本知识,而且增强了我们自己动脑动手的能力。但是我想它也有它的独特之处,那就是让我们进入一个神奇的编程世界。对于我来说真的新奇,很有趣,也使我有更多的兴趣学习汇编。在课程设计中过程中尤其是汇编的时候总会出现这样或者那样的问题,这要求我们要学会分析问题并且学会解决问题,有时需要查书籍查资料看自己的错误在哪里,在这个过

23、程中调试是极为重要的,通过一步一步的调试找出问题的症结所在。有时刚刚解决了这里的一个问题别的地方又有新的问题出现,这是我们不能泄气,我们要学会思考,是什么原因使得别的地方又有新的问题,是不匹配还是其他原因。总的来说我觉得微机原理与接口技术是一门很有趣的课程。它在讨论某一部分原理时又要涉及到其它部分的工作原理。这样一来,不仅不能在短时间内较深入理解计算机的工作原理,而且也很难孤立地理解某一部分的工作原理。总是学会了一些新知识,弄清了一些原来保留的问题,又出现了一些新问题直到把保留的问题基本搞清楚。6.参考文献1 赵润林、范国渠. 汇编语言程序设计教程与实训M.北京大学出版社.20062 杨季文.

24、 80X86汇编语言程序设计教程M.清华大学出版社.19983 钱晓捷. 汇编语言程序设计M.电子工业出版社.20004 温冬蝉,沈美明.IBM PC汇编语言程序设计M.清华大学出版 社.20025 艾德才等编著.微型接口技术实用教程M.清华大学出版社.20026 姚燕南,薛均义主编.微型计算机原理与接口技术M.高等教育出版社.2004附录一程序代码如下:LF EQU 0AHCR EQU 0DH ;宏定义部分PRINT MACRO P1,P2 ;输出“*” PUSH AX PUSH BX PUSH CX MOV AH, 09H MOV AL, P1 MOV BH, 0 MOV BL, P2 M

25、OV CX, 1 INT 10H POP CX POP BX POP AX ENDMMOVTO MACRO P1,P2 ;移动光标到指定位置 PUSH AX PUSH DX MOV AH, 2 MOV DH, P1 MOV DL, P2 INT 10H POP DX POP AX ENDMOUTPUT MACRO MSG,P1,P2,P3 ;输出字符串 LOCAL DIFFER, EXITOF PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV DH, P2 MOV DL, P3 MOV BH, 0 MOV BL, P1 MOV DI, 0DIFFER: M

26、OV AH, 02H INT 10H MOV CL, MSGDI CMP CL, $ JE EXITOF MOV AH, 9 MOV AL, MSGDI MOV CX, 1 INT 10H INC DI INC DL JMP DIFFEREXITOF: POP DI POP DX POP CX POP BX POP AX ENDM DSEG SEGMENT DATA;显示窗口内容 MSG1 DB PRESS ENTER TO START!$ MSG2 DB PRESS ESC TO END! $ MSG4 DB THE RATE OF CORRECT:$ MSG5 DB PRESS ENTER

27、 TO RESTART!$ MSG6 DB PRESS ESC TO OUT! $ SECONT DB 0 COUNT0 DW 0 ;为了记录正确的字符数 COUNT1 DW 0 ;字符总个数 COUNT2 DW 0 ;为了到行尾时自动翻行的控制 DSEG ENDSSSEG SEGMENT STACK STACK DW 100 DUP(?)SSEG ENDSCSEG SEGMENT CODE ASSUME CS:CSEG, SS:SSEG, DS:DSEG;*START PROC FAR PUSH DS MOV AX, 0 PUSH AX MOV AX, DSEG MOV DS, AX MOV

28、 ES, AX CALL SHUCHU_TISHI ;输出提示信息LZ: MOV AH, 1 ;带回显的键符输入 INT 21H MOV BL, AL ;AL=输入的字符 CMP AL,CR ;判断输入的字符是否是ENTER键 JE PRACTISE CMP AL,1BH ;判断是否要退出打字练习程序 JE TZD_1 JMP LZPRACTISE: MOV DH,4 MOV DL,1 LOOP1:MOVTO DH,DL PRINT ,0 INC DL CMP DL,46 JB LOOP1 MOV DH, 2 MOV DL, 1 MOVTO DH, DL MOV AH, 0 INT 1AH MOV AL, DL ;随机生成字母CONT_1: CMP AL, 7EH JA CONT CMP AL, 21H JB CON JMP CONTICONT: SUB AL, 7EH JMP CONT_1CON: ADD AL, 20H JMP CONT_1CONTI: MOV CX, 45 MOV AH, 9 MOV B

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

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