打字测试练习.doc_第1页
打字测试练习.doc_第2页
打字测试练习.doc_第3页
打字测试练习.doc_第4页
打字测试练习.doc_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

微机原理及接口课程设计报告课题名称打字测试练习学院自动控制与机械工程学院专业通信技术班级姓名学号时间2012年1月13日目录任务书第一章 设计概述1.1 设计课题1.2 设计任务1.3 设计目的1.4 设备环境第二章 设计的相关知识2.1 汇编语言的程序设计2.2 BIOS中断介绍2.3 DOS中断介绍2.4 子程序设计第三章 设计方案3.1 设计思想分析3.2 设计方案实现3.3 程序流程图3.4 源程序第四章 调试及运行结果第五章 课程设计心得体会5.1 心得体会及系统改进5.2 课程设计遇到的问题和解决方案参考文献附录微机原理课程设计任务书一 课题题目:打字测试练习二 课题要求:在DOS环境中设计一个打字测试练习的程序:具体要求:1. 屏幕上显示出提示信息和练习例句;2. 按照例句在从键盘上输入字母;3. 每输入完一行后回车,显示练习输入的时间、输入的正确数和错误数和下一行例句;4. 按Esc键可退出程序。5. 参考设计基本思路编程实现上述功能;6. 设计说明书:包括设计思想、程序流程图和源程序。三 设计基本思路 见课程设计指导书四 时间进度表:序号内容安排时间(天)备注1分析设计,收集资料准备阶段22编程测试阶段5上机3编写课程设计论文(说明书)阶段2上机4考核评定成绩阶段1合计10五 考核方式序号考核内容时间(分)备注1将所设计的源程序、复制到指定目录中,并汇编、连接2上机2运行程序,验证设计结果1上机3答辩5上机六 补充说明1.设计题目必须调试成功(生成的可执行文件必须能运行并且能够实现题目实现的功能),考核是独立完成考核内容,若未完成没有成绩。2.设计说明书必须独立完成,若果出现70%相同视为雷同,取消其成绩。七 主要参考资料1.微机原理与接口技术 李兰友编 清华大学出版社 20092.微机原理与应用 潘名莲编 电子科技大学出版社 19953.新编深入DOS编程 求伯君主编 学苑出版社 1994第一章 设计概述1.1 设计课题 打字测试练习1.2 设计任务在DOS环境中编程完成以下任务: (1) 屏幕上显示出提示信息和练习例句;(2) 按照例句在从键盘上输入字母;(3) 每输入完一行后回车,显示练习输入的时间、输入的正确数和错误数和下一行例句;(4) 按Esc键可退出程序。(5) 参考设计基本思路编程实现上述功能;(6) 设计说明书:包括设计思想、程序流程图和源程序。1.3 设计目的学习汇编语言综合应用程序设计方法,提高汇编语言实际应用能力,充分了解计算机硬件和软件,利用PC机键盘和时间中断字符显示实现打字练习程序,完成理论到实践的推进过程。培养学生理论联系实际的设计思想,提高学生综合应用汇编语言课程的理论知识去分析问题、解决问题的能力。1.4 设备环境IBMPC微型计算机1台第二章 设计的相关知识2.1 汇编语言的程序设计1程序设计的基本步骤(1) 分析实际问题,弄清已知条件、未知条件和求解对象;(2) 分析得到需要解决的数据组织;(3) 确定算法;(4) 根据算法,绘制程序流程框图;(5) 按照程序流程框图编写程序代码;(6) 调试运行程序;(7) 重复(1)(5)步,直到基本无问题。2.三种顺序结构(1) 顺序程序设计顺序是最常见的,也是最基本的程序设计方法。这种程序在计算机内存中执行时,按照先后顺序,逐句顺序执行。他没有分支也没有循环,因此也称为线性程序。(2) 分支程序设计在程序中,除了最基本的顺序结构以外,通常还有各种分支,以满足不同情况做不同处理的需要。分支结构有两种形式:一种是引出两个分支的;另一种是引出多个分支的。前者类似于高级语言中的IFTHENELSE语句,后者类似于高级语言中的CASE语句。程序在某种条件下运行时,执行其中一个分支。(3) 循环程序设计 循环程序也是一种基本结构。程序中,往往有的程序段需要重复执行多次,以实现某种功能,这样,可以大大简化程序设计。循环程序通常有以下三部分组成:a.循环初始状态 循环过程中的工作单元,在循环开始前,往往要给他们赋初值,以保证循环能正常的进行工作。b.循环体 这是循环程序重复执行的部分,是循环的主体。c.循环控制 循环能正常进行和结束,循环控制是关键。循环控制条件不合理,循环就无法按正常的预定进行,甚至导致死循环。2.2 BIOS中断介绍1.什么是BIOS BIOS的全称是ROMBIOSROM Basic I/O System(只读存储器基本输入输出系统)。它是一组固化到微机主板上一个ROM芯片上的子程序,主要功能包括:a.驱动系统中所配置的常用外设(即驱动程序),如显示器、键盘、打印机、磁盘驱动器、通信接口等。b.开机自检,引导装入。c.提供时间、内存容量及设备配置情况等参数。使用BIOS中断调用与DOS系统功能调用类似,用户也无需了解相关设备的结构与组成细节,直接调用即可。2.调用方法A.键盘I/O中断调用(INT 16H) 键盘I/O中断调用有三个功能,功能号0,1,2,且必须把功能号放在AH中。a. 0号功能调用 格式:MOV AH,0 INT 16H 功能:从键盘读入字符送AL寄存器。执行时,等待键盘输入,一旦输入,字符的ASCII码放入AL中。若AL=0,则AH为输入的扩展码。 b. 1号功能调用 格式:MOV AH,01H INT 16H 功能:用来查询键盘缓冲区,对键盘扫描但不等待,并设置ZF标志。若有按键操作(即键盘缓冲区不空),则ZF=0,AL中存放的是输入的ASCII码,AH中存放输入字符的扩展码。若无键按下,则标志位ZF=1。 c. 2号功能调用 格式:MOV AH,02H INT 16H 功能:检查键盘上各特殊功能键的状态。执行后,各种特殊功能键的状态放入AL寄存器器中。3. BIOS屏幕功能调用。INT 10Ha.清屏作用MOV AX,0600HMOV CX,0000HMOV DX,184FHMOV BH,07HINT 10Hb.移动光标MOV AH,02HMOV DH,* ;*为目的地行数(024)MOV DL,* ;*为目的地列数(079)MOV BH,00HINT 10HC.禁止光标显示 MOV AH,01H MOV CX,2000H INT 10Hd.恢复光标显示 MOV AH,01H MOV CX,0C0DH INT 10H2.3 DOS中断介绍 1.什么是DOS系统功能调用系统功能调用是DOS为用户提供的常用子程序(80多个),可在汇编语言程序中直接调用这些子程序的。使用DOS提供的程序控制硬件。优点是兼容性好,使用方便。 DOS是IBM PC系列微机的操作系统(现在的微机仍能运行DOS,而且新的操作系统也能继续提供几乎所有的DOS功能调用)负责管理系统的所有资源,协调微机的操作,其中包括大量可供用户调用的服务程序。DOS的功能调用不依赖于具体的硬件系统。所有的DOS系统功能调用都是利用软件中断指令INT 21H来实现的。也就是说,在程序中需要调用DOS功能的时候,只要使用一条INT 21H指令即可。INT 21H是一个具有90多个子功能的中断服务程序,这些子功能大致可以分为四类:设备管理、目录管理、文件管理和其他。其功能一览表可参见附录。为了方便用户使用这些子功能,INT 21H对每一个子功能都进行了编号称为功能号。这样,用户就能通过指定功能号来调用INT 21H的不同子功能。 2.DOS功能调用方法a.在AH寄存器中存入所要调用功能的功能号;b.根据所调用功能的规定设置入口参数;c.用INT 21H指令转入子程序入口;d.相应的子程序运行完后,可以按规定取得出口参数。3.DOS的基本输入/输出功能调用A.键盘输入 调用格式:MOV AH,1 INT 21H 功能:等待从键盘输入一个字符并送入AL。 a.1号调用从键盘输入单个字符b.10号调用从键盘输入字符串功能:从键盘接收字符串送入内存的输入缓冲区,同时送显示器显示。调用前要求:先定义一个缓冲区调用格式:LEA DX,MAXLEN(缓冲区首偏移地址) MOV AH,10 INT 21H注意:调用时,要求DS:DX指向输入缓冲区B.显示输出a.2号调用在显示器上显示输出单个字符调用格式:MOV DL,待显示字符的ASCII码MOV AH,2INT 21Hb.9号调用在显示器上显示输出字符串调用格式:LEA DX,字符串首偏移地址 MOV AH,9 INT 21H功能:将当前数据区中DS:DX所指向的以结尾的字符串送显示器显示。2.4 子程序设计1.子程序的结构子程序一般以文件形式编写,并常以过程形式存放在代码段中。子程序文件通常由程序说明和子程序主体组成。子程序说明通常包括子程序功能描述(名称,性能,执行时间等),所有寄存器名和存储单元、子程序入口和出口参数及是否又调用其他子程序。子程序的结构一般包括保存现场、依入口参数从指定位置取加工信息、加工处理、依出口参数指定位置送出处理结果、恢复现场和返回调用程序等部分。子程序的结构形式: 子程序名 PROC RET 子程序名 ENDS2子程序的调用和返回主程序调用子程序使用CALL指令。根据CALL指令获得目标地址的方法,有4种调用方式:段内直接调用方式、段内间接调用方式、段间直接调用方式和段间间接调用方式。为了能正确返回,不管哪一种调用方式,都需要把断点(即CALL指令的下一条指令的地址)入栈保护。同时,CALL指令的类型必须与RET指令类型相匹配。3.主程序和子程序间的信息交换子程序中允许改变的数据称为参数。参数包括入口参数和出口参数两种。主程序调用子程序之前必须向子程序提供一些参数,而子程序执行完毕后又要将执行结果提供给主程序使用。参数传递的方式一般有三种,即用寄存器传递参数、用参数表传递参数和用堆栈传递参数。不论采用哪种方式,调用程序和子程序都必须互相呼应。子程序需要在哪里取参数,主程序就应将参数送到哪里,并且要注意参数的先后顺序。a. 用寄存器传递参数 寄存器传递参数适用于参数个数较少时。方法是,主程序将子程序执行时所需要的参数放在指定的寄存器中,子程序的执行结果也放在规定的寄存器中。b. 用参数表传递参数 参数表方式适用于参数较多的情况。方法是,在存储器中专门规定某些单元存放入口参数和出口参数,即在内存中建立一个参数表。c. 用堆栈传递参数 用堆栈传送适用于参数多并且子程序多有嵌套或递归调用的情况。方法是,主程序将参数压入堆栈,子程序将参数从堆栈中弹出。第三章 设计方案3.1 设计思想分析 在键盘上练习的打字例句及其地址表,计时单元等预先放在DATA数据段中,键盘处理子程序kbget读入按键时产生的键值,并把按键的扫描码转换为ASCII码存入缓存区buffer。在显示键入的字符时,还应判断字符是否为回车符(0DH)、退格键(08H)和ESC键。如为回车符,说明一个句子输入完毕,此时调用显示时间的子程序显示出打字时间,统计和显示正确数和错误数。然后顺序显示下一个例句。如果所存放的例句都已显示完,则又从第一个例句开始显示,直至键入功能键ESC键退出程序,结束打字练习。如为退格键,应做相应的处理。打字时间的统计是利用自编的定时器中断处理程序elint来完成。每输完一例句,计时一次。定时器每秒钟中断18.2次,在此中断例行程序中,中断的次数记录在计数单元count 中,当count计数值为18时,see计数单元加1,当see计数值达到60时,min计数单元加1。因为输入完一个句子无论如何也不会达到小时级,所以对hours计数值的调整判断,实际上只起到退出定时器中断的作用。在主程序的末尾,利用DOS功能回复原1CH类型的中断向量,然后返回DOS。 显示时间的子程序disptime分别将各计时单元的二进制数转换为十进制数,并以min:sec:msec的形式显示出来。其中msec是由count计数值转换成的:Count1秒/18.2count55ms3.2 设计方案实现要求用汇编语言进行编程,下面是编写过程中主要涉及的知识点:1. 在PC机中,对键盘的管理是通过中断机构和8255芯片来实现的,在8255中有两个端口PA和PB,在这个硬件接口的基础上,系统在BIOS中配备了键盘服务功能,可以调用键盘的DOS和BIOS功能编程,也可以直接在硬件接口的基础上编程。2. 视屏显示程序设计:一般由DOS或BIOS调用来完成。有关显示输出的DOS功能调用不多,而BIOS调用的功能很强,主要包括设置显示方式、光标大小和位置、设置调色板号、显示字符、显示图形等。用INT 10H即可建立某种显示方式。用DOS功能调用显示技术,把系统功能调用号送至AH,把程序段规定的入口参数,送至指定的寄存器,然后由中断指令INT 21H来实现调用,例:要输出多于一个字符时,利用DOS功能调用9.3. 键盘扫描程序设计:检测键盘状态,有无输入,并检测输入各值。例:利用DOS功能调用的01号功能,接受从键盘输入的字符到AL寄存器。4. 打字计时统计:每输完一句例句,计时一次。此中断处理程序中,计数器中断的次数记录在计数单元count中,由于定时中断的引发速率是每秒18.2次,即计数一次为55ms,当count计数值为18时,sec计数单元加一(为一秒)。5. 显示时间子程序:将计时单元的二进制数转换为十进制数加以显示。3.3程序流程图开始 Kbflag=08h?保存原中断09H到自设的单元中 N结束程序设置自编处理程序的中断向量1CH YCall dispchar(显示该字符)保存原中断向量1CH到自设单元输入字符为回车符0DH设置自编处理程序的中断向量1CH N Y设置允许键盘和定时器中断AL换行符(0AH)(显示回车换行符)Call dispchar(显示回车换行符)设置显示方式为80*25Call disptime(显示打字时间)显示提示信息 Call dispTF(显示正确数和错误数)在屏幕上显示例句 下一例句初始化变量count、sec、min、hours5个例句都练习完了吗?开中断 Y Call kbget N 图1 程序流程总图开始Count中有效值送入bx中初始化计数与18做比较? 将DS压出堆栈 N Y计算毫秒与12做比较将DS压出堆栈 N Y减12结束图2 时间计时子程序流程图开始找到例句有效值得到例句字符数CX压入堆栈将BX置零AL与DI比较BX加1 Y N转到DTF1SI,DI自加1 循环显示正确数和错误数结束 图3 显示正确数和错误数子程序流程图开始Disptime 显示时间主段把分移动到AX寄存器中显示数字把“:”移动到AL寄存器中把秒移动到AX寄存器中显示数字把“:”移动到AL寄存器中把毫秒移动到AX寄存器中显示数字结束图4 时间显示子程序流程图开始将0送入到kbflog中Esc健0ffh送入kbflagY NEnter键 转到kbexitY N 转移Backspace键Kb3转到kb2 Y NBx0? N02送入AH中 YKb1 转到结束程序 图 5 键盘处理子程序流程图3.4 源程序stack segment para stack stackdb 256 dup(0)top label wordstack endsdata segment para public data;输入缓冲区buffer db 80 dup(0)kbflag db 0prompt db *please practise typing*,0dh,0ah,$;例句str1 db abcd efgh ijkl mnop qrst uvwx yz.db 0dh,0ah,$str2 db There are some newspapers on the table.db 0dh,0ah,$str3 db There are some clouds in the sky.db 0dh,0ah,$str4 db She always eats her lunch at noon.db 0dh,0ah,$str5 db I do not like autumn and winter.crlf db 0dh,0ah,$colon db :,$Correct db Correct:$Error db Error:$;例句首址数组Saddr dw str1,str2,str3,str4,str5;例句字符数数组StrLen dw str2-str1-3,str3-str2-3,str4-str3-3dw str5-str4-3,crlf-str5Index dw 0 ;例句索引Chrcount dw 0 ; 输入字符计数count dw 0 ;1/18.2 秒计数sec dw 0 ;秒计数min dw 0 ;分计数hours dw 0save_lc dw 2 dup(?)data endscode segmentassume cs:code,ds:data,es:data,ss:stackmain proc farstart: mov ax,stack ;初始化堆栈mov ss,axmov sp,offset toppush ds ;现场保护sub ax,axpush axmov ax,datamov ds,axmov es,ax;将原定时中断向量1CH保存在自设的单元中mov ah,35hmov al,1chint 21hmov save_lc,bxmov save_lc+2,es;设置自编定时处理程序的中断向量push ds;自编定时中断类型程序段地址放入DSmov dx,seg elintmov ds,dx; 自编定时中断类型程序偏移放入DXMov dx,offset clintmov al,1chmov ah,25hint 21hpop ds;允许键盘和定时器中断in al,21hand al,11111100bout 21h,alfirst: mov ah,0 ;设置显示方式mov al,3int 10h;显示提示信息mov dx,offset promptmov ah,9int 21hmov Index,0next: mov bx,Indexshl bx,1mov si,0mov dx,saddrsibx ;显示例句mov ah,09hint 21h ;在屏幕上显示例句mov count,0 ;设置初值mov sec,0mov min,0mov hours,0mov cx,80mov si,offset buffer ;清缓冲区ClrBuf: mov byte ptrsi,0loop ClrBufmov chrcount,0sti ;允许更高一级的中断forever: call kbgetlea dx,crlfmov ah,09hint 21hcall disptime ;显示时间call dispTFlea dx,crlfmov ah,09hint 21h ;显示例句是否结束test kbflag,80hjnz mexitinc Indexcmp Index,5jne nextjmp first ;原来的中断向量mexit: cli;恢复原定时中断向量1CHpush dsmov dx,save_lcmov ax,save_lc+2mov ds,axmov al,1chmov ah,25hint 21hpop dsstiret ;返回Dosmain endp;定时器中断处理程序clint proc nearpush dsmov bx,datamov ds,bxlea bx,countinc word ptrbxcmp word ptrbx,18 ;初始化计数jne returncall inct ;计算毫秒adj: cmp hours,12 ;是否满足12小时jle returnsub hours,12 ;满足减12 return: pop dsstiiretclint endp;时间换算子程序inct proc nearmov word ptrbx,0add bx,2inc word ptrbx;BX内容自增1cmp word ptrbx,60;和60比较jne exitcall inct ;计算秒,分exit: retinct endp;时间显示子程序Disptime proc near;显示时间主段mov ax,min ;分移动到AX寄存器call bindec;显示数字mov bx,0mov al,:mov ah,0eh ;显示冒号int 10hmov ax,sec ;秒call bindecmov bx,0mov al,:mov ah,0ehint 10hmov bx,countmov al,55d ;毫秒mul blcall bindecretdisptime endp;二进制转化为十进制显示时间dispTF proc nearmov bx,Indexshl bx,1mov si,offset saddr;得到例句首址mov si,sibxmov di,offset buffer;得到例句字符数mov cx,offset StrLenadd bx,cxmov cx,bxpush cxxor bx,bxDFT0: mov al,siCmp al,diJne DTF1inc bx ;正确加一DTF1: inc siInc diloop DFT0push bxmov dx,offset Correctmov ah,09hint 21hmov ax,bxcall bindec ;显示正确数mov dx,offset Errormov ah,09hint 21hpop bxpop cxsub cx,bxmov ax,cxcall bindec ;显示错误数retdispTF endpbindec proc nearmov cx,100d ;百位call decdivmov cx,10d ;十位call decdivmov cx,1 ;个位call decdivretbindec endp;计算并显示正确数,错误数字程序decdiv proc nearmov dx,0div cxmov bx,0add al,30h ;转换为ASCIImov ah,0ehint 10h ;在 CTR 上显示mov ax,dxretdecdiv endp;键盘处理子程序Kbgetproc nearMov kbflag,0kb0:mov ah,08hint 21hcmp al,1bh ;ESC 键按下je kb4cmp al,0dh ;Enter键按下je kbexitcmp al,08h ;BackSpace键按下jne kb2mov bx,chrcountcmp bx,0je kb1mov ah,02hmov dl,alint 21hmov dl,0int 21hmov dl,08hint 21hdec chrcountkb1:mov si,offset buffermov bx,chrcountmov bh,0add si,bxmov byte ptrsi,0jmp kb0kb2: mov si,offset StrLenmov bx,Indexshl bx,1add si,bxmov bx,chrcountcmp bx,sijl kb3mov ah,02hmov dl,07hint 21hjmp kb0kb3: mov dl,almov ah,02hint 21hmov si,offset buffermov bx,chrcountmov bh,0add si,bxmov si,alinc chrcountjmp kb0kb4: mov kbflag,0ffhkbexit: retkbget endpcode endsend start第四章 调试及运行结果 通过设计和编写程序代码段,运行程序后,以下为运行的过程,而后进入打字训练界面,打完字敲击回车按键就马上进入下一行语句的训练。我们在运行过程中一开始没有在DOS环境下运行,出现了只显示正确错误字数,而不计时的情况。后经小组的努力协调,终于解决了问题,可以进行计时。具体调试结果如下所示:1.先进入运行界面图4.1 编译后界面图4.2 运行后界面2敲击回车键进入打字练习界面第五章 课程设计心得体会5.1心得体会及系统改进1.心得体会 两周的汇编语言课程设计结束了,我的收获是很大的。通过课程设计的编程和对编程设计过程中遇到的问题的思考,有效的提高了我对汇编的认识和理解,切实的提高了我的编程能力,补全了我的不足。通过这次课程设计,我巩固了所学过的知识,能用汇编语言熟练的运用顺序、选择、循环三大结构,进一步掌握了各个指令的功能,掌握了子程序的定义及调用,以及正确的应用DEBUG指令,在整个程序的编写中,调试占了很大部分地时间。要想写好汇编语言的程序,必须认真对待代码的每一个细节,还必须熟练的掌握debug命令,这对程序的调试是非常重要的。通过这次实际动手能力的培养,我进一步熟悉了汇编语言的结构和使用方法,基本达到了能独立阅读,编制和调试一定规模的汇编语言程序的水平。另外,我觉得学习汇编有一个比较大的好处,就是可以了解到在电脑中每一个字节数据的来龙去脉。 微机原理和接口技术是一门很有趣的课程,任何一个计算机系统都是一个复杂的整体,学习计算机原理是要涉及到整体的每一部分。讨论某一部分原理时又要涉及到其他部分的工作原理。这样一来,不仅不能在短时间内较深入的理解计算机的工作原理,而且也很难孤立的理解某一部分地工作原理。所以,在循序渐进的课堂教学过程中,我总是处于“学会了一些新知识,弄清了一些原来保留的问题,又出现了一些新问题”的循环中,直到课程结束时,才把保留的问题基本搞清楚。学习该门课程知识时,其思维方法也和其他课程不同,该课程偏重于工程思维,具体的说,在了解了微处理器各种芯片的功能和外部特性以后,剩下是如何将他们用于实际系统中,其创造性劳动在于如何用计算机的有关技术和厂家提供的各种芯片,设计实用的电路和系统,在配上相应的应用程序,完成各种实际应用项目。这次实验并不是很难,主要的困难来自对程序的理解。功夫不负有心人,经过三个人的合作和努力,我们最后对实验的原理有了清晰地认识。虽然实验台上的很多模块单元没有用到,但是就系统功能来说,我觉得我们做的还是不错的。这次课程设计对试验台有了足够的了解,让我们知道了实验台上各个模块的用法;而且他还让我们对自己动手写程序来控制实验台的运作有了一定的基础。虽然实验台只是一个小型的模拟平台,但是通过对它的学习和操作,我们对有关接口的知识将会有一个更广泛地认识,而且他对我们以后的学习也会有帮助的。实验中个人的力量是不及群体的力量的,我们三个人分工合作,做事的效率高了很多。虽然有时候会为一些细节争论不休,但最后的出的总是最好的结论。而且实验也教会我们在团队中要善于与人相处,与人共事,不要一个人解决所有问题。通过这次课程设计,使我懂得了理论和实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中的出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考能力。在设计的过程中遇到问题,可以说是困难重重,这毕竟第一次做,难免会遇到各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解的不够深刻,掌握的不够牢固。在设计中遇到了很多编程问题,但最后经过努力完成了这次课程设计。这让我明白了只要有恒心,有耐心,就可以达到自己的目标,完成任务!2.系统改进对于我所设计的打字系统,其满足了题目的所有要求,所有功能都可以实现。但我觉得这个打字练习还有许多地方可以改进,首先是界面,界面还可以设置的更友好,现在的界面看上去不是那么的友好,只满足了基本功能,让用户知道如何使用这个系统。改进可以让用户感觉眼前一亮这种效果最好,当然这需要花费更多的时间和精力。再一个可以改进的地方便是系统的功能了,该打字系统的功能比较少,对于打字练习来说,其目的在于提高使用者的打字速度,所以程序最好加一个计时功能模块,这样用户就可以知道使用后自己的打字速度有没有得到提升。还有就是当用户打字出错的时候,最好在给用户配备一个警告功能,这样可以提醒用户,让用户知道打字出错了。当然还有许多地方值得我进一步去探讨,去完善这个程序。5.2 课程设计遇到的问题和解决方案 1.在分析课程设计要求时,将我们的想法加到源程序过程中遇到不少麻烦,没有顺利实现,走了不少弯路。 解决办法:通过建立数学模型,画程序流程图,参考相关程序例子,将源程序中断和调用等分模块搞清楚,从而将问题要求具体化形象化,为程序实现打好基础。2.在对源程序进行了编译后出现了很多错误。 解决方法:到图书馆找了一些书与老师发的资料进行了对照,来找出错误进而改正。发现大多是自己粗心而写错了程序。3.在对程序进行运行时,运行结果不能进行计时的功能,只可以显示正确或错误的字数。 解决方法:在对程序进行了检查和修改,改变了运行时的步骤和操作,最终可以计时。参考文献微机原理与接口技术 李兰友编 清华大学出版社 2009微机原理与应用 潘名莲编 电子科技大学出版社 1995新编深入DOS编程 求伯君主编 学苑出版社 1994附录表一 DOS功能调用表AH功能调用参数返回参数00程序终止(同INT 20H)CS=程序段前缀01键盘输入并回显AL=输入字符02显示输出DL=输出字符03异步通迅输入AL=输入数据04异步通迅输出DL=输出数据05打印机输出DL=输出字符06直接控制台I/ODL=FF(输入)DL=字符(输出)AL=输入字符07键盘输入(无回显)AL=输入字符08键盘输入(无回显)检测Ctrl-BreakAL=输入字符09显示字符串DS:DX=串地址$结束字符串0A键盘输入到缓冲区DS:DX=缓冲区首地址(DS:DX)=缓冲区最大字符数(DS:DX+1)=实际输入的字符数0B检验键盘状态AL=00 有输入AL=FF 无输入0C清除输入缓冲区并请求指定的输入功能AL=输入功能号(1,6,7,8,A)0D磁盘复位清除文件缓冲区0E指定当前缺省的磁盘驱动器DL=驱动器号 0=A,1=B,.AL=驱动器数0F打开文件DS:DX=FCB首地址AL=00 文件找到AL=FF 文件未找到10关闭文件DS:DX=FCB首地址AL=00 目录修改成功AL=FF 目录中未找到文件11查找第一个目录项DS:DX=FCB首地址AL=00 找到AL=FF 未找到12查找下一个目录项DS:DX=FCB首地址(文件中带有*或?)AL=00 找到AL=FF 未找到13删除文件DS:DX=FCB首地址AL=00 删除成功AL=FF 未找到14顺序读DS:DX=FCB首地址AL=00 读成功 =01 文件结束,记录中无数据 =02 DTA空间不够 =03 文件结束,记录不完整15顺序写DS:DX=FCB首地址AL=00 写成功 =01 盘满 =02 DTA空间不够16建文件DS:DX=FCB首地址AL=00 建立成功 =FF 无磁盘空间17文件改名DS:DX=FCB首地址(DS:DX+1)=旧文件名(DS:DX+17)=新文件名AL=00 成功AL=FF 未成功19取当前缺省磁盘驱动器AL=缺省的驱动器号 0=A,1=B,2=C,.1A置DTA地址DS:DX=DTA地址1B取缺省驱动器FAT信息AL=每簇的扇区数DS:BX=FAT标识字节CX=物理扇区大小DX=缺省驱动器的簇数1C取任一驱动器FAT信息DL=驱动器号同上21随机读DS:DX=FCB首地址AL=00 读成功 =01 文件结束 =02 缓冲区溢出 =03 缓冲区不满22随机写DS:DX

温馨提示

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

评论

0/150

提交评论