




免费预览已结束,剩余20页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目 录一 概述21背景分析及意义22. 课程设计的目的23. 课程设计的要求34汇编语言的介绍3二 总体方案设计51. 程序设计的整体设计思路52. 算法的整体设计思路63. 程序的主要特点64. 程序的主要功能6三 详细设计71. 主界面的设计72. 打字练习程序设计83等级界面的设计94. 帮助界面的设计95. 生命计数和分数值的设计106. 清屏子程序设计11四 程序的调试与运行结果说明121MASM5.0简介122. 程序的运行结果12五 课程设计总结16致 谢17参考文献18附 录19一 概述1背景分析及意义随着计算机的不断更新发展,计算机在各个领域的应用越来越多,更多的软件开发人员和相关技术人员在程序设计的过程中应用汇编程序或编制汇编语言。而汇编语言作为计算机专业大学生必修课,每个作为本专业的学生对汇编的理解和学习就显得尤为重要。汇编语言是计算机能够提供用户使用的最快而又最好最有效的与言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。因而,对程序的空间和时间要求很高的场合,汇编语言的应用就显得必不可少了,一些直接控制硬件的应用场合,则更是非用汇编语言不可了。打字练习程序设计课程设计是在教学实践基础上进行的一次大型实验,也是对该课程所学理论知识的深化和提高。因此,要求我们能综合应用所学知识,设计与制造出具有较复杂功能的应用系统,并且在实验的基本技能方面上进行一次全面的训练。通过具体的问题分析、设计、调试、运行程序。在实际问题中锻炼提高自己,增加了对本门课程内容的理解,锻炼了动手能力。就这个程序具体而言:调用宏,显示背景和主界面,通过选择不同的选项,可以进入不同的界面;采用BIOS功能的中断,可以在任何时候退出当前所在的界面并通过选择进入其他的界面。这个程序最终通过菜单所提示的信息选取所要进入的界面,获得所要的功能。2. 课程设计的目的1能够较全面地巩固和应用课堂中所学的基本理论和程序设计方法,能够较熟练地完成汇编语言程序的设计和调试。2培养综合运用所学知识,独立完成汇编程序课题的能力。3培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。4提高对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。5. 培养从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。6对掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。3. 课程设计的要求汇编语言是计算机能够提供给用户的最便捷和最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的一种语言。通过这次实验要求我们:1. 了解背景颜色的设置。2. 了解清屏函数的用法。3. 学会使用宏定义,宏过程,宏函数以及参数的调用。4. 能够熟练地使用BIOS功能或DOS功能的调用。5. 学会用汇编语言编辑中断程序。通过打字练习程序的编写熟悉并掌握用汇编语言编程的方法与特点,借此来比较高级语言与低级语言的优缺点,以便能更好的利用各种语言来开发应用软件,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能够独立阅读、编辑和调试具有一定规模的汇编语言程序的能力,能够熟练运用汇编语言的三大结构,进一步掌握各种指令的功能,能掌握子程序的定义与调用,包括段间调用与段内调用,以及正确运用DEBUG命令,进一步理解和掌握程序直接控制I/O方式。4汇编语言的介绍 汇编语言(Assembly Language)是面向机器的程序设计语言,汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。在汇编语言中,用助记符(Mnemonic)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。因此汇编语言亦称为符号语言。使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编语言编译器把汇编程序翻译成机器语言的过程称为汇编。 汇编语言比机器语言易于读写、调试和修改,同时具有机器语言全部优点。但在编写复杂程序时,相对高级语言代码量较大,而且汇编语言依赖于具体的处理器体系结构,不能通用,因此不能直接在不同处理器体系结构之间移植。 汇编语言的特点: 1.面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。 2.保持了机器语言的优点,具有直接和简捷的特点。 3.可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。 4.目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。5.经常与高级语言配合使用,应用十分广泛。 汇编语言的应用: 1.70%以上的系统软件是用汇编语言编写的。 2.某些快速处理、位处理、访问硬件设备等高效程序是用汇编语言编写的。 3.某些高级绘图程序、视频游戏程序是用汇编语言编写的。 汇编语言直接描述机器指令,比机器指令容易记忆和理解。通过学习和使用汇编语言,能够感知、体会、理解机器的逻辑功能,向上为理解各种软件系统的原理,打下技术理论基础;向下为掌握硬件系统的原理,打下实践应用基础。 5.开发平台开发环境:Windows平台+MASM环境运行环境:Linux和Windows全系列开发语言:汇编语言.二 总体方案设计1. 程序设计的整体设计思路 要求完成一个打字练习程序,即在规定的时间内按下屏幕上显示的字母,字母就消失,否则字母一直移动到屏幕底端。(比如:运行程序时,出现菜单主界面,按回车键出现由26个字母组成的乱序行,这时其中任一字母落下,在键盘上敲入该字母,如果输入正确,字母消失;按ESC键返回主界面;按空格见暂停;按E退出。)在设计本课题之前,要考虑两个问题:一是如何从键盘输入并显示字符;二是如何在输入时进行计时。考虑第一个问题,在PC中,对键盘的管理是通过中断机构和8255可编程序外围接口芯片来实现的。在我的设计中,我采用的是第一种思路。由于系统在BIOS中已配备了键盘的服务功能,因此可通过调用键盘的DOS和BIOS功能编程。而且设计中使用的都是软件中断,故在具体的程序设计时,需要禁止硬件中断。再考虑第二个问题,计时部分也可通过定时器的中断来实现。由于定时器中断优先级比键盘高,只要在键盘中断处理程序中用一条STI指令允许高级中断,那么在整个打字的过程中,定时器会以每秒18.2次的频率产生中断。根据计时的需要,在整个打字过程中,再使用自编的中断例行程序可把定时器中断的次数转换成时间。 在键盘打字时采用09类型的键盘中断,来取得输入字符并将字符显示在屏幕上。程序设计时,预先设置的堆栈中存放一些字符串例句,每次打字之前,屏幕上先显示出一个例句,然后打字员按照例句,将句中字符通过键盘输入。这个过程可反复进行,当键入一个功能键时,退出打字计时程序。自行编制键盘中断和时间中断处理程序,并保存原中断向量。程序运行时,使用自编的中断向量处理程序。程序退出时,恢复中断向量。自编中断处理程序也是本课题需要考虑的重要问题。虽然系统自带了许多中断例行程序可以由INT指令来执行,但在本课题中需要对原中断例行程序的功能进行扩充才可。该打字程序包括以下五个子程序:(1)主界面的显示模块;(2)打字练习模块;(3)设置等级模块;(4)帮助模块;(5)清屏模块。其中的打字练习模块又分为以下三个子程序:(a)生命计数模块;(b)分数值模块;(c)退出模块。2. 算法的整体设计思路此程序涉及到宏和I/O中断的调用,通过对宏的定义和使用以及对I/O中断的使用,实现程序的相应功能。利用宏,实现各个界面的显示,采用中断,实现各个子程序的相互转换。其中最主要的是打字程序:运行程序,打字界面中出现由26个字母组成的乱序行,这时其中会有任一字母落下,在键盘上输入该字母,字母消失,分数值加1,否则字母一直移动到屏幕底端(第21行),然后消失,生命值减1。当生命值减为零且未在字母下落到屏幕底端(第21行)之前输入该下落字母时,打字练习结束,显示结束界面。3. 程序的主要特点本程序最大的特点就是具有较好的人机交互功能。在主界面中,用户可以选择不同的游戏等级,他们能够根据自己的实际打字速度,选择相匹配的等级进行打字练习。如果用户对我们设计的程序有不明白的地方,可以选择帮助进行求解,并能与我们联系,讨论程序的不足,寻求改进,或者分享程序中的精妙之处。此外,根据用户的打字情况,我们会给予他们相应的分数和生命数。4. 程序的主要功能 在本实验中,通过编写汇编源程序,将实现以下功能:(1)通过在菜单界面选择,可以进入不同的子程序。按“1”,进入打字练习子程序;按“2”,进入等级设置子程序,在这个子程序中,你可以根据自己的实际水平或者喜好选择不同的等级;按“3”,进入帮助子程序,其中你可以查询在这个程序中你不懂的操作;按“4”,退出主界面。(2)当你进入打字界面后,系统自动给你提供26个小写字母的乱序行,在键盘上输入该字母,字母消失,分数值加1,否则字母一直移动到屏幕底端(第21行),然后消失,生命值减1。当生命值减为零且未在字母下落到屏幕底端(第21行)之前输入该下落字母时,打字练习结束,显示结束界面。(3)当你正在进行打字练习时,按空格键可以暂停打字,此时重按空格键可以继续进行打字练习,若此时想退出打字练习,按“Q”就可以了;如果你想直接退出打字练习,按“Esc”键。三 详细设计1. 主界面的设计本次程序开始是一个主界面,在主界面上包括四个选项,第一个选项是进入打字子程序,第二个是选择进入等级设置子程序,第三个是进入帮助子程序,第四个是退出主界面,以下是程序的主流程图:显示主菜单选择界面进入打字界面选择等级进入帮助界面开始退出图3-1 总流程图主界面伪代码:STACK SEGMENT STACK DB 2000 DUP (0)STACK ENDS DATA SEGMENTCOPYRIGHT DB PROGRAMED BY GROUP ONE$NUM DB NO.1$MENU1 DB 1.START GAME$MENU2 DB 2.SELECT LEVEL$MENU3 DB 3.HELP&ABOUT$MENU4 DB 4.EXIT$MENU5 DB SELECT NUMBER OF MENU:$2. 打字练习程序设计2.1 打字练习程序流程图在主界面中选择“1”后,进入打字显示界面,此时按“Esc”键退回主界面,按其他任意键进入打字程序,屏幕上会有随机的一个字母落下,按“Esc”键退出程序;按空格键暂停,重按空格键继续打字,按“Q”退出程序;若按其他键程序继续进行。打字界面选择打字退出按键:输入字母,Q,或Esc退出暂停继续按键:输入Q或空格图3-2 打字界面流程图2.2 打字显示界面的伪代码.此伪代码显示的是进入打字界面的提示信息:MEG1 DB PRESS ANY KEY TO START THE GAME.$MEG2 DB ESC=RETURN MAIN MENU$MEG3 DB SPACE KEY=PAUSE OR RESUME$MEG4 DB WHEN THE GAME WAS PAUSED,PRESS Q TO QUIT!$2.3 打字结束后的界面伪代码: 此伪代码用于显示当用户的生命结束时界面的显示信息:MEG5 DB LIVES:$ ;生命数MEG6 DB SCORE:$ ;分数OVER1 DB GAME OVER !$OVER2 DB PRESS ENTER TO RETRY$OVER3 DB PRESS ESC TO RETURN MAIN MENU$OVER4 DB YOUR FANAL SCORE IS:$3等级界面的设计在主界面中选择2,进入等级界面的设置,其中有6个等级,代表不同的难易程度。用户可选则其中的任意一个级别,按Enter键表示确定并返回主界面,若用户输入的错误的等级,则一直等待,直到输入了正确的等级。以下是等级界面的伪代码:MENU21 DB 1.VERY EASY$MENU22 DB 2.EASY$MENU23 DB 3.NORMAL$MENU24 DB 4.HARD$MENU25 DB 5.HELL!$MENU26 DB 6.RETURN$ 4. 帮助界面的设计在主界面中选择3,进入了帮助界面的查询,其中有7条信息,主要包括设计者信息:邮箱,QQ号以及设计时间等。以下是帮助界面伪代码:ABOUT1 DB THIS PROGRAM WAS PROGRAMMED BY GROUP ONE$ABOUT2 DB IT IS A PIECE OF HOMEWORK$ABOUT3 DB IF YOU WANT TO HAVE MORE INFORMATION$ABOUT4 DB CONTRACT ME!$ABOUT5 DB MAIL:naro123163.COM$ABOUT6 DB QQ:407830244$ABOUT7 DB FINISHED ON 2010/06/24$5. 生命计数和分数值的设计在运行打字界面时,设置用户的初始生命值为9,初始分数值为0,在生命没有结束之前,用户没打对一个字母,分数值加1,没打错一个字母,生命值减1,直到生命结束。以下是部分伪代码:JMP HITMOV LIFE,39H CHANGE_0: MOV COUNT,0JMP PRINT_NEXT ADD_SCORE:MOV COUNT,0 PUSH DXMOV DH,SCORE2 ADD DH,LEVELMOV SCORE2,DH POP DXCMP SCORE2,39H JA TO_SCORE_3MOV AH,2 MOV DH,23MOV DL,42 INT 10HMOV AH,0AH MOV BH,0MOV AL,SCORE2 MOV CX,1INT 10H JMP HITTO_SCORE_3: JMP SCORE_3MOV AH,0AH MOV BH,0MOV AL, MOV CX,1INT 10H CMP COUNT,10JE ADD_SCORE ADD COUNT,1PUSH DX ADD DH,LEVELMOV SCORE1,DH POP DXCMP SCORE1,39H JA SCORE_2MOV AH,2 MOV BH,0MOV DH,23 MOV DL,43INT 10H MOV AH,0AHMOV BH,0 MOV AL, MOV CX,1 INT 10HMOV AH,0AH MOV AL,SCORE1MOV BH,0 MOV CX,1INT 10H6. 清屏子程序设计BIOS功能调用中的INT 10H功能6能使屏幕内容上卷指定的行,这个功能需要设置4个参数,分别代表清屏区域的左上角的坐标和右下角的坐标。如果屏幕的其实行列不为(0,0)结束的行列不为(24,79),则屏幕上只有指定的一部分具有上卷的功能,这个屏幕伤的部分区域叫做窗口(window)像这样的窗口可以在屏幕上设置多个,这些窗口都可以独立使用。如果上卷超过指定窗口的顶部,这些行的内容就消失,出现在窗口底部的新行被填为空格,其属性用BH寄存器决定。如果AL=0,则实现完成的工作是清楚屏幕的功能,它将按AL中的BH字符使指定的窗口为空白。以下是清除全屏幕的子程序:CLS MACRO OP1,OP2,OP3,OP4 MOV AH,6MOV BH,17HMOV AL,0MOV CH,OP1MOV CL,OP2MOV DH,OP3MOV DL,OP4INT 10HMOV AH,2 MOV BH,0MOV DH,0MOV DL,0INT 10HENDM 以上6个子程序的设计,包含了本程序的最主要的功能模块,其中不包括界面四周的图案设计,总之,这6个子程序基本上涵盖了本程序的所有功能。四 程序的调试与运行结果说明1MASM5.0简介MASM的主要版本: 2000年微软发布了MASM6.15版本,后来出现MASM 64位元版。 6.15 版是放在 Visual C+ 6.0 Processor Pack 中。7.0 版是放在 Visual C+ .NET 2002。7.1 版是放在 Visual C+ .NET 2003。8.0 版是放在 Visual C+ .NET 2005,它也可以组译 x64 的程式码。特点及功能介绍:4.x 1980 年代末期最流行的版本,很多组合语言入门书都以它为范本。5.x 开始强化组译器简易指令(点指令),以简化程式架构。稍晚的组合语言入门书亦大量运用此一版本。 6.x 版本为了支援 Windows,有几个重大特色:(1)支援 flat 与 386 以上 CPU保护模式。 整合 PWB(ProgrammersWorkBench) 开发环境。这软件在同时期的 Quick BASIC 也找得到。 (2)支援 DOS Extender,内建 DOS/16M。 (3)开始支援 OS/2 与 WinAPI。 (4)简易指令加入流程控制叙述,如 .IF、.While、.Exit.等。 (5)强化对外部函式库的支援命令,如 proto 与 invoke 等指令,其中最核心的是将 proc 指令包装成符合高阶语言风格(支援 C 与 Pascal 风格)的形式,且 invoke 指令重新包装 call 与 push/pop 指令,可以更直观、高阶地运用函式。这对呼叫高阶语言写成的函式、特别是繁复的 WinAPI 非常重要。 (6)masm 与 link 整合为 ML。(7) NMake 的 makefile 描述结构也产生了巨大的变化。2. 程序的运行结果(1) 进入程序运行界面后,将会出现以下界面:图4-1 主界面图(2) 在主界面中选择“1”,进入打字练习初始界面:图 4-2 打字练习初始界面(3) 按任意键(除“Esc”键外),进入打字运行界面,若按“Esc”键,则退出打字练习,以下是打字界面的截图,该界面中包括你当前的生命值和所得分数。 图4-3 打字运行界面 (4) 当你的生命结束时,系统自动退出打字界面,并显示你打字的成绩,同时提醒你接下来可能的操作,按“Enter”键重新开始,按“Esc”键退出。图4-4 打字结束界面(5)在主界面中选择“2”,进入等级选择界面,在该界面中,你可以设置打字练习的等级,按“Enter”键确认并退回主界面。图4-5 等级选择界面(6) 在主界面中选择“3”,进入帮助界面,在这个界面中有设计者提供的帮助信息。 图4-6 帮助界面 以上的所有截图都是本程序在运行过程中实际图片,它能真实的反映了本程序的各项功能,比如:显示用户的生命值,当前所得分数,设置打字练习的等级,提供帮助等。五 课程设计总结汇编语言是计算机能够提供给用户的最快的、也是最有效的语言,也是能够利用计算机所有硬件特性并且能够直接控制硬件的唯一语言。汇编语言指令是用一些具有相应含义的助忆符来表达的,所以,它要比机器语言容易掌握和运用,但另一方面,它要直接使用CPU的资源,相对高级程序设计语言来说,它又显得难掌握。但它不同于任何高级语言,汇编语言几乎可以完全和机器语言一一对应,语句简单直观但不如高级语言方便调试,所以在学习的过程中需要记忆大量的助记符。该程序是由汇编语言编写的打字练习程序。通过本次课程设计,使我对汇编语言的语法结构和基本语义有了较为清楚的了解;通过自己的设计和编写代码,我也将书上每章的知识大致的复习了一遍,加深了我的印象,通过设计,我深刻认识到一个清晰明朗的流程图对程序的设计是十分重要的。在设计中,我在没有先画流程图的情况下就开始编写代码,结果是我弄得一头雾水,实在是无法进行了,后来经过同学的建议,我在弄清题意的情况下,画了程序流程图,并按此开始编写代码,结果让我获益匪浅。与其他同学合作完成本次课程设计,在这次课程设计中我收获如下:1.学到了汇编语言设计程序的思想和方法。2.学会了任务分配、任务从化整为零,再化零为整的方法。3.学到发现问题思考问题解决问题的方法。 4.增强了团队精神其中我也认识到不少不足,对汇编语言,尤其宏的使用有了更多认识,但是我也发现自己深入理解不多。宏过程和宏函数,宏传递的参数和返回值,以及局部变量都是我不能融会贯通的地方,需要时间进行更多的练习。致 谢参考文献 1 沈美明 ,温冬婵,IBM-PC汇编语言程序设计(第2版),北京,清华大学出版社,2008年4月;2 王庆生,汇编语言程序设计,合肥,合肥工业大学出版社,2006年8月;3 翟社平,汇编语言程序设计教程,西安,西安电子科技大学出版社,2003年2月;4 金汉均 金洋,汇编语言程序设计,武汉,武汉大学出版社 ,2007年9月;5 梁发寅,宗大华,汇编语言程序设计,北京,人民邮电出版社,2004年3月;6 冉林仓,win32汇编语言实用教程,北京,清华大学出版社,2004年2月;7 杨季文,80X86汇编语言程序设计教程,北京,清华大学出版社,1999年3月。附 录程序的主要源代码:宏定义:SHUCHU MACRO OP1,OP2,OP3,OP4,OP5,OP6 ;循环输出,用于初始化界面周边的笑脸符MOV CX,0MOV DH,OP1 ;起行MOV DL,OP2 ;起列OP6: MOV AH,02HMOV BH,00HINT 10HPUSH CXMOV AH,0AHMOV AL,OP3 ;要显示的字符MOV CX,01HMOV BH,00HINT 10HPOP CXINC CXINC OP4 ;这里指的要循环输出的是行还是列CMP CX,OP5 ;循环次数JNE OP6ENDM;=MENU MACRO OP1,OP2,OP3 ;用于屏幕上文字的输出MOV CX,0 ;1,2为起始输出的行、列,3为字符串的地址MOV AH,02HMOV BH,00HMOV DH,OP1MOV DL,OP2INT 10HLEA DX,OP3MOV AH,9INT 21H ENDM;=CLS MACRO OP1,OP2,OP3,OP4 ;用于清屏,分别是起止的行和列 MOV AH,6MOV BH,17H;背景颜色MOV AL,0MOV CH,OP1MOV CL,OP2MOV DH,OP3MOV DL,OP4INT 10HMOV AH,2 MOV BH,0MOV DH,0MOV DL,0INT 10HENDM字母下落的过程:GAME_NEXT:ADD SI,WORD PTR POSITION;DEC SIMOV DL,POSITION ;POSITION就代表的是列MOV AH,02HMOV DH,1MOV BH,0 INT 10H ;置光标位置CMP COUNT,10JE CHANGEMOV BL,17H; 字符颜色TEMP:MOV CX,0NEXTRO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 标准厂房屋面防水处理方案
- 冷链全程追溯系统搭建管理方案
- 标准厂房设备安装调试方案
- 供水成本核算与控制方案
- 企业行业数据调研分析模板
- 大数据分析对流通企业资本配置效率的影响
- 加快能源应用场景赋能的策略及实施路径
- 汽车零部件制造全生命周期管理的策略
- 东南亚跨境电商平台竞争格局与发展策略研究报告
- 2025年个人外汇答题库及答案
- 术后谵妄护理查房
- 绿地香港招标管理制度
- 2025年新疆中考数学试卷真题(含答案解析)
- DNA纳米导线-洞察及研究
- 2025-2030年中国铜包铝线行业市场现状供需分析及投资评估规划分析研究报告
- 2025年广西专业技术人员继续教育公需科目(三)答案
- 2025合同法自考法律本科
- 医院等级薪酬管理制度
- GB/T 19437-2025印刷技术印刷图像的光谱测量和色度计算
- 细胞商业计划书
- 生产现场目视化管理培训
评论
0/150
提交评论