打字统计对错练习.doc_第1页
打字统计对错练习.doc_第2页
打字统计对错练习.doc_第3页
打字统计对错练习.doc_第4页
打字统计对错练习.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学 号:0121011360108课程设计题目打字统计对错练习的程序学院自动化学院专业自动化专业班级1001班姓名李凯指导教师石云2013年1月10日课程设计任务书学生姓名: 李凯 专业班级: 自动化1001班 指导教师: 石云 工作单位: 自动化学院 题 目: 打字统计对错练习的程序 初始条件:在缓冲区中预放了一些字母,运行时,可按照屏幕上显示的字母输入练习,每输入完一行按回车键后,可显示出练习输入的对错率。按Q退出程序。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1) 设计任务及要求分析(2) 方案比较及认证说明(3) 系统原理阐述(4) 硬件设计课题需要说明:硬件原理,电路图,采用器件的功能说明(5) 软件设计课题需要说明:软件思想,流程图,源程序及程序注释(6) 调试记录及结果分析(7) 总结(8) 参考资料(9) 附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图时间安排:1月2日1月3日:收集资料,方案选择1月4日1月7日:整体流程,程序细节1月8日1月10日:调试程序,报告撰写1月10:交设计报告,程序演示,答辩指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日目录摘要1设计任务及要求分析11.1设计任务及要求11.2 设计任务分析12 方案比较及认证22.1方案比较22.2方案论述23 程序设计说明33.1 程序主流程图33.2 程序设计43.2.1定义堆栈段43.2.2定义数据段43.2.3定义代码段53.2.4主程序53.2.5正确率统计64 程序设计结果显示75 调试记录与分析105.1调试环境简介105.2 调试过程及结果分析106 总结117 参考文献12附录:源程序及注释13武汉理工大学微机原理与接口技术课程设计说明书摘要这次课设的题目是打字正确率的统计,首先产生一行随机数,然后用户输入,比较两行数的差异,相同数除以总数则是正确率。首先在这段程序当中,用到了宏指令MOVTO,前面也说到了该宏指令可以通过控制DH、DL的值来控制输出字符的位置。从而可以方便的控制想要显示的内容在屏幕上的位置。在这段程序当中还涉及到了INT 21H中断的应用,当AH当中为02H时,DL当中的存储内容就是直接显示的内容,在这里我们用到“/”即分数的形式来表达正确率,而不是直接计算出百分比。“/” 前面显示的内容是用户输入的内容与程序显示的字符一致的个数,作为分子而“/”后面显示的内容是用户一共键入的字符个数,作为分母。由于在计算机当中,数据均以二进制的形式来储存,但二进制并不是我们所习惯的数值表达方式,所以数据输出前需要经过一个进制转换程序的处理,经转换以后再输出到屏幕上供用户观看。这里就又涉及到了进制转换程序。由于在本程序当中,进制转换程序并不是主要的程序单元,它只用作为辅助程序。关键词 :正确率 字符比较 子程序调用打字统计对错练习的程序1设计任务及要求分析1.1设计任务及要求初始条件:在缓冲区中预放了一些字母,运行时,可按照屏幕上显示的字母输入练习,每输入完一行按回车键后,可显示出练习输入的对错率。按Q退出程序。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)设计任务及要求分析(2)方案比较及认证说明(3)系统原理阐述(4)硬件设计课题需要说明:硬件原理,电路图,采用器件的功能说明(5)软件设计课题需要说明:软件思想,流程图,源程序及程序注释(6)调试记录及结果分析(7)总结(8)参考资料(9)附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图1.2 设计任务分析由打字计时练习的设计要求可知设计主要分为以下几个步骤,打字练习过程中提示信息的输出,随机字母系列的生成,打字练习过程中键入字符的正确与否,打字练习正确率的显示,是否退出。运用汇编语言设计的程序分为主程序和子程序。主程序主要用于随机字母系列的生成,打字计时练习过程键入字符正确与否的判断,退出的判断,打字计时练习的新一轮的开始。2 方案比较及认证2.1方案比较 根据打字计时练习的设计要求可知,我们可以依据缓冲区中字符系列的产生这一要求的实现有两种设计方案,方案一是缓冲区中的字母是预先设定好的,后面所进行的打字练习是依照预先设定好的字符系列进行。方案二是缓冲区中的字母是随机生成的,每一次打字练习的字符系列都是随机产生的。其他要求的实现都是一样的。 方案一缓冲区中的字符系列是预先设定好的。这种设计方案要求在内存中预先开辟一段存储空间存放将要进行打字练习的字符系列,在后面进行打字练习的时候再将字符系列取出进行操作。这种设计方案占用的内存较多并且需要先将字符系列取出后再进行操作,程序写起来很长,指令太多,同时设计的方案对于使用者来说太过单一,想尝试不同字符系列的打字练习时还要另行修改程序,适用性差。方案二缓冲区中的字符系列是系统自动随机生成的。这种设计方案要求系统随机生成字符系列,不需要预先分配内存单元,在开始新一轮的打字练习时就自动随机生成字符系列。这种设计方案运用到的指令少,占用的内存少,设计的程序适用性好,不需要修改程序就可以尝试不同的字符系列的打字练习。 2.2方案论述 在设计打字练习时,根据打字练习的过程来设计打字计时练习的程序,首先在打字练习的界面上要有输出的提示信息提示对打字练习要进行的操作,其次是打字练习内容字母系列的生成,然后才开始进行打字练习,打字计时练习的过程在系统内部是一个不断循环的过程,在系统内部时钟每次嘀嗒计数循环一次,首先需要判断是否从键盘键入字符,这里面有一个循环检测的过程直至有字符键入系统,其次需要知道键入的字符是否是特殊字符,判断打字练习进行哪步操作。这是一个大的分支程序,需要有很多的跳转并且需要不断的调用子程序实现不同的功能。最后在一轮打字练习结束时需要有一个分支的选择,是再次进行字练习的设置还是退出打字练习的程序。3 程序设计说明3.1 程序主流程图图1 主程序流程图3.2 程序设计整个程序按两个中断源分为两部分。在数据段中,前半部分是键盘处理所需要的数据变量,包括输入字符,字符缓冲区,09H中断向量的保存单元等。后半部分是定时器中断处理所需要的数据变量,其中有一个打字练习内容及其地址表SADDR,以及记录正确率的变量COUNT0,COUNT1中断向量的存贮单元等。 3.2.1定义堆栈段 ;* SSEG SEGMENT STACK STACK DW 100 DUP(?) SSEG ENDS ;* 在堆栈段定义一个“先进先出”的缓冲区,buffer,由于键盘是通过中断方式工作的,由于键盘中断的出现是完全随机的,因此要示键盘I/O程序要缓冲或保留它接收的任一键盘输入。故需定义一个缓冲区,也叫循环队列。3.2.2定义数据段 ;* DSEG SEGMENT DATA ;显示窗口内容 MSG1 DB PRESS ENTER TO START!$ MSG2 DB PRESS Q TO END! $ MSG4 DB THE RATE OF CORRECT:$ MSG5 DB PRESS ENTER TO RESTART!$ MSG6 DB PRESS Q TO OUT! $ SECONT DB 0 COUNT0 DW 0 ;为了记录正确的字符数 COUNT1 DW 0 ;字符总个数 COUNT2 DW 0 ;为了到行尾时自动翻行的控制 DSEG ENDS ;* 数据段定义了在后面要用到的计时变量,记录打字练习的正确率及需要输出的提示信息 3.2.3定义代码段 ;*CSEG SEGMENT CODE ASSUME CS:CSEG, SS:SSEG, DS:DSEG ;* 3.2.4主程序start:输出打字操作的提示信息,随机生成字符系列,打字练习过程正确率的计算。 输出提示信息程序SHUCHU_TISHI PROC通过对DH,DL的赋值将光标定位在DH行DL列,调用宏定义OUTPUT设置输出字符串的属性并在DH行DL列输出 ;* SHUCHU_TISHI PROC ;输出提示信息ADD DH,3 ADD DL,28 OUTPUT MSG1,14, DH, DLADD DH, 2 ADD DL,2 OUTPUT MSG2, 11, DH, DL RET SHUCHU_TISHI ENDP ;* 3.2.5正确率统计由于本次课设还要求设计的汇编语言程序具有统计正确率的功能,所以必须要有一段可以实现记录输入字符个数,并通过一个判断输入的字符是否与屏幕上由程序自动生成的字符串当中相对应的字符相同的程序,若相同的话,则使得统计输入正确的字符的寄存器增加一,然后将这两个程序联合使用来实现正确率的功能。由于这两个程序当中有需要调用其他子程序,涉及到的程序过多,这里只给出一小段核心程序,具体内容如下。MOVTO DH, DL ; 显示光标的位置 MOV AX, COUNT0 CALL CHANGE ; 显示输入字母的个数 MOV AH, 2MOV DL, /INT 21HMOV AX, COUNT1 ; 显示输入正确的字母个数 CALL CHANGE POP DX JMP PRESS 首先在这段程序当中,用到了宏指令MOVTO,前面也说到了该宏指令可以通过控制DH、DL的值来控制输出字符的位置。从而可以方便的控制想要显示的内容在屏幕上的位置。在这段程序当中还涉及到了INT 21H中断的应用,当AH当中为02H时,DL当中的存储内容就是直接显示的内容,在这里我们用到“/”即分数的形式来表达正确率,而不是直接计算出百分比。“/” 前面显示的内容是用户输入的内容与程序显示的字符一致的个数,作为分子而“/”后面显示的内容是用户一共键入的字符个数,作为分母。由于在计算机当中,数据均以二进制的形式来储存,但二进制并不是我们所习惯的数值表达方式,所以数据输出前需要经过一个进制转换程序的处理,经转换以后再输出到屏幕上供用户观看。这里就又涉及到了进制转换程序。由于在本程序当中,进制转换程序并不是主要的程序单元,它只用作为辅助程序。4 程序设计结果显示1设置主程序段显示输出信息程序功能应该实现下图所示 图2 程序设计结果12按下ENTER键后开始打字练习出现的界面图3 程序设计结果23从键盘上键入字母系列后的界面图4 程序设计结果34按下Q键后程序停止运行界面图5 程序设计结果4 5按下ENTER后重新开始新一轮的打字练习界面如下图6 程序设计结果55 调试记录与分析5.1调试环境简介 老师推荐通过MFPCI98 集成实验环境来进行汇编语言的编译。它具有错误信息自动定位、关键字实时帮助并且在帮助中动画演示汇编指令的执行过程、语法着色、无限次撤消与恢复、WORD式的查找、替换、定位、支持中文、长文件名、软件可以安装在任意文件夹等功能。在此我使用软件Masm替代。二者功能类似,Masm兼容性更强。 5.2 调试过程及结果分析 启动软件Msam,输入源程序。输入完毕后,保存程序,规定扩展名为*.ASM。 对源程序进行汇编。源程序进行汇编有三个步骤:第一个是汇编生成OBJ文件,即二进制目标文件,这是汇编的主要目的。第二个是连接。第三个是运行。汇编过程中,如果源程序有语法错误,则汇编结束后,会指出源程序中的错误,这时可以通过修改源程序中的错误。最后,得到没有语法错误的OBJ文件。当没有语法错误而又无法得到正确结果时,可用调试来进行验证。它通过单步、设置断点等多种方式为我们提供非常有效的调试手段。调试之初,设置“Q”键退出。只设定大些Q而未设定小写q,导致退出时按键不便,需调整大小写,若输入错误会影响正确率结果。经改进,将大写小写共同写入程序,则问题解决。此程序要求按q键退出。但在输入字符时若出现q,则无法输入,输入正确则导致程序退出。 6 总结此次课程设计,让我真正的把学的汇编知识应用起来,做出自己想要的结果。让我懂得了实践的重要。通过本次课设,对汇编语言的的一些基本指令有所理解。刚开始看到这个题目的时候,我感觉这个题目还是很简单的,在数据区直接存放一串字符,接着输入字符与已有字符做比较,记录正确个数和总的字符个数,然后二者一除就得到正确率了。当我着手做时我才发现这并不是我想象的那样。怎么才能在屏幕上正确的显示信息,怎样匹配需要的按键。最终都一一解决运用汇编语言来编写一个实用的程序对于我们初学者来说是很有难度的。但是当真的要做的时候也只好尽自己最大的努力去做。我感觉汇编语言真的是很神奇,可以实现一些自己都想不到的功能。在课程设计中过程中尤其是汇编的时候总会出现这样或者那样的问题,这要求我们要学会分析问题并且学会解决问题,有时需要查书籍查资料看自己的错误在哪里。通过这次的课题实践让我深刻的明白了基础理论的重要性。编程过程中的有些错误并非什么难解之处,相反,正是某些基础细节的错误理解导致了编程中的错漏。因此,在今后的学习中,我会更加注重牢固基础知识提高编程速度,减少出错率。7 参考文献1 赵润林、范国渠. 汇编语言程序设计教程与实训.北京大学出版社.2006 2 杨季文. 80X86汇编语言程序设计教程.清华大学出版社.1998 3 钱晓捷. 汇编语言程序设计.电子工业出版社.2000 4 温冬蝉沈美明.IBM PC汇编语言程序设计.第2版.清华大学出版社.2002 5 艾德才等编著.微型接口技术实用教程.清华大学出版社.2002 6 姚燕南、薛均义主编.微型计算机原理与接口技术.高等教育出版社.2004 附录:源程序及注释LF = 0AH CR = 0DH ;宏定义部分 PRINT MACRO P1,P2 ;输出“*” PUSH AX PUSH BX PUSH CX MOV AH, 09H MOV AL, P1 MOV BH, 0 MOV BL, P2 MOV CX, 1 INT 10H POP CX POP BX POP AX ENDM ;*MOVTO MACRO P1,P2 ;移动光标到指定位置 PUSH AX PUSH DX MOV AH, 2 MOV DH, P1 MOV DL, P2 INT 10H POP DX POP AX ENDM ;*OUTPUT 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, 0 DIFFER: MOV 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 DIFFER EXITOF: POP DI POP DX POP CX POP BX POP AX ENDM ;*XIANSHI_G MACRO ;输出箭头指示符 PUSH AX PUSH BX PUSH CX MOV CX, 1 MOV AH, 9 MOV AL, 19H MOV BL, 10001100B INT 10H POP CX POP BX POP AX ENDM ;*DSEG SEGMENT DATA ;显示窗口内容 MSG0 DB *WELCOME TO USE THIS SYSTEM!*$ MSG2 DB *PRESS ENTER TO START!*$ MSG4 DB *PRESS Q TO END!*$ MSG6 DB *THE RATE OF CORRECT:$ MSG7 DB *DO YOU WANT TO END?*$ MSG8 DB *PRESS ENTER TO RESTART!*$ MSG9 DB *PRESS Q TO OUT!*$ MSG10 DB *THANK YOU FOR USING THE SYSTEM!*$ MSG11 DB $ MSG12 DB PRESS Q TO END!$ MSG13 DB * _ _ *$ MSG14 DB * _ *$ MSG17 DB * _ INSTRUCTION _ *$ MSG18 DB PRESS BACK SPACE TO DELETE!$ SECONT DB 0 COUNT0 DW 0 ;为了记录正确的字符数 COUNT1 DW 0 ;字符总个数 COUNT2 DW 0 ;为了到行尾时自动翻行的控制DSEG ENDS SSEG SEGMENT STACK STACK DW 100h DUP(?) SSEG ENDS CSEG 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 ES, AX CALL SHUCHU_K ;输出黄色外围框架 CALL SHUCHU_TISHI ;输出提示信息 LZ: MOV AH, 1 ;带回显的键符输入 INT 21H MOV BL, AL ;AL=输入的字符 CMP AL,CR ;判断输入的字符是否是enter键 JE PRACTISE CMP AL,51H ;判断是否要退出打字练习程序 JE TZD_1 CMP AL,71H JE TZD_1 JMP LZ PRACTISE: CALL SHUCHU_K MOV DH, 1 MOV DL, 1 MOVTO DH, DL XIANSHI_G ;显示“箭头” MOV AH, 0 INT 1AH MOV AL, DL ;随机生成字母 CONT_1: CMP AL, 7EH JA CONT CMP AL, 21H JB CON JMP CONTI CONT: SUB AL, 7EH JMP CONT_1 CON: ADD AL, 20H CONTI: MOV CX, 78 MOV AH, 9 MOV BL, 00001111B MOV DH, 2 MOV DL, 0 JMP SHUCHU TZD_1: ;跳转点到“EXIT” JMP TZD_2 SHUCHU: INC DL MOVTO DH, DL INT 10H ADD AL, DL CMP AL, 7EH JA CONTINUE CMP AL, 21H JB CONTINUE1 LOOP SHUCHU JMP DAZIRUKOU PRACTISE4: JMP PRACTISE CONTINUE: SUB AL, 7EH CONTINUE1: ADD AL, 20H LOOP SHUCHU ;到此为输出上面一行要打字练习的内容 ;* DAZIRUKOU: ;下面开始打字练习MOV DH, 3 MOV DL, 1 ;* DAZI: ;显示正确率 PUSH DX MOV DH, 14 MOV DL, 2 OUTPUT MSG17, 13, DH, DL MOV DH, 15 MOV DL, 4 OUTPUT MSG18, 10, DH, DL MOV DH, 16 MOV DL, 4 OUTPUT MSG12, 10, DH, DL JMP DAZI1 PRACTISE3: JMP PRACTISE4 DAZI1: MOV DH, 21 MOV DL, 2 OUTPUT MSG11, 10, DH, DL OUTPUT MSG6, 9, DH, DL MOV DH, 21 MOV DL, 27 MOVTO DH, DL ;显示光标位置 MOV AX, COUNT0 CALL CHANGE ;显示输入字母个数 MOV AH, 2 MOV DL, / INT 21H MOV AX, COUNT1 ;显示输入正确的字母个数 CALL CHANGE POP DX JMP PRESS ;* PRACTISE2: JMP PRACTISE3 PRESS: MOVTO DH, DL MOV AH, 01H INT 16H JNE KEY JMP PRESS KEY: MOV AH, 00 INT 16H CMP AL, 20h JE PAUSE JMP ISESC PAUSE: PUSH DX MOV AH, 06H MOV DL, 0FFH INT 21H POP DX CMP AL, 20H JNE PAUSE ISESC: CMP AL, 51H JE TZD_2 CMP AL, 71H JE TZD_2 CMP AL, 08H JE DELETE CMP AL, 0DH JE TZD_DAZI2 INC COUNT2 INC COUNT1 ;是上面的字符,则COUNT1加1 JMP ISEQUAL TZD_DAZI2: JMP DAZI TZD_2: ;设定跳转点到“EXIT” JMP SKIP DELETE: MOV AX, COUNT1 CMP AX, 0 JNE DELETE_G JMP TZD_DAZI2 DELETE_G: DEC COUNT1 DEC COUNT2 SUB DH, 2 MOVTO DH, DL PRINT , 0 DEC DL MOVTO DH, DL XIANSHI_G ADD DH, 2 MOVTO DH, DL MOV AH, 08H INT 10H CMP AH, 10 ;8号功能时, AH=属性,AH=ASC码 JNZ DEL DEC COUNT0 DEL: PRINT ,0 TZD_DAZI1: ;跳转点,到“打字” JMP TZD_DAZI2 ISEQUAL: MOV BL, AL CMP AL, 21H JB WRONG CMP AL, 7FH JA WRONG SUB DH, 2 MOVTO DH, DL PRINT ,0 INC DL MOVTO DH, DL XIANSHI_G INC DH DEC DL MOVTO DH, DL MOV AH, 8 ;读得光标处字符送到AL中 INT 10H CMP AL, BL JE EQUAL MOV AL, BL MOV BL, 12 JMP UNEQUAL WRONG: TZD_DAZI0: JMP TZD_DAZI1 EQUAL: INC COUNT0 MOV AL, BL MOV BL, 10 UNEQUAL: INC DH MOVTO DH, DL MOV AH, 9 MOV CX, 1 INT 10H INC DL MOV AX, COUNT2 CMP AL, 78 JB TZD_DAZI0 SUB AX, 78 MOV COUNT2, AX REFLESH: ;满一行后自动刷新(78个字符) MOV AH, 7 INT 21H PRACTISE1: JMP PRACTISE2 SKIP: CALL SHUCHU_K MOV DH, 5 MOV DL, 18 OUTPUT MSG10, 12, DH, DL ADD DH, 2 OUTPUT MSG7, 13, DH, DL JMP SKIP1 PRACTISE0: JMP PRACTISE1 SKIP1: ADD DH, 8 OUTPUT MSG8, 10, DH, DL ADD DH, 2 OUTPUT MSG9, 11, DH, DL JMP RESTART PRACTICE: JMP PRACTISE0 RESTART: MOV AH, 00 INT 16H CMP AL, 0DH MOV SECONT, 0 MOV COUNT0, 0 MOV COUNT1, 0 MOV COUNT2, 0 JE PRACTICE CMP AL, 51H JE EXIT CMP AL, 71H JE EXITNONE: NOP JMP RESTART EXIT: MOV AH, 0 MOV AL, 3 INT 10H MOV AH, 4CH INT 21H RET START ENDP ;* SHUCHU_K PROC ;输出外围框架 PUSH AX PUSH CX PUSH DX MOV AH, 0 MOV AL, 3 INT 10H MOV CX, 79 MOV DH, 0 MOV DL, 0 AGAIN1: INC DL MOVTO DH, DL PRINT *,0EH LOOP AGAIN1 MOV CX, 24 AGAIN2: INC DH

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论