汇编课程设计论文.docx
《汇编课程设计论文.docx》由会员分享,可在线阅读,更多相关《汇编课程设计论文.docx(23页珍藏版)》请在冰豆网上搜索。
汇编课程设计论文
目录
一概述1
1.前言1
2.课程设计的目的1
3课程设计的要求2
4.汇编语言的介绍3
5.开发平台3
6.本章小结4
二总体方案设计5
1.程序设计的整体设计思路5
2.算法的整体设计思路6
3.程序的主要特点6
4.我所承担部分的设计工作以及解决的关键性问题7
5.本章小结7
三详细设计8
1.流程图8
2.密码程序部分9
3.主界面9
4.表示击中的函数10
5.取随机数11
6.清屏子程序设计12
7.暂停过程的实现13
8.本章小结13
四程序的调试与运行结果说明14
1.进入程序运行界面后,将会出现以下界面:
14
2.输入密码后,进入主界面:
14
3.按ENTER键后,进入等级选择界面15
4.选择等级后,进入游戏界面16
5.击中字母后,字母变成白色16
6.本章小结16
五课程设计总结17
参考文献18
程序部分功能的实现与改进19
一概述
1.前言
汇编语言是计算机能够提供给用户使用最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
因而,对程序的空间和时间要求很高的场合,汇编语言的应用是必不可少的。
至于很多需要直接控制硬件的应用场合,则更是非用汇编语言不可了。
并且随着当代计算机的不断更新发展,计算机在各个领域的应用越来越多,更多的软件开发人员和相关技术人员在程序设计的过程中应用汇编程序或编制汇编语言。
而汇编语言作为计算机专业大学生必修课,每个作为本专业的学生对汇编的理解和学习就显得尤为重要。
汇编语言是计算机能够提供用户使用的最快而又最好最有效的与言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
因而,对程序的空间和时间要求很高的场合,汇编语言的应用就显得必不可少了,一些直接控制硬件的应用场合,则更是非用汇编语言不可了。
所以,汇编语言在计算机以后的发展中是必不可少的工具,对于计算机专业的学生来说,不管将来是朝着硬件方向还是软件方向发展,我们都应该学好这门直接和接和硬件打交道的编程语言,只有这样,我们才能在计算机前进的道路上越走越远,越飞越高。
2.课程设计的目的
《打字练习程序设计》课程设计是在教学实践基础上进行的一次大型实验,也是对该课程所学理论知识的深化和提高。
因此,要求学生能综合应用所学知识,设计与制造出具有较复杂功能的应用系统,并且在实验的基本技能方面上进行一次全面的训练。
(1).使学生能够较全面地巩固和应用课堂中所学的基本理论和程序设计方法,能够较熟练地完成汇编语言程序的设计和调试。
(2).培养学生综合运用所学知识独立完成汇编程序课题的能力。
(3).培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。
(4).提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。
(5).培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。
(6).对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。
3课程设计的要求
汇编语言是计算机能够提供给用户的最便捷和最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的一种语言。
本次课程设计要求我们设计一个打字练习程序,即在规定的时间内按下屏幕上显示的字母,字母就消失,否则字母一直移动到屏幕底端。
(比如:
运行程序时,出现菜单主界面,按回车键出现由26个字母组成的乱序行,这时其中任一字母落下,在键盘上敲入该字母,如果输入正确,字母消失;按ESC键返回主界面;按空格键暂停;按‘E’退出。
)
此程序涉及到宏和I/O中断的调用,要求学生掌握对宏的定义和使用,使用汇编语言对I/O中断的使用。
通过这次实验要求我们:
(1).了解背景颜色的设置。
(2).了解清屏函数的用法。
(3).学会使用宏定义,宏过程,宏函数以及参数的调用。
(4).能够熟练地使用BIOS功能或DOS功能的调用。
(5).学会用汇编语言编辑中断程序。
通过打字练习程序的编写熟悉并掌握用汇编语言编程的方法与特点,借此来比较高级语言与低级语言的优缺点,以便能更好的利用各种语言来开发应用软件,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能够独立阅读、编辑和调试具有一定规模的汇编语言程序的能力,能够熟练运用汇编语言的三大结构,进一步掌握各种指令的功能,能掌握子程序的定义与调用,包括段间调用与段内调用,以及正确运用DEBUG命令,进一步理解和掌握程序直接控制I/O方式。
4.汇编语言的介绍
汇编语言(AssemblyLanguage)是面向机器的程序设计语言,汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。
在汇编语言中,用助记符(Mnemonic)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。
这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。
因此汇编语言亦称为符号语言。
使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。
汇编语言编译器把汇编程序翻译成机器语言的过程称为汇编。
汇编语言比机器语言易于读写、调试和修改,同时具有机器语言全部优点。
但在编写复杂程序时,相对高级语言代码量较大,而且汇编语言依赖于具体的处理器体系结构,不能通用,因此不能直接在不同处理器体系结构之间移植。
汇编语言的特点:
(1).面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。
(2).保持了机器语言的优点,具有直接和简捷的特点。
(3).可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。
(4).目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。
(5).经常与高级语言配合使用,应用十分广泛。
汇编语言的应用:
a.70%以上的系统软件是用汇编语言编写的。
b.某些快速处理、位处理、访问硬件设备等高效程序是用汇编语言编写的。
c.某些高级绘图程序、视频游戏程序是用汇编语言编写的。
汇编语言直接描述机器指令,比机器指令容易记忆和理解。
通过学习和使用汇编语言,能够感知、体会、理解机器的逻辑功能,向上为理解各种软件系统的原理,打下技术理论基础;向下为掌握硬件系统的原理,打下实践应用基础。
5.开发平台
开发环境:
Windows平台+MASM环境
运行环境:
Windows全系列
开发语言:
汇编语言
6.本章小结
本章内容先对计算机的发展前景做了基本的介绍,阐明了汇编语言在当代计算机发展中的重要地位,也明确的指出学习汇编语言对计算机专业学生的重要性。
简洁的说明了此次课程设计的目的和要求,并对汇编语言和课程设计的开发平台做了简单的说明。
二总体方案设计
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,否则字母一直移动到屏幕底端,然后消失,生命值减1。
当生命值减为零且未在字母下落到屏幕底端之前输入该下落字母时,打字练习结束,显示结束界面。
3.程序的主要特点
本程序最大的特点就是具有较好的人机交互功能。
在主界面中,首先显示出来的是提示用户输入进入游戏界面的密码,正确输入密码后,进入打字游戏主界面。
进入打字练习主界面后,用户可以选择不同的游戏等级,他们能够根据自己的实际打字速度,选择相匹配的等级进行打字练习。
在打字练习过程中,被击中的字母会有原先的黄色变成白色表示击中,并且用户还可以对游戏随时进行暂停。
在游戏界面的右侧,可以看见用户当前的得分情况,并且当分数达到一定的数值后,游戏自动进入下一个等级较高、难度较大的打字游戏中。
由于我们小组成员水平有限,加之时间仓促,代码中的疏漏和不完美在所难免,恳请指导老师和同学们提出宝贵修改意见。
如果用户对我们设计的程序有不明白的地方,可以选择帮助进行求解,并能与我们联系,讨论程序的不足,寻求改进,或者分享程序中的精妙之处。
4.我所承担部分的设计工作以及解决的关键性问题
在本次的课程设计任务中,我主要负责的是密码的输入及判断、清屏、击中字母和随机取字母,其他一些比较简单的问题没有专门的人负责,我们就自己解决了。
一些关键的问题,比如击中落下的字母时,字母会变成白色;字母在下落的过程中,按下空格键,游戏会暂停;本程序也使用了清屏功能,以上功能的实现将在下一张内容中具体讲解。
5.本章小结
本章较系统的讲解了整个《打字练习》的程序设计思路,对在设计原代码过程中遇到的问题也做出了相应的解答,特别是对中断处理的功能做了较详细的说明。
整个代码分成了几个模块,每个小组成员负责1~2个模块,在设计过程中遇到的一些比较简单的问题,我们成员就自己解决了。
本次《打字练习》课程设计全部代码主要分为五个模块:
1、面的显示模块;2、打字练习模块;3、速度模块;4、密码模块;5、清平模块。
其中打字模块为代码的核心组成部分,打字模块分为游戏界面模块、功能模块和等级选择模块。
本章末尾详细的说明了整个《打字练习》代码的特点及功能,相信我们设计的代码还有不足之处,也希望大家能够精益求情,提出宝贵的修改意见。
最后,本章也介绍了小组各成员主要负责的模块和本人解决的关键问题。
三详细设计
1.流程图
开始是一个主界面,在主界面上包括四个选项,第一个选项是进入打字子程序,第二个是选择进入等级设置子程序,第三个是进入帮助子程序,第四个是退出主界面,程序的核心模块是打字,各个模块功能的实现主要是通过键盘输入指令来融合的,主要流程是先到主界面,然后选择你想要进行的指令ENTER进入打字界面开始打字,E退出程序,空格在打字练习时执行暂停的功能,ESC是从打字界面返回到主界面。
以下是程序的主流程图:
图3-1流程图
2.密码程序部分
此部分代码先调用清屏函数,使界面清晰可见,初始密码在伪代码中设置为6个1,通过INPUT函数循环输入6个字符,并以‘*’的形式显示出来,然后通过CONTIUN函数逐个比较输入的字符,若比较成功,则继续执行程序,若失败,则一直等待,直到输入正确密码为止。
START:
MOVAX,DATAS
MOVDS,AX
CALLCLEAR;调用清屏函数,清除dos界面
DIS1MES5,5,15
LEABX,PASSWORD1
MOVCX,6
INPUT:
MOVAH,07H
INT21H
MOV[BX],AL
INCBX
MOVAH,02H
MOVDL,'*'
INT21H
LOOPINPUT
CONTIUN:
MOVAH,07H
INT21H
CMPAL,0DH
JNECONTIUN
MOVCX,6
LEASI,PASSWORD
LEADI,PASSWORD1
CHECK:
MOVAL,[SI]
CMPAL,[DI]
JNESTART
INCSI
INCDI
LOOPCHECK;输入密码并判断
3.主界面
主界面是程序的初始入口,也是其他功能模块的接入点。
主模块是打字模块,也是核心模块,主要通过各个键盘符来控制各个子模块之间的协调。
子模块分为判断输入字符判断模块(这当中包含两个小的子模块:
主界面输入字符判断和打字模块输入字符判断)、暂停模块、退出模块(这当中包含两个小的子模块:
打字界面返回主界面模块和主界面退出程序模块)。
STR1DB'Welcometoplaychars',0AH,0DH,'$'
STR2DB'Madebyzhangxiangzhangningyinfengwanghanfeiwujingxian',0AH,0DH,'$'
STR3DB'2011/9/29',0AH,0DH,'$'
STR4DB'Pleasechoosespeeding',0AH,0DH,'$'
STR5DB'PleasepressEntertocintinue...',0AH,0DH,'$'
STRADB'<------Pleasechoose----->',0AH,0DH,'$'
STRBDB'score:
','i',0AH,0DH,'$'
STRCDB'Youchoose:
',0AH,0DH,'$'
STRDDB'hqfuvodepfdjygnhtrwgaerjrklubgsnyrsbntrsbngtrdjykuahtrgregfytjgfjytjktru','$'
STREDB'RIGHT:
','$'
MES5DB"PLEASEENTERYOURPASSWORD:
$"
PASSWORDDB"111111"
PASSWORD1DB6DUP(?
)
4.表示击中的函数
在游戏开始后,会从屏幕上方随机的落下一个字符,若从键盘输入的字符与下落的字符相同,则字符会显示白色,表示击中,然后消失,下一个随机字符继续下落。
以下是表示暂停的代码:
MOVAH,2
MOVBH,0
INT10H
PUSHAX
PUSHBX
MOVAH,9
MOVBH,0
MOVCX,1
MOVAL,[SI]
MOVB1,00101111B;字母击中后显示白色
INT10H
POPAX
POPBX
CALLSLEEP1
MOVAH,2
MOVBH,0
PUSHDX
MOVDL,''
MOVAH,02H
INT21H;显示空格覆盖字母
INT10H;置光标位置
POPDX
5.取随机数
此段代码功能的实现通过21中断的2C功能,从系统取出一个时间,然后将该时间的秒数存入DH,取出的微秒数存入DL,将两个寄存器的数值相加并送入DH后,再求余(余数小雨于26),余数存入AH后,按照余数的数值相应的从26个字母中选出对应的字母。
RANDOMPROCNEAR
PUSHCX
PUSHDX
MOVAH,2CH
INT21H;取系统时间DH:
秒DL:
1/100秒
ADDDH,DL
MOVAL,DH
MOVAH,0
MOVDL,26;26个字母故模26
DIVDL;AX/DL余数在AH
POPDX
POPCX
RET
RANDOMENDP
6.清屏子程序设计
BIOS功能调用中的INT10H功能6能使屏幕内容上卷指定的行,这个功能需要设置4个参数,分别代表清屏区域的左上角的坐标和右下角的坐标。
如果屏幕的其实行列不为(0,0)结束的行列不为(24,79),则屏幕上只有指定的一部分具有上卷的功能,这个屏幕伤的部分区域叫做窗口(window)像这样的窗口可以在屏幕上设置多个,这些窗口都可以独立使用。
如果上卷超过指定窗口的顶部,这些行的内容就消失,出现在窗口底部的新行被填为空格,其属性用BH寄存器决定。
如果AL=0,则实现完成的工作是清楚屏幕的功能,它将按AL中的BH字符使指定的窗口为空白。
以下是清除全屏幕的子程序:
CLEARPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVAH,6
MOVAL,0;blankscreen
MOVBH,7
MOVCH,0;左上角行号
MOVCL,0;左上角列号
MOVDH,24;右下角行号
MOVDL,79;右下角列号
INT10H;屏幕初始化或上卷
MOVDX,0;行列号都为0
MOVAH,2
INT10H;置光标位置
;DIS525D,10100100B;置背景色背景蓝前景红
DIS525D,11110100B;置背景色背景白色前景红
DIS3
RET
CLEARENDP
清屏宏定义中采用了INT10H的6号功能。
设置上卷零行、颜色(可查表)。
对于文本框中各行各列的标号可以通过形式参量设置。
INT10H的2号功能定义了光标的起始位置为0行0列。
7.暂停过程的实现
X1:
CMPAL,20H;空格键第二次比较
JETA;暂停
JNET3
TA:
CALLPAUSE
T3:
CMPAL,45H;E退出第三次比较
JNET0
CALLEXIT
如果输入空格,则程序执行暂停功能,暂停功能的实现是通过以下方法实现的,当从键盘输入空格时,程序收到暂停信号,执行跳转,跳转到一个死循环模块,就是无限显示当前屏幕,不做其他任何操作,直到键盘再次输入空格时,程序收到暂停结束指令,跳转回到主程序模块,继续执行主模块的功能。
8.本章小结
本章应用了流程图、结合具体的代码详细的介绍了各个模块的功能是如何实现的,所讲解的模块大部分是本人所负责的,代码中的各个模块都是紧密相连的,没有一个模块能够独立王成某一个功能,因此,在各个模块的设计过程中,我们小组成员经常沟通、探讨一些解决问题的有效方法,使得我们整个小组充满了一种团结协作的精神,我们小组成员也深深地体会到了这种精神所带来的巨大力量。
也许本章所讲解的内容不难,相信也有更加完美的代码能实现同样的功能,但由于我们小组成员水平有限,不完美的地方望大家谅解,有讲解不正确的地方更是希望大家提出宝贵修改意见,本组成员将不胜感激。
四程序的调试与运行结果说明
本章将利用执行程序时所截下来的图片,给大家展示整个《打字练习》源代码的全部功能,包括老师提出修改意见,我们修改代码后,源代码所具有的新功能。
1.进入程序运行界面后,将会出现以下界面:
图4-1输入密码界面
此部分代码先调用清屏函数,使界面清晰可见,初始密码在伪代码中设置为6个1,通过INPUT函数循环输入6个字符,并以‘*’的形式显示出来,然后通过CONTIUN函数逐个比较输入的字符,若比较成功,则继续执行程序,若失败,则一直等待,直到输入正确密码为止。
2.输入密码后,进入主界面:
图4-2游戏主界面
主界面是程序的初始入口,也是其他功能模块的接入点。
主模块是打字模块,也是核心模块,主要通过各个键盘符来控制各个子模块之间的协调。
进入友好的游戏主界面后,显示在用户眼前的是“欢迎进入游戏”的标语,以及本组成员的拼音姓名和完成代码日期。
在最下面是提示用户安“Enter”键继续进行游戏的友情提示。
3.按ENTER键后,进入等级选择界面
图4-3速度选择界面
进入速度下选择界面后,用户会看到3个等级的速度可供选择,等级越高,难度越大,字母下落的速度会越快,下面的语句提示输入数字1—3选择相应的速度等级。
如果输入其他数字,程序将无法继续执行,直到输入正确的等级之后,才能继续打字练习。
4.选择等级后,进入游戏界面
图4-4开始游戏主界面
进入开始游戏主界面开始游戏后,界面左边是菜单选择栏,可供用户选择暂停、返回主界面、退出游戏等功能,右边显示用户当前得分情况。
当分数达到一定的数值后,游戏会自动进入另一个等级更高、难度更大、字母下落速度更快的级别。
5.击中字母后,字母变成白色
图4-5击中字母
此部分为根据老师要求修改代码后,表示击中字母时,字母变成白色提示用户击中字母,然后消失,程序再随机取一个字母下落,如此循环。
6.本章小结
本章所提供的图片全部是在执行程序过程中所截得的真实图片,直观的反映出了程序源代码所具有的各项功能。
五课程设计总结
此次的课程设计,基本上达到了课程设计任务书上所提出的各项要求。
考虑到此次课程设计需要实现的功能很多,所以我们分模块来完成。
我们每个组员负责一到两个模块,我主要负责密码、清屏、击中字母和取随机字母,我们并非是每个人只管一个模块,而是互相配合,主要负责一到两个部分,至于别的部分,那些比较简单的就没人专门负责了,而且人也没有那么多。
从这次课程设计中,我也再一次了解到了分工合作的重要性,在以后的学习工作中,我们遇到的程序肯定会比这个更加复杂,一个人很难独立完成,那就需要和别人分工合作了。
另外,本次课程设计,使我对汇编语言的语法结构和基本语义有了较为清楚的了解;通过自己的设计和编写代码,我将书上的知识大致的复习了一遍,加深了我的印象,通过设计,我深刻认识到一个清晰明朗的流程图对程序的设计是十分重要的。
就是我们在课堂上学到的知识根本就不