《汇编程序课程设计报告打字计时练习程序.doc》由会员分享,可在线阅读,更多相关《汇编程序课程设计报告打字计时练习程序.doc(17页珍藏版)》请在三一办公上搜索。
1、汇编语言课程设计报告( 2014 - 2015 年度第 1 学期)课题名称:打字计时练习程序专业计算机科学与技术(网络工程)学生姓名班级B计算机131学号1310704114指导教师完成日期2015年1月16日目 录 1 设计目的12 概要设计12.1 系统总体分析12.2 主模块框图及说明13 详细设计13.1 主模块及子模块说明13.2 各模块详细设计13.2.1 主界面模块13.2.2 随机字母产生模块13.2.3 字母落下模块13.2.4 暂停模块13.2.5 返回主界面模块14 程序调试24.1 运行界面分析24.2 调试过程及分析25 心得体会25.1 设计体会25.2 系统改进2
2、参考文献3附 录4附录1 源程序清单4附录1.1 *模块源程序41 设计目的增进对汇编语言的认识,加强运用汇编语言编程的能力;通过课程设计可以使我们更加了解书上的知识,了解书上的语句并能用到自己的程序设计中。2 概要设计2.1 系统总体分析采用汇编语言设计一个打字计时程序,在缓冲区中预放了一些字母,运行时,按照屏幕上显示的字母输入练习,每输入完一行按回车键后,显示出练习输入的时间。按Q退出程序。2.2 主模块框图及说明主程序一开始先随机选取一定长度的字符串到缓冲区中,作为将要输出练习打字的材料,这些随机选入的字符为26个区分大小写的英文字母和十个阿拉伯数字。接着程序输出一系列在数据段已经设置好
3、的各种提示语,然后主程序执行输出开始时缓冲区所选好的练习字符串材料,这可以利用屏幕显示中断并配合一些指令来完成。当屏幕上显示完所练习后的打字材料后,主程序通知子程序开始计时,而与此同时主程序开始记录练习者输入的字符。每当输入一个字符时主程序都要判断所输入的字符是否正确,改变输入的总字符数,记录输入的正确的字符数并计算显示正确率,同时主程序还要控制打字练习所用时间的记录和显示,显示的形式是小时;分钟;秒。在每输入一个字符时,主程序还应该控制各个子程序执行改变颜色的任务,颜色的改变规则为:每当输入的字符为正确的时候字符显示黑色,当检测到字符为错时,字符变为红色,背景也发生变化以示区别。而原练习字符
4、串也要随着打字的进度改变而变化。不仅如此,主程序还应该时刻检测输入的字符是否为回车、backspace键,以通知子程序的执行。程序设置每一行最大输入的字符数为51个,当满行时满行标志位会有零变为一从而使得换行。当主程序检测到表示退出程序的信号Q时则退出程序,而输入的字符已经满时也会退出程序。退出时主程序会控制一子程序在显示屏上显示出这次打字练习的基本情况,主要参数包括:所用的总时间、所练习的字数和正确率。之后再按屏幕的提示:按任意键退出即可退出程序。本次主程序中主要用了两种中断类型、DOS调用、BIOS调用、宏定义及子程序调用。3.1 其他子程序说明总的程序中所含的子程序如下:输出打字正确率子
5、程序(RightRata-out):用于计算最后打字结束后的正确率;计算打字时间并输出子程序(UseTimeAndOut):用于计算打字所用的时间并输出所用时间;显示时间子程序(OutTime):用于显示出所用的打字时间;记录当前时刻所打的字符个数及正确字符个数子程序(TONGJI):用于统计当前时刻所完成的字符的个数及正确字符的个数;输出bx中的内容子程序(bx-out):用于输出bx的内容以配合其他几个程序的输出和运输;换判断是否满行并换行子程序(FullLine):当发生满行时进行换行;改变字符颜色子程序(char-change):用于改变字符的颜色,在输入过程中改变输入过后的字符的背景
6、颜色及输出字符错误时改变字符的背景及颜色。4 程序调试4.1 运行界面分析4.2 调试过程及分析编完程序后一开始不可以生成可执行文件,源程序中有不少这样那样的问题,现将几个主要的问题及解决过程列在下面。首先,不能生成EXE文件的最主要问题之一就是源程序中有不少语法错误,这些错误有:一些变量未定义、字符的错误使用、语句写的不完整及注释的格式不对等等,这些错误是很难避免的,而且寻找它们时也比较麻烦,但改正它们相对来说较为容易。接着,当语法上的一些错误改正之后便可以生成执行文件,程序可以运行且有结果了,但一开始结果并没有设想的那样。第一个错误情况是一开始的输出练习材料字符,这些字符并没有像设想的那样
7、是大小写英文字母和阿拉伯数字,除了这些之外还有其他好多字符,除此之外出现的字符也并不是随机形式的,可以说是顺序出现的。慢慢的改正主程序中开始产生随机字符部分的源程序的发现,之所以会出现好多乱码是因为一开始调用输出的寄存器弄错了,也就是调用输出来的字符是在另一处寄存器中放着的;而没有以随机形式出现字符的原因是程序编写的没有符合当初的原理,在这里随机取字符的原理是利用通过调用中断(ah=2ch,int 10)取系统时间的1|100来得到一组随机数,把这些随机数当作指针,然后取指针对应的字符表中相应的字符来得到一串字符,而编写的程序并没有像这样来。然后,出现另一个现象就是各种提示语的出现位置出现了异
8、常,有几条提示语相互重叠在一起了。提示语的显示原理是:先取得光标的位置,再在该位置输出提示语。而这里之所以是几条提示语会重叠是因为几个光标的位置没设置好,经检发现主要是设置形成的行数不够用,改正过后发现提示语恢复正常。此外,还有一些其他的小问题比如:输入的满行数不对,输出的颜色不对,正确率的计算不对及没有按条件退出打字等,这些问题大部分都是计算参数不正确所引起的,因此发现它们较容易而且改正起来也较为简单。最后,程序运行的结果终于跟预想的一样,可以用来测试打字的速度了。5 心得体会5.1 设计体会 课程设计对我们来说确实是一难点,因为这与平时讲课也好、做作业也好还是考试也好都有很大的难度上的差距
9、,很明显这次课程设计要求编的程序要大的多。所有难度要比平时大得多,要是真的凭自己的能力很难完成这次的任务,所以在这个过程借鉴了不少的资料,有从图书馆借来的书籍也有从网络上搬来的东西。 这次任务的程序里用了许多以前从未用过的指令,可能是因为以前编得都是一些简单地小程序的缘故吧!所以一开始看到题目后都不知道从哪里下手。看到这种比较难比较大的工程第一步想的就是应该去查询什么资料了,要把汇编语言的知识重新补一遍,课堂上学过的指令只是一些较为常见的指令,其他的好多也十分有用但较为复杂的指令及调用方式、中断课堂上提的较少,所以必须先得把知识巩固,不然别说编程了,就是是读程序改程序都有困难。这刚好也为我们提
10、供了一个学习的好机会。在重新查询过一些汇编的资料后,慢慢的知道要完成这次的任务得用到好多DOS调用、BIOS调用、宏定义及调用还有子程序的调用,这些由于平时用的少甚至是没用过,所以一开始感觉很棘手。其实这个时候编程还是不知道从哪里开始。于是又把目光投向了网络,其实网络上有很多讲解编程的方法,就跟老师说过一样,编程开始是要画出流程图,好的流程图是编程成功的开始。其实画流程图就像是写作文前的拟写提纲,它帮助我们梳理自己的编程思维,按照自己画的流程图一步一步的来,这样编起来有条理的多,而且这样也不容易出错。最终在网上找到了其他人编写过的程序并读懂它,还是一步步的把流程图画了出来,最后也在他人程序的基
11、础上完成了自己的程序。 程序完成后就是要调试了,调试的过程也是挺麻烦的,有不少语法上的错误和原理上的错误,调试的过程也就是将程序再一次学了一遍,调试需要对程序相当的熟悉,特别是汇编语言,对程序在哪儿执行也要了解。所以调试的过程可以说是收获最大的一个过程。对自己今后的学习也会有借鉴的作用。通过这次课程设计,我巩固了所学过的知识,感觉自己又上升了一点点。参考文献1卜燕萍,汇编语言程序设计教程(第二版).北京:清华大学出版社,2004.62钱晓捷,汇编语言程序设计(第四版).北京:电子工业出版社,2012.63沈美明,IBM-PC汇编语言程序设计(第二版).北京:清华大学出版社,2001.84周佩玲
12、,微机原理与接口技术(第一版).北京:电子工业出版社,2005.45朱世鸿,微机系统和接口应用技术(第一版).北京:清华大学出版社,2006.9附 录附录1 源程序清单附录1.1 *模块源程序COLORCHAR MACRO char,color push ax push bx push cx push dx mov ah,9h mov al,char mov bh,0 mov bl,color mov cx,1 int 10h mov ah,03h mov bh,0 int 10h mov ah,02 inc dl int 10h pop dx pop cx pop bx pop axENDM
13、BACKCHAR MACRO char,color mov ah,02h mov dl,08h int 21h COLORCHAR char,colorENDMCLEAR MACRO alz,bhz,chz,clz,dhz,dlz push ax push bx push cx push dx mov al,alz mov bh,bhz mov ch,chz mov cl,clz mov dh,dhz mov dl,dlz mov ah,06h int 10h pop dx pop cx pop bx pop axENDMSETGB MACRO bhz,dhz,dlz push ax push
14、 bx push cx push dx mov bh,bhz mov dh,dhz mov dl,dlz mov ah,2 int 10h pop dx pop cx pop bx pop axENDMREADGB MACRO bhz push ax push bx push cx push dx mov bh,bhz mov ah,03h int 10h mov gbattr0,dh mov gbattr1,dl pop dx pop cx pop bx pop axENDMLINEFULL MACRO lmax,lact push ax push bx push cx push dx mo
15、v ax,lact cmp ax,0 jz LFEXIT mov dx,0 cwd mov bx,lmax div bx cmp dx,0 jz LNFU jmp LFEXITLNFU:mov FullFlag,1LFEXIT:pop dx pop cxpop bxpop axENDMTISHI MACRO row,col,addrr push ax push bx SETGB 0,row,col mov ah,09h lea dx,addrr int 21h pop dx pop axENDMdata segment addrr db 400 dup($) addrr1 db ABCDEFG
16、HIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$ addrr2 db 400 dup($) Anumber dw 0 Rnumber dw 0 LineMax dw 0 LineAct dw 0 FullFlag db 0 gbattr db 2 dup(0) Stime db 3 dup(0) temp db 5 dup(0) ts1 db Stime:$ ts2 db Rrate:$ ts3 db Total Use-Time:$ ts4 db Total Characters:$ ts5 db Correct-Reta:$
17、ts6 db Press any key to end!$ ts7 db Pressing Q can leave out!$ ts8 db *typewriting exercise*$data endscode segment assume ds:data,cs:codestart: mov ax,data mov ds,ax mov di,0 mov bx,90zifu: mov ah,2ch int 21H mov al,dl cbw mov si,ax cmp si,40 ja zifu mov al,addrr1si mov addrrdi,al inc di dec bx pus
18、h di push si mov di,400hAa1: mov si,0ffffhAa2: dec si jnz Aa2 dec di jnz Aa1 pop si pop di cmp bx,0 jnz zifu CLEAR 0,77h,0,10,23,69 CLEAR 0,37H,3,12,22,66 CLEAR 0,70h,4,14,22,64 CLEAR 0,25H,12,14,14,64 CLEAR 0,70h,13,18,13,35 CLEAR 0,70H,13,43,13,60 SETGB 0,0,30 CLEAR 0,25h,0,28,0,49 CLEAR 0,25h,2,2
19、3,2,54 CLEAR 0,57h,1,14,1,64 mov ah,09h lea dx,ts8 int 21h SETGB 0,2,24 mov ah,09h lea dx,ts7 int 21h SETGB 0,4,14 mov di,0 mov cx,0ffffhloadchar:mov dl,addrrdi cmp dl,$ jz FULLCHAR push dx mov bp,di CALL FullLine pop dx mov ah,02h int 21h inc di loop loadcharFULLCHAR:mov ah,2ch int 21h mov Stime0,c
20、h mov Stime1,cl mov Stime2,dh SETGB 0,15,14 CALL TONGJI mov cx,0ffffh mov di,0hAS:cmp addrrdi,$ jnz ASnt00jmp AENDASnt00:mov bp,diCALL FullLinemov bp,direinput: READGB 0mov ah,01int 21hcmp al,81jnz a127ntjmp exita127nt:cmp al,0dh jnz a10dntSETGB 0,gbattr0,gbattr1jmp reinputa10dnt:cmp al,08 jnz ASnex
21、tcmp gbattr1,14jnz ASnzSETGB 0,gbattr0,gbattr1jmp reinputASnz: mov ah,02h mov dl, int 21h mov ah,02h mov dl,08h int 21h dec di dec Anumber push ax mov al,addrr2di cmp al,addrrdi jnz AS1nt dec RnumberAS1nt:pop ax CALL TONGJI mov bp,di jmp reinputASnext: inc AnumberCALL TONGJImov addrr2di,alcmp al,add
22、rrdijnz AERinc RnumberCALL TONGJIA3:inc di loop AS1AS1:jmp AsAEND:jmp exitAER:mov temp1,al BACKCHAR temp1,0f4h jmp A3exit:CLEAR 0,07,8,16,17,63 CLEAR 0,57,10,20,15,59 TISHI 11,24,ts3 call UseTimeAndOut TISHI 12,24,ts4 mov bx,Anumber call bx_out TISHI 13,24,ts5 call RightRata_out TISHI 20,30,ts6 mov
23、ah,08 int 21h mov ah,4ch int 21hRightRata_out proc near push ax push bx push cx push dx mov ax,Rnumber mov cx,100 mul cx div Anumber mov bx,ax CALL bx_out push dx mov ah,02h mov dl,. int 21h pop dx mov ax,dx mul cx div Anumber mov bx,ax CALL bx_out mov ah,2h mov dl,% int 21h pop dx pop cx pop bx pop
24、 ax retRightRata_out endpUseTimeAndOut proc near mov ah,2ch int 21h sub dh,Stime2 jns SecUnBlow jz SecUnBlow add dh,60 dec clSecUnBlow: sub cl,Stime1jns MinUnBlowjz SecUnBlowadd cl,60dec chMinUnBlow: sub ch,Stime0 CALL OutTime retUseTimeAndOut endpOutTime proc near mov al,chcbwmov bx,axCALL bx_outmo
25、v ah,02hmov dl,:int 21hmov al,clcbwmov bx,axCALL bx_outmov ah,02hmov dl,:int 21hmov al,dhcbwmov bx,axCALL bx_outretOutTime endpTONGJI proc near push axpush bxpush cxpush dxREADGB 0SETGB 0,13,20CLEAR 0,70h,13,18,13,35mov ah,09hlea dx,ts1int 21hmov ah,2chint 21hcall UseTimeAndOutSETGb 0,13,45mov ah,09
26、hlea dx,ts2int 21hmov ax,Rnumbermov bx,axcall bx_outmov ah,02hmov dl,/int 21hmov ax,Anumbermov bx,axcall bx_outSETGB 0,gbattr0,gbattr1pop dxpop cxpop bxpop axretTONGJI endpbx_out proc near push axpush cxpush dxpush bpmov ax,bxmov si,3rota1:mov bl,10 div bl mov tempsi,ah and ax,00ffh dec si cmp si,0
27、jnz rota1 mov bp,1 mov si,1rota2:mov dl,tempsi add dl,0 cmp dl,0 jz btodeal mov bp,0btrt1:mov ah,02h int 21hbtrt2:inc si cmp si,3 jna rota2 cmp bp,1 jnz RT mov ah,2h int 21h jmp RTbtodeal:cmp bp,1 jz btrt2jmp btrt1RT:pop bp pop dx pop cx pop ax retbx_out endpFullLine proc near push axpush bxmov ah,gbattr0mov al,gbattr1mov LineMax,51mov LineAct,bpLINEFULL LineMax,LineActmov bl,FullFlagcmp bl,0jz isfexitREADGB 0add gbattr0,1sub gbattr1,51SETGB 0,gbattr0,gbattr1mov FullFlag,0isfexit:mov gbattr0,ah mov gbattr1,al pop bx pop ax retFullLine endpcode ends end start
链接地址:https://www.31ppt.com/p-2882724.html