汇编课程设计论文打字练习.docx
- 文档编号:4646949
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:19
- 大小:150.32KB
汇编课程设计论文打字练习.docx
《汇编课程设计论文打字练习.docx》由会员分享,可在线阅读,更多相关《汇编课程设计论文打字练习.docx(19页珍藏版)》请在冰点文库上搜索。
汇编课程设计论文打字练习
目录
一概述2
1.背景分析及意义2
2.课程设计的目的2
3.课程设计的要求3
4.汇编语言的介绍.3
4.开发平台.4
二总体方案设计5
1.程序设计的整体设计思路6
2.算法的整体设计思路6
3.程序的主要特点6
4.程序的主要功能6
5.负责的主要部分7
三详细设计8
1.主界面的设计8
2.打字练习程序设计9
3.帮助界面的设计9
4.清屏子程序分析10
5.重点子程序分析11
6.程序中使用的部分重要指令11
四程序的调试与运行结果说明14
1.MASM5.0简介14
2.程序的运行结果14
3.答辩问题16
五课程设计总结18
致谢18
参考文献19
附录
一概述
1.背景分析及意义
随着计算机的不断更新发展,计算机在各个领域的应用越来越多,更多的软件开发人员和相关技术人员在程序设计的过程中应用汇编程序或编制汇编语言。
而汇编语言作为计算机专业大学生必修课,每个作为本专业的学生对汇编的理解和学习就显得尤为重要。
汇编语言是计算机能够提供用户使用的最快而又最好最有效的与言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
因而,对程序的空间和时间要求很高的场合,汇编语言的应用就显得必不可少了,一些直接控制硬件的应用场合,则更是非用汇编语言不可了。
《打字练习程序设计》课程设计是在教学实践基础上进行的一次大型实验,也是对该课程所学理论知识的深化和提高。
因此,要求我们能综合应用所学知识,设计与制造出具有较复杂功能的应用系统,并且在实验的基本技能方面上进行一次全面的训练。
通过具体的问题分析、设计、调试、运行程序。
在实际问题中锻炼提高自己,增加了对本门课程内容的理解,锻炼了动手能力。
就这个程序具体而言:
调用宏,显示背景和主界面,通过选择不同的选项,可以进入不同的界面;采用BIOS功能的中断,可以在任何时候退出当前所在的界面并通过选择进入其他的界面。
这个程序最终通过菜单所提示的信息选取所要进入的界面,获得所要的功能。
2.课程设计的目的
1.能够较全面地巩固和应用课堂中所学的基本理论和程序设计方法,能够较熟练地完成汇编语言程序的设计和调试。
2.培养综合运用所学知识,独立完成汇编程序课题的能力。
3.培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。
4.提高对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。
5.培养从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。
6.对掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。
3.课程设计的要求
汇编语言是计算机能够提供给用户的最便捷和最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的一种语言。
通过这次实验要求我们:
1.了解背景颜色的设置。
2.了解清屏函数的用法。
3.学会使用宏定义,宏过程,宏函数以及参数的调用。
4.能够熟练地使用BIOS功能或DOS功能的调用。
5.学会用汇编语言编辑中断程序。
通过打字练习程序的编写熟悉并掌握用汇编语言编程的方法与特点,借此来比较高级语言与低级语言的优缺点,以便能更好的利用各种语言来开发应用软件,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能够独立阅读、编辑和调试具有一定规模的汇编语言程序的能力,能够熟练运用汇编语言的三大结构,进一步掌握各种指令的功能,能掌握子程序的定义与调用,包括段间调用与段内调用,以及正确运用DEBUG命令,进一步理解和掌握程序直接控制I/O方式。
4.汇编语言的介绍
汇编语言(AssemblyLanguage)是面向机器的程序设计语言,汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。
在汇编语言中,用助记符(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指令来执行,但在本课题中需要对原中断例行程序的功能进行扩充才可。
一开始拿到题目时感觉无从着手,特别对于程序中随机部分不知道怎么处理。
总认为随机就是要处理一个很复杂的程序,让计算机本身自己生成毫无规律的随机乱码。
这让我思考了好长一段时间。
后来了解到,就算是随机也是有规律可以追寻的。
就26个字母乱序而言,可以自己编写一组乱序存储到计算机中,然后设置一个加数,从起始位置起每次与加数相加这样依次选取后一个字母,这样就可以达到随机生成字母乱序的目的。
采用一些简单而巧妙的方法可以方便的完成许多看似困难的问题。
考虑到设计程序的复杂性,可以将程序分为几个不同的部分加以设计和思考。
比如分为游戏准备部分、随机显示字母部分、字母下落部分、字母消失和显示部分、检测按键正确与否部分等。
这样一个一个部分分别思考,最后再将所有部分有机的结合起来,这样可以让程序设计思路清晰化和简明化。
对于程序中的输入与输出及光标设置等问题可以通过DOS功能调用及BIOS功能调用加以解决。
程序中需要重复输入的成段的指令可以使用宏定义以减少工作量。
该打字程序包括以下4个子程序:
(1)主界面的显示模块;
(2)打字练习模块;
(3)速度选择模块;
(4)清屏模块。
2.算法的整体设计思路
此程序涉及到宏和I/O中断的调用,通过对宏的定义和使用以及对I/O中断的使用,实现程序的相应功能。
利用宏,实现各个界面的显示,采用中断,实现各个子程序的相互转换。
其中最主要的是打字程序:
运行程序,打字界面中出现由26个字母组成的乱序行,这时其中会有任一字母落下,在键盘上输入该字母,字母消失,否则字母一直移动到屏幕底端(第23行),然后消失。
3.程序的主要特点
本程序最大的特点就是具有较好的人机交互功能。
在主界面中,用户可以选择不同的游戏速度,他们能够根据自己的实际打字速度,选择相匹配的等级进行打字练习。
4.程序的主要功能
在本实验中,通过编写汇编源程序,将实现以下功能:
(1)通过在菜单界面选择,可以进入不同的子程序。
按“1”,进入打字练习子程序;按“2”,进入等级设置子程序,在这个子程序中,你可以根据自己的实际水平或者喜好选择不同的等级;按“3”,进入帮助子程序,其中你可以查询在这个程序中你不懂的操作;按“4”,退出主界面。
(2)当你进入打字界面后,系统自动给你提供26个小写字母的乱序行,在键盘上输入该字母,字母消失,否则字母一直移动到屏幕底端(第24行),然后消失,小花脸消失一个。
(3)当你正在进行打字练习时,按空格键可以暂停打字,此时重按空格键可以继续进行打字练习,若此时想退出打字练习,按“E”就可以了;如果你想直接退出打字练习,按“Esc”键。
(4)当你觉得字母下落的速度过快时,可以通过改变速度值来改变速度。
5.负责的主要部分
在本次课程设计当中,我主要负责程序界面的设计以及菜单的显示,通过调用宏来实现该部分功能。
小结:
在刚开始拿到程序的时候,对于字母的随机下落感觉没什么头绪,就26个字母乱序而言,可以自己编写一组乱序存储到计算机中,然后设置一个加数,从起始位置起每次与加数相加这样依次选取后一个字母,这样就可以达到随机生成字母乱序的目的。
三详细设计
1.主界面的设计
本次程序开始是一个主界面,在主界面上包括四个选项,第一个选项是进入打字子程序,第二个是选择进入等级设置子程序,第三个是进入帮助子程序,第四个是退出主界面,以下是程序的主流程图:
主界面伪代码:
ZKdb"*WELCOMETOPLAYTHEGAME*$"
nodb"**ThisisMadebylufen**$"
megdb"***pressEnterkeytocontinue......***$"
meg1db"****whenaletterisdropping,pleasehitit!
****$"
meg2db"***pressspacekeytopause!
***$"
meg3db"**pressESCkeytoreturnmaininterface!
**$"
meg4db"*pressletter'E'toexit!
*$"
2.打字练习程序的设计
nextsi:
addpresent_position,01h;随机选择下一个字母
incsi
cmp[si],ah
jegobackto_di
cmppresent_position,78d
jefrom_one
jmpnextsi
3.速度程序的设计
in_cycle:
addcx,01h
cmpcx,1000
jnein_cycle
pushdx
movah,06h;从键盘输入字符
movdl,0ffh
int21h
popdx
jzpass
4.清屏子程序设计
BIOS功能调用中的INT10H功能4能使屏幕内容上卷指定的行,这个功能需要设置4个参数,分别代表清屏区域的左上角的坐标和右下角的坐标。
如果屏幕的其实行列不为(0,0)结束的行列不为(24,79),则屏幕上只有指定的一部分具有上卷的功能,这个屏幕伤的部分区域叫做窗口(window)像这样的窗口可以在屏幕上设置多个,这些窗口都可以独立使用。
如果上卷超过指定窗口的顶部,这些行的内容就消失,出现在窗口底部的新行被填为空格,其属性用BH寄存器决定。
如果AL=0,则实现完成的工作是清楚屏幕的功能,它将按AL中的BH字符使指定的窗口为空白。
以下是清除全屏幕的子程序:
clear_screenmacroop1,op2,op3,op4;清屏宏定义
movah,06h;int10h调用,功能号06h,窗口上卷
moval,00h;上卷行数
movbh,0ah;上卷行属性(颜色)
movch,op1;左上角行号
movcl,op2;左上角列号
movdh,op3;右下角行号
movdl,op4;右下角列号
int10h
movah,02h;int10h调用,功能号02h,设置光标位
movbh,00h;页号movdh,00h;行号movdl,00h;列号int10h
endm;宏定义结束,与macro对应
以上4个子程序的设计,包含了本程序的最主要的功能模块,其中不包括界面四周的图案设计,总之,这4个子程序基本上涵盖了本程序的所有功能。
5.重点子程序分析
5.1随机产生字母
先初始定义一个由78个无序字母组成的字母列,此字母列包含从A-Z26个字母,将字母的偏移地址存在DI中,又将字母列的备份存在SI中,定义一个计数寄存器CX,首先置CX为0,程序每产生一个随机字母后CX自动加1,并且比较每次循环时CX是否已经大于78,如果大于78则对屏幕初始化置0,如果大于则继续随机下落字母。
5.2字母的下落
字母的下落是整个程序的核心部分,实现该功能的原理是让字母在规定的时间间隔内多次显示,字母每次下移1位,同时上一位自动以空格代替,这样在视觉上就起到了字母自动下落的效果,下落的速度由我们自己决定。
6.程序中使用的部分重要指令
6.1通用数据转送指令MOV
它表示把操作数(SRC),转送给目的操作数(DIST),源操作数不变,目的操作数被源操作数所替代。
转送指令每次可以转送一个字节或一个字,可以实现CPU的内部寄存器之间的数据转送、寄存器和内存之间的数据转送,还可以将立即数送给CPU内部的寄存器。
本设计中大量的用到了MOV指令,如MOVAH,0AHMOVAL,OP3MOVCX,01HMOVBH,00H等等,以实现起数据的传送。
6.2无条件转移指令JMP、CALL、RET
(1)当程序中出现JMP指令时,无条件的跳至JMP后所跟的变量处。
其主要有段内短转移、段内直接转移、段间直接转移、段内间接转移、段间间接转移、段内间接转移等操作。
(2)CALL指令为调用子程序,其功能为保护程序断点后,转到子程序处执行。
主要包括段内调用和段间调用。
(3)RET返回指令,通常与CALL指令连用,从子程序返回主程序,通常放在子程序之后。
也包括段内返回和段间返回。
6.3条件转移指令
条件转移指令是根据执行该指令时CPU标志的状态而决定是否发生控制转移的指令。
如果满足条件则程序转移到指定的目标地址;如果不满足则继续执行该条件下的下一条指令。
一般与比较指令CMP连用。
在本程序设计中主要用到“JE(相等转移)”、“JA(大于转移)”、“JNE(不相等转移)”等。
6.4堆栈操作指令PUSH、POP
PUSH进栈指令的功能是将操作数推入堆栈。
它的源操作数可以是16为通用寄存器、段寄存器或存储器中的数据字,打不能是立即数。
堆栈是以“先进后出”的方式工作的一个存储区,栈区的段址由SS寄存器的内容确定。
堆栈的最大容量可为64K,即一个段的最大容量。
堆栈指针SP始终指向栈顶,其值可以从FFFEH(偶地址)开始,向低地址方向发展,最小为0。
每次执行PUSH操作时,先修改SP的值,使SPSP-2后,然后把操作数压入堆栈种SP指示的位置上,低位字节放在较低地址单元,高位字节放在交高地址单元中。
POP出栈指令的功能是把当前的SP所指向的堆栈顶部的一个字送到指定的目的操作数中。
它的目的操作数可以是16位通用寄存器,段寄存器或存储单元,但CS不能做目的操作数。
每执行一次出栈操作,SPSP+2,即SP向高地址方向移动,指向新的栈顶。
6.5算数运算指令ADD、SUB、DIV、INC
ADD加法指令,它的功能是将源操作数相加,结果送到目的操作数中,即
目的源+目的。
SUB减法指令,它的功能是将目的操作数减去源操作数,结果送回目的操作数,即目的目的–源。
DIV无符号数除法指令,它的功能是对两个无符号二进制数进行除法操作。
INC增量指令,它的功能是对目的操作数加1,结果送回目的操作数,即目的目的+1。
ADD,SUB这两条指令的原操作数可以是寄存器、存储器或立即数,目的操作数只能是用寄存器和存储单元。
使用时需注意源和目的操作数不能同时为存储器,而且他们的类型必须一致,即都是字节或字。
DIV指令的原操作数可以是字节或字,如果源操作数为字节,16位被除数必须放在AX中,8位除数为原操作数,他可以是寄存器或存储单元,相除之后,8位商在AL中,余数在AH中。
要是操作数为字,32位被除数在DX,AX中,其中DX为高位字,16位除数作源操作数,他可以是寄存器或存储单元。
相除之后,AX中存16位商,DX存16位余数。
要是被除数只有16位,除数也是16位,则必须将16位被除数送到AX中,再将DX寄存器清0,然后相除。
INC指令的目的操作数可以在通用寄存器或内存种,这条指令主要用在循环程序中,对地址指针和循环计数器等进行修改。
指令执行后影响AF、OF、PF、SF和ZF,但进位标志CF不受影响。
小结:
在设计程序的时候,设计了几个子程序,对于宏的定义和宏的调用,有了更深的了解,例如清屏子调用,菜单子程序调用等等。
四程序的调试与运行结果说明
1.MASM5.0简介
MASM的主要版本:
2000年微软发布了MASM6.15版本,后来出现MASM64位元版。
6.15版是放在VisualC++6.0ProcessorPack中。
7.0版是放在VisualC++.NET2002。
7.1版是放在VisualC++.NET2003。
8.0版是放在VisualC++.NET2005,它也可以组译x64的程式码。
特点及功能介绍:
4.x1980年代末期最流行的版本,很多组合语言入门书都以它为范本。
5.x开始强化组译器简易指令(点指令),以简化程式架构。
稍晚的组合语言入门书亦大量运用此一版本。
6.x版本为了支援Windows,有几个重大特色:
(1)支援flat与386以上CPU保护模式。
整合PWB(Programmer'sWorkBench)开发环境。
这软件在同时期的QuickBASIC也找得到。
(2)支援DOSExtender,内建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)按任意键(除“Esc”键外),进入打字运行界面,若按“Esc”键,则退出打字练习,以下是打字界面的截图
图:
4-2
(3)当按Esc键时,退出打字界面,当按Enter键时重新进入,当按E键時退出程序。
图:
4-3
3.答辩问题
(1)修改代码让按X键退出程序。
图:
4-4
(2)退出界面時显示“Thankyou”
图:
4-5
小结:
在调试程序的时候,碰到一些问题,经过无数次的修改代码,终于得到了想要的结果。
但是还是不够完善,有很多方面的功能还是不够强大,日后还是需要进一步强化。
五课程设计总结
汇编语言是计算机能够提供给用户的最快的、也是最有效的语言,也是能够利用计算机所有硬件特性并且能够直接控制硬件的唯一语言。
汇编语言指令是用一些具有相应含义的助忆符来表达的,所以,它要比机器语言容易掌握和运用,但另一方面,它要直接使用CPU的资源,相对高级程序设计语言来说,它又显得难掌握。
但它不同于任何高级语言,汇编语言几乎可以完全和机器语言一一对应,语句简单直观但不如高级语言方便调试,所以在学习的过程中需要记忆大量的助记符。
该程序是由汇编语言编写的打字练习程序。
通过本次课程设计,使我对汇编语言的语法结构和基本语义有了较为清楚的了解;通过自己的设计和编写代码,我也将书上每章的知识大致的复习了一遍,加深了我的印象,通过设计,我深刻认识到一个清晰明朗的流程图对程序的设计是十分重要的。
在设计中,我在没有先画流程图的情况下就开始编写代码,结果是我弄得一头雾水,实在是无法进行了,后来经过同学的建议,我在弄清题意的情况下,画了程序流程图,并按此开始编写代码,结果让我获益匪浅。
与其他同学合作完成本次课程设计,在这次课程设计中我收获如下:
1.学到了汇编语言设计程序的思想和方法。
2.学会了任务分配、任务从化整为零,再化零为整的方法。
3.学到发现问题——思考问题——解决问题的方法。
4.增强了团队精神
其中我也认识到不少不足,对汇编语言,尤其宏的使用有了更多认识,但是我也发现自己深入理解不多。
宏过程和宏函数,宏传递的参数和返回值,以及局部变量都是我不能融会贯通的地方,需要时间进行更多的练习。
致谢
参考文献
[1]沈美明,温冬婵,IBM-PC汇编语言程序设计(第2版),北京,清华大学出版社,2008年4月;
[2]王庆生,汇编语言程序设计,合肥,合肥工业大学出版社,2006年8月;[3]翟社平,汇编语言程序设计教程,西安,西安电子科技大学出版社,2003年2月;
[4]金汉均金洋,汇编语言程序设计,武汉,武汉大学出版社,200
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 课程设计 论文 打字 练习
![提示](https://static.bingdoc.com/images/bang_tan.gif)