《汇编语言课程设计(论文)打字练习.doc》由会员分享,可在线阅读,更多相关《汇编语言课程设计(论文)打字练习.doc(32页珍藏版)》请在三一办公上搜索。
1、学 号: 课 程 设 计题 目打字练习教 学 院计算机学院专 业09计算机科学与技术班 级09计科(1)班姓 名指导教师 2011年10月04日目 录一 概述21背景分析及意义22. 课程设计的目的23. 课程设计的要求34汇编语言的介绍3二 总体方案设计51. 程序设计的整体设计思路52. 算法的整体设计思路63. 程序的主要特点6三 详细设计71. 流程图72. 主界面伪代码73等级界面伪代码84. 游戏界面伪代码85. 清屏子程序设计96.密码程序设计107.宏代码117.1在指定位置显示彩色字符串117.2显示背景117.3画横向边框的宏127.4画竖边框的宏138.功能的进一步完善1
2、38.1完善代码一138.2完善代码二148.3完善代码三15四 运行结果说明171.密码界面图:172.主界面图:173.等级选择界面:174.游戏界面:18五 课程设计总结20参考文献22一 概述1背景分析及意义随着计算机的不断更新发展,计算机在各个领域的应用越来越多,更多的软件开发人员和相关技术人员在程序设计的过程中应用汇编程序或编制汇编语言。而汇编语言作为计算机专业大学生必修课,每个作为本专业的学生对汇编的理解和学习就显得尤为重要。汇编语言是计算机能够提供用户使用的最快而又最好最有效的与言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。因而,对程序的空间和时间要求很高的场合
3、,汇编语言的应用就显得必不可少了,一些直接控制硬件的应用场合,则更是非用汇编语言不可了。打字练习程序设计课程设计是在教学实践基础上进行的一次大型实验,也是对该课程所学理论知识的深化和提高。因此,要求我们能综合应用所学知识,设计与制造出具有较复杂功能的应用系统,并且在实验的基本技能方面上进行一次全面的训练。通过具体的问题分析、设计、调试、运行程序。在实际问题中锻炼提高自己,增加了对本门课程内容的理解,锻炼了动手能力。就这个程序具体而言:调用宏,显示背景和主界面,通过选择不同的选项,可以进入不同的界面;采用BIOS功能的中断,可以在任何时候退出当前所在的界面并通过选择进入其他的界面。这个程序最终通
4、过菜单所提示的信息选取所要进入的界面,获得所要的功能。2. 课程设计的目的(1) 能够较全面地巩固和应用课堂中所学的基本理论和程序设计方法,能够较熟练地完成汇编语言程序的设计和调试。(2) 培养综合运用所学知识,独立完成汇编程序课题的能力。(3) 培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。(4) 提高对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。(5) 培养从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。(6) 对掌握知识的深度、运用理论去处理问题的能
5、力、实验能力、课程设计能力、书面及口头表达能力进行考核。3. 课程设计的要求汇编语言是计算机能够提供给用户的最便捷和最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的一种语言。通过这次实验要求我们:(1) 了解背景颜色的设置。(2) 了解清屏函数的用法。(3) 学会使用宏定义,宏过程,宏函数以及参数的调用。(4) 能够熟练地使用BIOS功能或DOS功能的调用。(5) 学会用汇编语言编辑中断程序。通过打字练习程序的编写熟悉并掌握用汇编语言编程的方法与特点,借此来比较高级语言与低级语言的优缺点,以便能更好的利用各种语言来开发应用软件,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使
6、用方法,达到能够独立阅读、编辑和调试具有一定规模的汇编语言程序的能力,能够熟练运用汇编语言的三大结构,进一步掌握各种指令的功能,能掌握子程序的定义与调用,包括段间调用与段内调用,以及正确运用DEBUG命令,进一步理解和掌握程序直接控制I/O方式。4汇编语言的介绍 汇编语言(Assembly Language)是面向机器的程序设计语言,汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。在汇编语言中,用助记符(Mnemonic)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。因
7、此汇编语言亦称为符号语言。使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编语言编译器把汇编程序翻译成机器语言的过程称为汇编。 汇编语言比机器语言易于读写、调试和修改,同时具有机器语言全部优点。但在编写复杂程序时,相对高级语言代码量较大,而且汇编语言依赖于具体的处理器体系结构,不能通用,因此不能直接在不同处理器体系结构之间移植。 汇编语言的特点: (1) 面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。 (2) 保持了机器语言的优点,具有直接和简捷的特点。 (3) 可有效地访
8、问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。(4) 目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。(5) 经常与高级语言配合使用,应用十分广泛。 汇编语言的应用: (1) 70%以上的系统软件是用汇编语言编写的。 (2) 某些快速处理、位处理、访问硬件设备等高效程序是用汇编语言编写的。 (3) 某些高级绘图程序、视频游戏程序是用汇编语言编写的。 汇编语言直接描述机器指令,比机器指令容易记忆和理解。通过学习和使用汇编语言,能够感知、体会、理解机器的逻辑功能,向上为理解各种软件系统的原理,打下技术理论基础;向下为掌握硬件系统的原理,打下实践应用基础。 5.开发
9、平台开发环境:Windows平台+MASM环境运行环境:Windows全系列开发语言:汇编语言二 总体方案设计1. 程序设计的整体设计思路 要求完成一个打字练习程序,即在规定的时间内按下屏幕上显示的字母,字母就消失,否则字母一直移动到屏幕底端。(比如:运行程序时,出现菜单主界面,按回车键出现由26个字母组成的乱序行,这时其中任一字母落下,在键盘上敲入该字母,如果输入正确,字母消失;按ESC键返回主界面;按空格见暂停;按E退出。)在设计本课题之前,要考虑两个问题:一是如何从键盘输入并显示字符;二是如何在输入时进行计时。考虑第一个问题,在PC中,对键盘的管理是通过中断机构和8255可编程序外围接口
10、芯片来实现的。在我的设计中,我采用的是第一种思路。由于系统在BIOS中已配备了键盘的服务功能,因此可通过调用键盘的DOS和BIOS功能编程。而且设计中使用的都是软件中断,故在具体的程序设计时,需要禁止硬件中断。再考虑第二个问题,计时部分也可通过定时器的中断来实现。由于定时器中断优先级比键盘高,只要在键盘中断处理程序中用一条STI指令允许高级中断,那么在整个打字的过程中,定时器会以每秒18.2次的频率产生中断。根据计时的需要,在整个打字过程中,再使用自编的中断例行程序可把定时器中断的次数转换成时间。 在键盘打字时采用09类型的键盘中断,来取得输入字符并将字符显示在屏幕上。程序设计时,预先设置的堆
11、栈中存放一些字符串例句,每次打字之前,屏幕上先显示出一个例句,然后打字员按照例句,将句中字符通过键盘输入。这个过程可反复进行,当键入一个功能键时,退出打字计时程序。自行编制键盘中断和时间中断处理程序,并保存原中断向量。程序运行时,使用自编的中断向量处理程序。程序退出时,恢复中断向量。自编中断处理程序也是本课题需要考虑的重要问题。虽然系统自带了许多中断例行程序可以由INT指令来执行,但在本课题中需要对原中断例行程序的功能进行扩充才可。该打字程序包括以下五个子程序:(1)主界面的显示模块;(2)打字练习模块;(3)设置速度模块;(4)密码模块;(5)清屏模块。其中的打字练习模块又分为以下三个子程序
12、:(a)游戏界面模(b)功能模块2. 算法的整体设计思路此程序涉及到宏和I/O中断的调用,通过对宏的定义和使用以及对I/O中断的使用,实现程序的相应功能。利用宏,实现各个界面的显示,采用中断,实现各个子程序的相互转换。其中最主要的是打字程序:运行程序,打字界面中出现由26个字母组成的乱序行,这时其中会有任一字母落下,在键盘上输入该字母,字母消失,分数值加1,否则字母一直移动到屏幕底端,然后消失,生命值减1。当生命值减为零且未在字母下落到屏幕底端之前输入该下落字母时,打字练习结束,显示结束界面。3. 程序的主要特点本程序最大的特点就是具有较好的人机交互功能。在主界面中,用户可以选择不同的游戏等级
13、,他们能够根据自己的实际打字速度,选择相匹配的等级进行打字练习。如果用户对我们设计的程序有不明白的地方,可以选择帮助进行求解,并能与我们联系,讨论程序的不足,寻求改进,或者分享程序中的精妙之处。此外,根据用户的打字情况,我们会给予他们相应的分数和生命数。三 详细设计1. 流程图本次程序开始是一个主界面,在主界面上包括四个选项,第一个选项是进入打字子程序,第二个是选择进入等级设置子程序,第三个是进入帮助子程序,第四个是退出主界面,以下是程序的主流程图:开始 输入密码主界面速度选择游戏界面E 退出Space 暂停ESC返回主界面 图3-1 流程图2. 主界面伪代码 STR1 DB Welcome
14、to play chars,0AH,0DH, $ STR2 DB Made by zhangxiang zhangning yinfeng wanghanfei wujingxian,0AH,0DH, $ STR3 DB 2011/9/29 ,0AH,0DH, $ STR4 DB Please choose speeding,0AH,0DH, $ STR5 DB Please press Enter to cintinue. ,0AH,0DH, $ STRA DB ,0AH,0DH, $ STRB DB score: , i,0AH,0DH, $ STRC DB You choose: ,0A
15、H,0DH, $ STRD DB hqfuvodepfdjygnhtrwgaerjrklubgsnyrsbntrsbngtrdjykuahtrgregfytjgfjytjktru, $ STRE DB RIGHT: , $ MES5 DB PLEASE ENTER YOUR PASSWORD :$ PASSWORD DB 111111 PASSWORD1 DB 6 DUP(?) 3等级界面伪代码在主界面中选择2,进入等级界面的设置,其中有6个等级,代表不同的难易程度。用户可选则其中的任意一个级别,按Enter键表示确定并返回主界面,若用户输入的错误的等级,则一直等待,直到输入了正确的等级。以下
16、是等级界面的伪代码: STR7 DB speed 1,0AH,0DH, $ STR8 DB speed 2,0AH,0DH, $ STR9 DB speed 3,0AH,0DH, $ STR0 DB Select the number among 1-3,0AH,0DH, $4. 游戏界面伪代码此伪代码显示的是进入打字界面的提示信息: ST1 DB RIGHT: Pause,0AH,0DH, $ ST2 DB E : Quit,0AH,0DH, $ ST8 DB Esc: Back,0AH,0DH, $ ST3 DB Function Meun,0AH,0DH, $ ST4 DB please
17、 input. ,0AH,0DH, $ ST5 DB SPACE: Continue,0AH,0DH, $ ST6 DB Thank You ! ,0AH,0DH, $ ST10 DB ,0AH,0DH, $; ST9 DB VREY GOOD ! ,0AH,0DH, $ ; 5. 清屏子程序设计BIOS功能调用中的INT 10H功能6能使屏幕内容上卷指定的行,这个功能需要设置4个参数,分别代表清屏区域的左上角的坐标和右下角的坐标。如果屏幕的其实行列不为(0,0)结束的行列不为(24,79),则屏幕上只有指定的一部分具有上卷的功能,这个屏幕伤的部分区域叫做窗口(window)像这样的窗口可以在
18、屏幕上设置多个,这些窗口都可以独立使用。如果上卷超过指定窗口的顶部,这些行的内容就消失,出现在窗口底部的新行被填为空格,其属性用BH寄存器决定。如果AL=0,则实现完成的工作是清楚屏幕的功能,它将按AL中的BH字符使指定的窗口为空白。以下是清除全屏幕的子程序: CLEAR PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX MOV AH,6 MOV AL,0 ;blank screen MOV BH,7 MOV CH,0 ;左上角行号 MOV CL,0 ;左上角列号 MOV DH,24 ;右下角行号 MOV DL,79 ;右下角列号 INT 10H ;屏幕初始化
19、或上卷 MOV DX,0 ;行列号都为0 MOV AH,2 INT 10H ;置光标位置; ; DIS5 25D,10100100B ;置背景色 背景 蓝 前景红 DIS5 25D,11110100B ;置背景色 背景白色 前景红; DIS3 RET CLEAR ENDP 6.密码程序设计 DIS1 MES5,5,15LEA BX,PASSWORD1MOV CX,6 INPUT:MOV AH,07HINT 21HMOV BX,ALINC BXMOV AH,02HMOV DL,*INT 21HLOOP INPUTCONTIUN:MOV AH,07HINT 21HCMP AL,0DHJNE CON
20、TIUNMOV CX,6LEA SI,PASSWORDLEA DI,PASSWORD1CHECK:MOV AL,SICMP AL,DIJNE STARTINC SIINC DILOOP CHECK 7.宏代码7.1在指定位置显示彩色字符串;=DIS1 MACRO STRING1,Y,M MOV AH,2 MOV BH,0 ;页号 MOV DH,Y ;行标 MOV DL,M ;列标 INT 10H ;置光标位置 MOV AH,09H MOV DX,SEG STRING1 MOV DS,DX MOV DX,OFFSET STRING1 INT 21H ;显示字符串 ENDM;=7.2显示背景;=D
21、IS5 MACRO S1,S2 DIS2 MOV AH,6 MOV AL,0 ;blank screen MOV AL,s1 ;上卷25行 MOV BH,s2 ;绿色背景 红色前景 MOV CH,0 MOV CL,0 MOV DH,0 MOV DL,80 INT 10H ;屏幕初始化或上卷 DIS3 ENDM;=7.3画横向边框的宏;=DIS6 MACRO Z1,Z2,Z3,Z4 LOCAL C5 ; LOCAL为重复定义的定义符 DIS2 MOV CX,Z1 ;循环次数 MOV DL,Z2 ;列 C5: MOV AH,2 MOV BH,Z3 ;页号 MOV DH,Z4 ;行 INT 10H
22、;置光标位置 PUSH DX MOV DL,2AH INT 21H ;输出* POP DX INC DL ;列 + LOOP C5 DIS3 ENDM;=7.4画竖边框的宏;=DIS7 MACRO Q1,Q2,Q3,Q4 LOCAL F1 ; LOCAL为重复定义的定义符 DIS2 MOV CX,Q4 MOV DH,Q1 ;行 F1: MOV AH,2 MOV BH,Q2 MOV DL,Q3 ;列 INT 10H ;置光标位置 MOV DL,2AH INT 21H INC DH LOOP F1 DIS3 ENDM;=8.功能的进一步完善8.1完善代码一修改界面背景属性 ;DIS5 25D,10
23、100100B ;置背景色 背景 蓝 前景红DIS5 25D,01001111B ;置背景色 背景 红 前景白;闪烁背景背景背景亮度前景前景前景;=;显示背景DIS5 MACRO S1,S2 DIS2 MOV AH,6 MOV AL,0 ;blank screen MOV AL,s1 ;上卷25行 MOV BH,s2 ;绿色背景 红色前景 MOV CH,0 MOV CL,0 MOV DH,0 MOV DL,80 INT 10H ;屏幕初始化或上卷 DIS3 ENDM;=8.2完善代码二击中下落字母后,使其显示不同的颜色; MOV AH,2 MOV BH,0 INT 10H PUSH axPUS
24、H bx mov ah ,9mov bh ,0mov cx,1mov al,simov bl,00101111B ;字母击中后显示白色INT 10H pop axpop bx call SLEEP1MOV AH,2 MOV BH,0PUSH DX MOV DL, MOV AH,02H INT 21H ;显示空格 覆盖字母 INT 10H ;置光标位置 POP DX;8.3完善代码三当游戏分数达到某一数值时,显示“Very Good!”; ST9 DB VREY GOOD ! ,0AH,0DH, $ ;CMP AL,30 ;击中30次显示 jnz T DIS1 ST9 20,60 ;显示“VER
25、Y GOOD”; 四 运行结果说明1.密码界面图:图4-1 密码界面图 运行程序,将会出现以上界面,这个功能是通过字符串的一个一个的比较实现的,输入错误后,要重新输入,直到输入正确的密码。2.主界面图:图 4-2 主界面输入密码后,进入主界面;第一行是密码行;第二行是欢迎语句;第三行是组员名字;第四行是演示代码的时间;第五行是提示语句。3.等级选择界面:图 4-3 等级选择界面按ENTER键后,进入等级选择界面这是一个等级选择界面,有三个等级进行选择,分别代表不同的速度,速度一次递增,只能输入1-3,直到输入正确才能开始游戏。4.游戏界面: 图4-4 游戏界面选择等级后,进入游戏界面;界面的左
26、边是功能菜单,可以进行功能的选择,暂停(空格键),退出(E),返回主界面(Esc);界面的中间是游戏区,当用击中下落的字母后,字母会变为白色,并有声音发出,表示用户击中字母;界面的右边是记分功能,可以显示用户的当前分数,但用户的积分达到一定数值时,会显示祝贺语句。 五 课程设计总结汇编语言(Assembly Language)是面向机器的程序设计语言。 汇编语言比机器语言易于读写、易于调试和修改,同时也具有机器语言执行速度快,占内存空间少等优点,但在编写复杂程序时具有明显的局限性,汇编语言依赖于具体的机型,不能通用,也不能在不同机型之间移植。是能完成一定任务的机器指令的集合。 常说汇编语言过时
27、,是低级语言,并不是说汇编语言要被弃之,相反,汇编语言仍然是程序员必须了解的语言,在某些行业与领域,汇编是必不可少的,非它不可适用。只是,现在计算机最大的领域为IT软件,也是我们常说的 Windows 编程,在熟练的程序员手里,使用汇编语言编写的程序,运行效率与性能比其它语言写的程序是成倍的优秀,但是代价是需要更长的时间来优化,如果对计算机原理及编程基础不扎实,实在是得不偿失,对比现在的软件开发,已经是市场化的软件行业,加上高级语言的优秀与跨平台,一个公司不可以让一个团队使用汇编语言来编写所有的东西,花上几倍甚至几十倍的时间,不如使用其它语言来完成,只要最终结果不比汇编语言编写的差太多,就能抢
28、先一步完成,这是市场经济下的必然结果。 但是,至今为止,还没有程序员敢断定汇编语言是不需要学的,一个不懂汇编语言的程序员,只是三流的程序员,这是大部分人的共识,同时,技术汇编语言(Assembly Language)是面向机器的程序设计语言精湛的汇编程序员,已经脱离软件开发,挤身于工业电子编程中,一个电子工程师,主要开发语言就是汇编,c语言使用只占极少部分,而电子开发工程师是千金难求,在一些工业公司,一个核心的电子工程师比其它任何职员待遇都高,对比起来,一般电子工程师待遇是程序员的十倍以上。这种情况是因为现在学习汇编的人虽然也不少,但是真正能学到精通的却不多,它难学,难用,适用范围小,虽然简单
29、,但是过于灵活,学习过高级语言的人去学习汇编比一开始学汇编的人难得多,但是学过汇编的人学习高级语言却很容易,简从繁易,繁从简难。 该程序是由汇编语言编写的打字练习程序。通过本次课程设计,使我对汇编语言的语法结构和基本语义有了较为清楚的了解;通过自己的设计和编写代码,我也将书上每章的知识大致的复习了一遍,加深了我的印象,通过设计,我深刻认识到一个清晰明朗的流程图对程序的设计是十分重要的。在设计中,我在没有先画流程图的情况下就开始编写代码,结果是我弄得一头雾水,实在是无法进行了,后来经过同学的建议,我在弄清题意的情况下,画了程序流程图,并按此开始编写代码,结果让我获益匪浅。与其他同学合作完成本次课
30、程设计,在这次课程设计中我收获如下:1.学到了汇编语言设计程序的思想和方法。2.学会了任务分配、任务从化整为零,再化零为整的方法。3.学到发现问题思考问题解决问题的方法。 4.增强了团队精神其中我也认识到不少不足,对汇编语言,尤其宏的使用有了更多认识,但是我也发现自己深入理解不多。宏过程和宏函数,宏传递的参数和返回值,以及局部变量都是我不能融会贯通的地方,需要时间进行更多的练习。通过这次课程设计让我跟具体的了解了汇编语言的用途以及他的特点,这样有利于在今后的实践中更好的去应用汇编语言解决问题,同时通过这次的课程设计也体现出了我的在汇编方面的一些基础知识的不足。由于对汇编语言的一些基本知识的掌握
31、不足,程序中还存在或多或少的缺陷和不足,有一些的基本功能在逻辑上还存在一些的小问题,但是不会影响基本的使用。参考文献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月。8 何超,汇编语言程序设计实验与习题解答(第1版),机械工业出