




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计2013 2014学年第二学期设计题目 汇编语言程序设计课程设计-打字练习程序的设计 院(系) 计算机科学与信息工程学院 专 业 网络工程 班 级 12104333 学号 学生姓名 * 设计时间 2014年 6 月 30 日2014年7 月 4日 指导教师 杨晶鑫 提交日期 2014年7月4日 上海应用技术学院课程设计任务书课程名称汇编语言程序设计课程设计课程代码B704207设计题目汇编语言程序设计课程设计-打字练习程序的设计题目序号设计时间2014年 6月 30日 2014年 7月4日系(院)计算机科学与信息工程专业网络工程班级12104333一、课程设计任务(条件)、具体技术参数
2、(指标)本课程设计是汇编语言程序设计课程的后继教学环节, 通过对一个较大型的、综合性的应用程序进行阅读、修改、添加功能等工作, 使学生对汇编语言程序设计有更进一步的认识, 提高阅读理解复杂程序的能力和程序设计能力。根据所给的“typetest.asm”应用程序框架, 在此基础上修改和添加功能。基本任务1认真阅读“typetest.asm”源程序, 理解程序每一条指令在程序中的作用。绘制程序流程图(简略总图,各模块详细流程图),给程序中的关键语句(后跟分号)作注释;2设置输入界面,用户输入密码后才能进入主菜单;3修改主菜单,在主菜单上显示当天日期;4修改主菜单,增加可供用户选择难度级别的选项;5
3、为用户打分,正确输入字母使用时间越少,得分越高;6修改程序,在屏幕右上角显示用户得分、已输入字母数、正确数;7将程序中的“置光标位置”程序段落用宏调用完成,添加“置光标位置”宏定义。扩展任务1设置限定时间,到达该时间,用户尚未得到要求的分数时,游戏停止;2到达限定时间,用户得分达到预设的值时, 自动提高难度等级,屏幕变色;3修改程序,底行的笑脸字母消失后,不再在该列下落字母(提示:设置数组记录笑脸字母的存在与否)。笑脸字母全部消失后,游戏停止,显示告别画面,显示用户成绩。其他任务自行设计新的功能。二、对课程设计成果的要求(包括课程设计说明书、图纸、图表、实物等软硬件要求)1分析原“typete
4、st.asm”程序结构(见附件),画出主程序粗略的流程图和各个模块的详细流程图,每个功能模块用文字说明他们的功能(与对应流程图放在一起);2对已经实现的功能(修改的、新编写的)做详细的说明, 并附上流程图及程序清单(修改/增加的指令请使用大写字母,以示区别);3对该“打字练习程序”的进一步设想;4对于有设想但最终未实现的功能的大致编程思路的阐述;5论述在设计过程中遇到的并且对你具有启发性的问题三、课程设计工作进度计划:周一:布置任务,介绍程序功能和基本模块。学生仔细阅读原始源程序,在重要行添加注解。周二:画出主程序粗略的流程图和各个模块的详细流程图,对课程设计的基本任务进行设计,并开始编程。周
5、三周四:设计程序及调试程序。同时着手撰写课程设计报告。周五:完成设计,提交开发完成的程序和课程设计报告,接受教师考评。四、主要参考资料1 杨文显,宓双,胡建人新编汇编语言程序设计清华大学出版社,20102 朱玉龙,任文览等汇编语言程序设计清华大学出版社,20033 美Kip R.Irvine. 汇编语言程序设计电子工业出版社,2004指导教师(签名):杨晶鑫 教研室主任(签名):杨晶鑫 2014年 6 月 25 日 2014年 6 月 25 日目录上海应用技术学院课程设计任务书ii目录iii1概述11.1基本功能11.2拓展功能11.3其他功能12详细设计说明22.1原“typetest.as
6、m”程序结构22.2流程图22.3已经实现的功能程序结构及运行截图42.3.1设置界面密码验证后进入42.3.2主菜单显示当前日期52.3.3修改菜单,增加用户难度选择级别62.3.4屏幕显示用户得分与成绩情况72.3.5在程序中的“置光标位置”程序段落用宏调用完成, 添加“置光标位置”宏定义。93对该“打字练习程序”的进一步设想103.1提高逻辑性103.2摆脱枯燥的黑白DOS界面103.3加入音效103.4加入错误次数限制104课程设计总结124.1心得体会124.2系统改进135软件使用说明145.1系统密码145.2运行问题说明145.3运行环境14参考文献15附录16iii汇编语言程
7、序设计课程设计-打字练习程序的设计261 概述本课程设计是汇编语言程序设计课程的后续教学环节,其宗旨是使学生通过对一个较大型的、综合性的应用程序进行阅读、修改、添加功能等工作,对汇编语言程序设计有进一步的认识,提高编程技巧和阅读理解复杂程序的能力。1.1 基本功能(1) 设置输入界面, 用户输入密码后才能进入主菜单(2) 修改主菜单, 在主菜单上显示当天日期。(3) 修改主菜单, 增加可供用户选择难度级别的选项。(4) 为用户打分,正确输入字母使用时间越少,得分越高。(5) 修改程序, 在屏幕右上角显示用户得分、已输入字母数、正确数。(6) 将程序中的“置光标位置”程序段落用宏调用完成, 添加
8、“置光标位置”宏定义。1.2 拓展功能(1) 设置限定时间,到达该时间,用户尚未得到要求的分数时,游戏停止。(2) 到达限定时间,用户得分达到预设的值时, 自动提高难度等级, 屏幕变色。(3) 修改程序,底行的笑脸字母消失后,不再在该列下落字母(提示:设置数组记录笑脸字母的存在与否)。笑脸字母全部消失后, 游戏停止, 显示告别画面,显示用户成绩。1.3 其他功能设置限定出错次数,到达该出错次数,游戏就会停止。2 详细设计说明首先先定义一个清屏幕的宏。调用这个宏,就清除DOS界面上的所有内容,专门显示我们所需要的菜单。接着定义我们的数据段代码。在数据段中,有我们菜单中所需要显示的提示信息,还有要
9、显示在界面上方的字母乱序,以及给显示字母乱序所留出的数据空间。接下来就是定义堆栈段代码,为各段留下空间。再下来就是最重要的代码段,因为所有的功能都是在代码段中实现的。代码段中先实现显示主菜单、按Enter键开始程序和按E退出这几项简单的功能。接着实现显示字母乱序的功能,主要思想是将字母乱序放到之前定义的寄存器中。然后实现接受键盘所输入的内容的功能。如果输入的是Esc,则返回主菜单;如果输入的是Space,程序就暂停;如果是正确的字母,改字母就消失。消失的思想就是在当前字母位置输入空格,然后光标放到下一个下落的字母的位置。2.1 原“typetest.asm”程序结构首先在typetest.as
10、m中定义了四个宏调用的程序(1)方框宏定义(2)清屏宏定义(3)菜单显示宏定义(4)设置光标位置宏定义2.2 流程图打字练习程序的主要流程如图所示:开始输入密码判断正误NY进入主菜单图 2.1 程序图1程序开始显示菜单键盘输入E退出Enter程序开始字母显示模块字母下落模块暂停模块退出处理模块图 2.2 程序图2难度选择HighMediumLow计算,显示正确个数显示用户的成绩后退出图 2.3 程序图32.3 已经实现的功能程序结构及运行截图2.3.1 设置界面密码验证后进入id db 2,0,1,3,1,4inf db ?string db 0ah,0dh,"Please ente
11、r the password(*):$"string1 db 0ah,0dh,"The password is wrong ,please enter the password again:$"lea dx,stringmov ah,09hint 21htwo:mov cx,6lea si,idagain:mov ah,01hint 21hand al,0fhcmp al,sijnz oneinc siinc bxloop againjmp exit1one:lea dx,string1mov ah,09hint 21hjmp two图 2.4 密码验证2.3.2
12、 主菜单显示当前日期mov cx,6 mov bx,0 mov ah,0 mov al,9 s: push cx push ax out 70h,al in al,71h mov ah,al mov cl,4 shr ah,cl and al,00001111b add ah,30h add al,30h mov byte ptr ds:bx,ah mov byte ptr ds:bx+1,al pop ax cmp al,4 jna s1 jmp short s2 s1: dec al s2: cmp al,7 jne ok sub al,2 ok: dec al add bx,3 pop
13、cx loop s mov dx,0 mov ah,9 int 21h图 2.5 日期显示2.3.3 修改菜单,增加用户难度选择级别mes11 db "Hit:$"mes12 db "Right:$" mes13 db "Score:$" movah, 01hint 21hcmpal, '1'jenext1cmpal, '2'je next2cmpal, '3'je next3jmp keyin1next1:mov bx,9999hmov speed,bxjmp nextnext2:mo
14、v bx,5000hmov speed,bxjmp nextnext3: mov bx,2000hmov speed,bxnext:图 2.6 难度选择2.3.4 屏幕显示用户得分与成绩情况mes11 db "Hit:$"mes12 db "Right:$" mes13 db "Score:$" score_display proc Init_place 00d, 65d int10h lea dx,mes12 mov ax,score call writedec Init_place00d, 43d lea dx,mes13 mov
15、 ax,score call writedec retscore_display endphit_display proc movah, 0ah moval, " "将空格赋值为ALmovbh, 00hmovcx, 01hint10h mov save,dl mov save+1,dh Init_place00d, 55d lea dx,mes11 add hit,1 mov ax,hit call writedec mov dl,save mov dh,save+1 rethit_display endp图 2.7 分数显示2.3.5 在程序中的“置光标位置”程序段落用宏
16、调用完成, 添加“置光标位置”宏定义。Init_placemacrorow, col;置光标位置宏定义movah, 02hmovbh, 00hmovdh, rowmovdl, colint10hendm3 对该“打字练习程序”的进一步设想3.1 提高逻辑性可以让每次出现的字母都变得有逻辑性,就像打汉字的时候的那种逻辑性,还可以增加英语之类的打字练习。可以插入小程序,让电脑随机生成单词,可以锻炼大家四六级单词的拼写能力。这样比随意的生成字母要玩起来有趣的多,不然没有人愿意体验这款程序的趣味性。3.2 摆脱枯燥的黑白DOS界面可以改变每一个字母在掉落的时候的颜色。让每一个字母的不同时刻的颜色都由电
17、脑随机产生。不要每次都是一个白色字母下来,而且字体大小也可以随机,这样就显得游戏很生动,不同色彩和不同字体搭配就感觉十分高大上了。3.3 加入音效在打字练习的过程中还可以有一些适当的声音来配合着练习的进行,这样的话效果和用户的体验都会有更进一步的提高的。当你连续正确十个字以上就加入鼓掌的声音,要是打错了就可以来一个“炸弹”的音效,这样的氛围调动可以大大提升玩家的积极性,给人激励可以给他信心不断地玩下去。3.4 加入错误次数限制设置限定出错次数,到达该出错次数,游戏停止wrong db 30mes9 db "Game Over!$"dec wrong cmp wrong,0
18、jne pass jmp overover: clear_screen01d, 01d, 23d, 78d ; 清屏 menu03d, 33d, mes9 movax, 4c00h;退出程序图 3.1 错误退出显示4 课程设计总结4.1 心得体会汇编语言的应用已渗透到生活中的方方面面,利用机器语言,以前难以实现的东西轻而易举地成为现实。然而,作为工科学生,要了解汇编的内部结构、系统构成、指令系统、输入输出接口、存储器和接口的扩展等等,这些对我们来说非常重要。刚拿到这个题目觉得特别难,感觉无从下手。汇编语言不同于高级语言,对于高级语言,我们心中可以有一个非常清晰的思路,在实现功能的时候非常得心应
19、手。但汇编语言不同,它是面向机器的语言。用它编写程序时的思路应该按照机器执行程序的思路来编写,所以这个挑战对我来说非常大。在编写程序之前,首先要摒弃高级语言思路的干扰。汇编语言程序设计的方法和多模块程序设计。作为最基本的编程语言之一,汇编语言的重要性勿庸置疑,因为它能够完成许多其它语言所无法完成的功能。尤其在和硬件关系非常密切的程序或要提高运算速度的程序,即使是 C 语言也会有些力不从心,而汇编语言则能够很好扬长避短,最大限度地发挥硬件的性能。在做准备工作的时候,我从网上找到了相关的代码,照着别人的步骤感受汇编语言编写程序的思路。很多地方都不是太明白,但是通过查询课本以及上
20、网找相关资料,还是把一些内容理解了。这次汇编语言课程设计历时5天,在整整5天的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。以前在上课的时候,老师经常强调在写一个程序的时候,一定要事先把程序流程图先画出来,但是我开始总觉得这样做没必要,很浪费时间。但是,这次课程设计完全改变了我以前的那种错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完成的任务,画程序框图是很有必要的。因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚
21、的思路,而且在程序测试的过程中也有利于查错。此次的课程设计,提高了我阅读和分析程序的能力。因为刚一拿到目标代码时,有太多的不明白,必须一行一行地分析其目的和功能。而时间又比较紧迫,所以我在比较短的时间里分析出了代码的道理。在这个过程中我的分析与模仿能力得到了提高。由于对汇编语言的一些基本知识的掌握不足,程序中还存在或多或少的缺陷和不足,有一些的基本功能在逻辑上还存在一些的小问题,但是不会影响基本的使用。4.2 系统改进对于我所设计的打字系统,其满足了题目的所有要求,所有功能都可以实现。但我觉得这个打字练习还有许多地方可以改进,首先是界面,界面还可以设置的更友好,现在的界面看上去不是那么的友好,
22、只满足了基本功能,让用户知道如何使用这个系统。改进可以让用户感觉眼前一亮这种效果最好,当然这需要花费更多的时间和精力。再一个可以改进的地方便是系统的功能了,该打子系统的功能比较少,对于打字练习来说,其目的在于提高使用者的打字速度,所以程序最好加一个计时功能模块,这样用户就可以知道使用后自己的打字速度有没有得到提升。还有就是当用户打字出错的时候,最好在给用户配备一个警告功能以及统计错误功能,这样可以提醒用户,让用户知道打字出错了。当然还有其他许多地方值得我进一步去探讨,去完善这个程序。5 软件使用说明5.1 系统密码2013145.2 运行问题说明由于系统版本不同的缘故,在程序汇编链接的时候会停
23、滞一部,但只要在敲一下回车在进入一次就好了。很多时候在进入时输入密码后需要按回车才能跳转到主界面。5.3 运行环境运行环境:Win9x/NT/2000/XP/参考文献1 杨文显,宓双,胡建人.新编汇编语言程序设计,清华大学出版社,20102 沈美明,温冬婵,IBM-PC汇编语言程序设计(第2版),北京,清华大学出版社 2008年4月; 3 温冬蝉、沈美明,张赤红,<<IBM PC汇编语言程序设计试验设计>>,北京:清华大学出版社.1992.9月第一次出版;&
24、#160;4 温冬婵著,IBM-PC 汇编语言程序设计例题分析,清华大学出版社,1991年6月第1版; 5 王庆生,汇编语言程序设计,合肥,合肥工业大学出版社,2006年8月;6 翟社平,汇编语言程序设计教程,西安,西安电子科技大学出版社,2003年2月; 7 金汉均 金洋,汇编语言程序设计,武汉,武汉大学出版社 ,2007年9月;8 梁发寅,宗大华,汇编语言程序设计,北京,人民邮电出版社,2004年3月;附录; Assembly program for test your type skills ; Writed by in 06/24/20
25、03; Modified by Mi shuang in 06/06/2005; -Init_boardermacrorow, col, char, dhdl, count;设置边框Localllmovcx, count movdh, rowmovdl, colll:movah, 02hmovbh, 00hint10hpushcxmovah, 0ahmoval, charmovbh, 00hmovcx, 01hint10hpopcxincdhdlloopll endm; -Init_placemacrorow, col;置光标位置宏定义movah, 02hmovbh, 00hmovdh, ro
26、wmovdl, colint10hendm; -clear_screenmacrotop, left, bottom, right; 清屏宏定义movah, 06h moval, 00hmovbh, 07hmovch, topmovcl, leftmovdh, bottommovdl, rightint10hmovah, 02hmovbh, 00hmovdh, 00hmovdl, 00hint10hendm; -menumacrorow, col, text; 菜单显示宏定义 movah, 02hmovbh, 00hmovdh, rowmovdl, colint10hmovah, 09hlea
27、dx, textint21hendm; =include ylib.hDatasegment db "00/00/00 00:00:00",'$' ZKdb"WELCOME TO PLAY$" datedb "date:$"mes0db"Press Enter key to continue.$"mes1db"When a letter is dropping,please hit it!$"mes2db"Press space key to pause!$"
28、mes3db"Press ESC key to return main interface!$"mes4db"Press letter 'E' to exit!$"mes5 db "Please choose the difficulty:$"mes6 db "No.1 easy$"mes7 db "No.2 normal$"mes8 db "No.3 hard$"mes9 db "Game Over!$"mes10 db "Yo
29、ur Score is:$"mes11 db "Hit:$"mes12 db "Right:$" mes13 db "Score:$" wrong db 30Speeddw?Lettersdb"jwmilzoeucgpravskntxhdyqfb"db"iytpkwnxlsvxrmofzhgaebudjq"db"nwimzoexrphysfqtvdcgljukda"Present_positiondb1db0id db i,l,o,v,e,uinf db ?stri
30、ng db 0ah,0dh,"Please enter the password(*):$"string1 db 0ah,0dh,"The password is wrong ,please enter the password again:$"scoredw 0hit dw 0right dw 0save db ?Dataends; =codesegmentmainprocfarassumecs: code, ds: datastart:movax, datamovds, axmoves, axmovcx, 5000hmovah, 01hint10h;
31、设置光标类型clear_screen00d, 00d, 24d, 79d;清屏 lea dx,stringmov ah,09hint 21htwo:mov cx,6lea si,idagain:mov ah,01hint 21hand al,0fhcmp al,sijnz oneinc siinc bxloop againjmp exit1one:lea dx,string1mov ah,09hint 21hjmp twoexit1:Init_boarder00d, 00d, 0ah, dl, 80dInit_boarder24d, 00d, 0ah, dl, 80dInit_boarder0
32、0d, 00d, 0ah, dh, 25dInit_boarder00d, 79d, 0ah, dh, 25d;设置边框menu05d, 15d, ZK; 显示菜单menu07d, 15d, datemov cx,6 mov bx,0 mov ah,0 mov al,9 s: push cx push ax out 70h,al in al,71h mov ah,al mov cl,4 shr ah,cl and al,00001111b add ah,30h add al,30h mov byte ptr ds:bx,ah mov byte ptr ds:bx+1,al pop ax cmp
33、 al,4 jna s1 jmp short s2 s1: dec al s2: cmp al,7 jne ok sub al,2 ok: dec al add bx,3 pop cx loop s mov dx,0 mov ah,9 int 21h menu09d, 15d, mes0menu11d, 18d, mes1menu13d, 18d, mes2menu15d, 18d, mes3menu17d, 15d, mes4Init_place 22d,33dkeyin:movah, 07h; 从键盘输入命令字符int21hcmpal, 0dhjebegincmpal, 'E
34、9;不等就和e做比较jeexit;如果相等则转exitjmpkeyin;不等跳转到keyinexit:movax, 4c00h;退出程序int21hbegin:clear_screen00d, 00d, 24d, 79d ; 清屏 menu00d, 43d, mes13 menu00d, 55d, mes11 menu00d, 65d, mes12Init_boarder24d, 00d, 0ah, dl, 80dInit_boarder00d, 00d, 0ah, dh, 25dInit_boarder00d, 79d, 0ah, dh, 25d;设置边框menu05d, 15d, mes5
35、; 显示菜单menu11d, 18d, mes6menu13d, 18d, mes7menu15d, 18d, mes8Init_place 22d,33dkeyin1:movah, 01hint 21hcmpal, '1'jenext1cmpal, '2'je next2cmpal, '3'je next3jmp keyin1next1:mov bx,9999hmov speed,bxjmp nextnext2:mov bx,5000hmov speed,bxjmp nextnext3: mov bx,2000hmov speed,bxnext
36、:clear_screen01d, 01d, 23d, 78d ; 清屏Init_boarder23d, 01d, 01h, dl, 78d; 设置边框Init_place 01h,01hmovcx, 78 leasi, lettersnextletter:movah, 02h; 显示字母movdl, siint21hincsiloopnextletterstart_game: movah, 2chint21h;调取系统时间chcldh分别存放时分秒incdl;自增cmpdl, 78jnasg1subdl, 78sg1:movpresent_position, dlleadi, letters
37、adddi, word ptr present_position;将当前列数赋给didecdi;自减movdl, present_position;将当前列数赋给dlmovah, 02hmovbh, 00hmovdh, 01hint10h;设置光标类型movcx, 21d;设置循环次数nextrow:pushcx mov cx,speed;设置字母下降速度wait_for_key:; 延迟 push cx mov cx,1000delay:loopdelaypushdxmovah, 06h; 从键盘输入字符movdl, 0ffhint21hpopdxjzpasscmpal, 1bh; 如果键入
38、ESC,则返回主菜单jeto_startcmpal, " " 如果键入SPACE,则游戏暂停jnepass0pause:pushdx; 暂停处理movah, 06hmovdl, 0ffhint21hpopdxcmpal, " "将字符和空格作比较jnepause;不等则转换至空格jmppassto_start:jmpexit1pass0: cmpal,di; 输入字母正确!则字母消失 jedisappear call hit_display dec wrong cmp wrong,0 jne pass jmp over pass: pop cxLOOPwait_for_key;跳转到wait_for_key down:movah, 0ah; 在当前光标位置写空格moval, " "movbh, 00hmovcx, 01hint10h;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 聘请律师合同与聘请律师合同的范本2篇
- 公司销售代理合同(12篇)
- 医生医师聘用合同下载:执业医师聘用合同4篇
- 高中影视作品鉴赏课件
- 瑜伽导师与瑜伽馆合作合同范本专业指导与授课协议
- 车场租赁与商业地产:三方商业停车场租赁合同
- 离异家庭房产过户子女财产权保护及传承协议范本
- 离婚协议补充:房产分割及使用权调整协议
- 品牌季节性广告代理执行合同
- 员工职离职合同申请规程
- 小学生倾听课件
- 《中国政法大学》课件
- 《城市轨道交通车辆段(停车场)物业服务标准》
- 初级招标采购从业人员《招标采购法律法规》近年考试真题试题库(含答案)
- 班本课程的实施与开展培训
- 旅馆消防安全灭火疏散应急预案模版(3篇)
- 汽车吊维保记录
- 教学评一体化理念
- 人音版七年级音乐上册教案全册
- 机房网络改造升级方案
- ECE-R90-欧盟第3版-中文版(R090r3e-01)
评论
0/150
提交评论