汇编语言课程设计.docx
- 文档编号:9791732
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:25
- 大小:41.86KB
汇编语言课程设计.docx
《汇编语言课程设计.docx》由会员分享,可在线阅读,更多相关《汇编语言课程设计.docx(25页珍藏版)》请在冰豆网上搜索。
汇编语言课程设计
摘要
通过此次的汇编语言实验,让我熟悉了解了汇编语言的指令系统中一些基本的指令的操作及运用,同时我也对汇编语言程序格式、循环与分支程序设计、子程序结构等的运用有了进一步的了解。
我所选的题目为输入一个圆柱体的底面半径和高,求它的表面积和体积以及它最大内接长方体的表面积和体积。
在对所选的题目进行分析编程的过程中,首先绘制程序流程图,再按照流程图运用8086CPU提供的指令、伪指令、宏指令及DOS,BIOS功能调用编写程序源代码,同时给出说明注释。
最后利用计算机提供的软件调试工具对所编写程序进行调试,记录下整个调试分析的过程与运行结果。
关键词:
三角形;汇编语言;流程图;程序源代码;调试
abstaract
Throughtheassemblylanguageexperiment,letmebefamiliarwithsomebasicinstructionofassemblylanguage’sinstructionsysteminoperationanduse.Atthesametime,Ihavealsobeenfurtherunderstoodfortheassemblylanguageprogramformat,circulationandbranchprogramdesign,suchastheuseofsubroutinestructure.Myselectedsubjectistoinputaradiusofcylinder'sbasalplaneandthecylinder'sheight,andstriveforit'ssurfaceareaandvolumeaswellasit'smaximuminscribedrectangularparallelepiped'ssuperficialareaandvolume.Onthechoiceoftheprogrammingprocess,firstofalldrawingflowchartoftheprogram,thenaccordingtotheflowchartprovidedby8086CPUinstructions,directives,macroandDOS,BIOSfunctioncallscompilingtheprogramsourcecode,andgivingdescriptionsoftheannotation.Finally,usingthesoftwaredebuggingtoolsthecomputersprovidedforprogramdebugging,andrecordingthewholedebugginganalysis'sprocessandresults.
Keywords:
triangle;assemblylanguage;flowchart;programsourcecode;debugging
1概述
本课程设计要求用所学的汇编语言知识来编写一个完整的程序以实现用汇编语言编辑递归算法画三角形。
1.1课程设计的目的
掌握一些程序设计的基本方法,要知道主程序,子程序以及推栈段的使用,了解自己所编的程序.了解与掌握汇编语言中加法指令、减法指令、乘法指令、除法指令、出栈及入栈指令、跳转指令等的概念和它们的运用。
学会汇编语言递归算法的运用。
1.2课程设计的要求
1.2.1需要的基本知识与技能:
具备汇编语言设计、编写、调试和运行程序的方法和技巧。
在PC机上运行汇编程序需要经过以下几个阶段:
编辑源程序:
利用文本编辑工具编辑源程序,生成一个汇编语言的纯文本文件。
文件的扩展名为.ASM汇编源程序。
用汇编器汇编源程序生成目标代码文件,目标代码文件的扩展名是.OBJ,汇编器还可以生成列表文件和交叉参考文件。
汇编器相当于高级语言中的编译器。
汇编语言按照汇编语言的语法检查源程序,如果源程序语法有错误,汇编器就不生成目标代码文件,这时,必须重新编辑源程序,修改语法错误。
当发现源程序有的行含有不确定因素,汇编器会给出警告信,但按却省处理方法生成目标代码文件。
此时,可以重新编辑源程序,消去不确定因素。
连接目标程序:
利用连接器连接目标代码程序和库函数代码生成可执行程序文件。
一般单个模块的连接可以顺利地生成可执行程序文件。
当多个模块连接,或者库函数连接时,如果在目标代码中找不到所需的连接信息,连接器就会发生错误提示信息,而不是生成可执行文件。
这时,这就要重新编辑源程序,并汇编程序。
调试可执行程序:
程序的动态调试是在形成可执行文件后,针对可执行程序进行的。
DEBUG是简单的动态调试工具,利用调试工具动态的调试程序,找出程序中的问题,那么就要重新编辑汇编源程序。
1.2.2尚未掌握的知识点:
有时在程序中定义了较多的宏,或者可以把自己编译中常用的宏定义建立一个独立的文件,这个只包含若干定义宏文件的文件可称为宏库,通常用扩展名MAC或INC来表示。
当应用程序中需要用到宏库中的宏定义时,只需要用语句说明。
有时汇编语言程序需要连续重复地完成相同或者几乎完全相同的一组代码,这时,可使用重复汇编。
汇编程序把重复模块代码重复几次,每次重复把重复块中的哑元用自变量表中的一项取代,下一次取代一次,重复次数由自变量表中的自变量个数来确定。
条件汇编中,汇编程序能够根据条件把一段源程序或者把它排去在外,这里用到条件伪操作。
条件伪操作可以用在宏定义体内,也可以用在宏定义体外,并且可以嵌套任意次。
模块化程序设计方法是按照各部分程序所实现的不同功能把程序划分成为多个模板。
各个模板在明确各自的功能和相互间的约定后,就可以编制和调试程序,最后把它们连接起来形成一个大程序,子程序结构是模块化程序设计的基础。
子程序相当于高级语言中的过程和函数。
在一个程序的不同部分,往往就要用到类似的程序段,这写程序段的功能个结构形式都相同,只是有的变量赋值不同,此时就可以把这些程序写成子程序形式,以便需要时调拥它。
2程序设计方案及流程图
2.1主程序流程图
图2.1主程序流程图
2.2总体设计
本课程设计要求编写一个完整的程序以画出一个三角形。
该程序要求先显示一些提示信息,然后按提示信息的要求输入三角形的顶点坐标,通过编写计算的程序来画出三角形,同时通过判断得知输入数据是否正确。
最终可以利用坐标不同画出不同类型的三角形,将不同的三角形在界面上显示出来。
2.3详细设计
这次课程设计的设计思想是在熟练掌握汇编程序的设计方法的基础上,编写出用坐标画出三角形的代码,具体步骤如下:
首先,选择要输入的模块,进入所选模块;然后,输入所选模块提示输入的数据,按照提示输入完成;最后运行程序画出图形。
2.4源程序
见附件
3调试分析
3.1进入主界面
打开系统,进入主界面,显示“Welcomtomyprogram,I'mliuyongqin.NO.:
109$”然后使用者可以按数字键2键进入下一界面,按q键退出,此界面整齐美观,界面友好,是使用者更容易接受。
主界面显示图如图3.1所示。
图3.1主界面
3.2系统菜单界面
通过对三角形三个顶点坐标分别输入,即(0,0),(300,300),(500,400)所输入的数据如下图3.2所示。
图3.2系统菜单界面
3.3程序运行结果界面
通过对上述程序的运行,我们可以得到一个三角形如下图3.3所示。
图3.3程序运行结果界面
4总结
在编程初期首先遇到的是结构化程序的结构很重要,刚开编的时候没有写流程图和算法,结果程序可读性很差,也很难查错,从中了解到写程序需要一步步来,不能操之过急。
在编程中时常出现逻辑错误。
因为这个错误在编译中不会被发现,所以很难找出,要对程序一步一步的检查才行,可以用对子程序稍加修改后单独运行来查错。
这体现我经历的程序不够多,需要在这方面加把劲。
此次课程设计中遇到了很多问题,在指导老师的帮助下,加上我自己的努力及同学朋友的全力帮助下,我的这些问题都已得到完满的解决。
如怎样通过调试来检查出不容易发现的错误的问题,我通过可是听老师的讲解,课下和同学讨论,最终解决了这个问题。
通过这一个学期的汇编语言的学习,我对汇编的认识有了更深理解,切实的提高了我的编程能力。
通过这次课程设计的实验,我对学过的知识有了更深层次的运用,能用汇编语言熟练地运用顺序、选择、循环三大结构,进一步掌握了各个指令的功能,特别是转向指令,掌握了子程序的定义及调用。
在整个程序的编写中,调试占了很大部分的时间。
要想写好汇编语言的程序,必须认真对待代码的每一个细节,这对程序的调试是非常重要的。
通过这次实际动手能力的培养,我进一步熟悉了汇编语言的结构和使用方法,基本达到了能独立阅读、编制和调试一定规模的汇编语言程序的水平。
在此次设计当中让我认识到开发一项好的软件不是某一个人就能完成的任务。
一个团队的小组,一个勤奋的小组非常重要,沟通是解决问题的最好办法。
所以小组中的每个成员的能力与协作能力也是至关重要的。
同时,不仅是团队内部的交流,更多需要协调好团队之间的交流。
其次呢,在实习中我了解到,在开发一个项目时一定要先做好规划,按照软件的开发过程,详细地写好每一个必要的文档。
由于开发者能力有限,加上时间仓促,本系统难免会出现一些不足之处,我们深表歉意,如发现还有其它问题,希望老师批评指正。
5参考文献
[1]钱晓捷.《汇编语言程序设计(第四版)》.电子工业出版社
[2]李敬兆.《8086/8088和ARM核汇编语言程序设计》.中国科学技术大学出版社,2006
[3]平玲娣,潘雪增.《计算机组成与设计》.浙江大学出版社,2004
[4]白中英.《计算机组成原理(第二版)》.北京:
科学出版社,1998
[5]张昆藏.《计算机系统结构》.北京:
科学出版社,1994
[6]李敬兆.《基于ARM核汇编语言程序设计》中国科学技术大学出版社,2008·合肥
[7]王爽.《汇编语言》清华大学出版社,2009·北京
[8]吴敏华.《DOS基本原理与使用技巧》国防工业出版社,1996·北京
[9]沈美明温东蝉.《IBM-PC汇编语言程序设计(第一版)》清华大学出版社,1998·北京
[10]PeterAbel《IBM-PC汇编语言程序设计(第五版)》人民邮电出版社,2002
致谢
经过五天的艰苦努力,我终于完成了用坐标画三角形的全部设计过程,并使该系统达到可实际应用的阶段。
软件设计是一个精细漫长的过程。
在整个过程中,都需要周密的计划和安排,每一步骤,都需要按照软件工程标准来完成。
在设计中,我始终坚持理论指导实践原则,并通过实践来加强理论的学习,通过实习锻炼,我熟悉了软件的一般过程,加强了对实际问题的处理能力。
实践证明,在高科技突飞猛进的时代,光靠课堂所学的知识是远远不够的,必须依靠实践去不断的深化认识,尤其是计算机科学,操作性和实践性很强,只有加强实际的动手能力,才能更好的掌握这一现代化工具。
这次学习,无论是从技术上还是对环境的适应能力上讲,对我今后步入社会都打下了一个良好的基础。
在学习过程中,我也遇到了一些困难,主要表现了技术和经验的欠缺,但通过努力,终于一一克服了。
在编写程序的过程中,我们得到了刘树群老师的精心指导以及孜孜不倦的教诲,在老师的指导下,我们的能力得到了提高,同时养成了科学、严谨的作风和习惯,在此,我们对老师的精心栽培表示衷心的感谢!
感谢我们小组同学对我的帮助和指点。
在课设的整个过程中,我的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意。
附件:
;MASMPlus代码模板-纯DOS程序
.modelsmall
WRITE_PIXELMACROPAGE1,ROW,COLUMN,COLOR
MOVAH,0CH
MOVAL,COLOR
MOVBH,PAGE1
MOVDX,ROW
MOVCX,COLUMN
INT10H
ENDM
READ_PIXELMACROPAGE1,ROW,COLUMN
MOVAH,0DH
MOVBH,PAGE1
MOVDX,ROW
MOVCX,COLUMN
INT10H
ENDM
SETMODEMACROMODE1
MOVAH,0
MOVAL,MODE1
INT10H
ENDM
.stack200h
.data
;***********************************************
;主函数菜单使用的提示字符串
;***********************************************
MESS1DB0DH,0AH,"Welcomtomyprogram,I'mliuyongqin.NO.:
109$"
MESS2DB0DH,0AH,"Pleaseinputnumbertochoseaprogram:
$"
MESS4DB0DH,0AH,"Press2todrawatriangle$"
MESS6DB0DH,0AH,"Yourchoice:
$"
MESS7DB0DH,0AH,"Press0tomainmeue,pressqtoquit:
$"
MESS8DB0DH,0AH,"sorry!
Inputerroe.$"
MESS9DB0DH,0AH,"Pressqtoquit$"
;***********************************************
;各个子函数公共使用的数据定义部分
;***********************************************
COLORDW02
BKCOLORDW0;黑色为0
BUFFERDB6,?
6DUP(?
);输入函数暂存buffer
C10DW10
;***********************************************
;三角用的数据段定义和提示字符
;***********************************************
POINTDB24,?
24DUP(?
)
OL_TDB?
MESS1_TDB0DH,0AH,"Pleaseinputthefristpoint$"
MESS2_TDB0DH,0AH,"Pleaseinputthesecondpoint$"
MESS3_TDB0DH,0AH,"Pleaseinputthethirdpoint$"
MESS5_TDB0DH,0AH,"X:
$"
MESS6_TDB0DH,0AH,"Y:
$"
MESS7_TDB0DH,0AH,"Inputerror$"
.code
START:
movax,@data
movds,ax
LEADX,MESS1
MOVAH,9
INT21H
;***********************************************
;显示主菜单提示字符串
;***********************************************
DISPLAY:
LEADX,MESS2
MOVAH,9
INT21H
MOVAH,9
INT21H
LEADX,MESS4
MOVAH,9
INT21H
MOVAH,9
INT21H
LEADX,MESS9
MOVAH,9
INT21H
LEADX,MESS6
MOVAH,9
INT21H
;***********************************************
;主菜单选择部分
;***********************************************
INPUT:
MOVAH,1
INT21H
CMPAL,'1'
JBDISPLAY
CMPAL,'2'
JETRIA
CMPAL,'q'
JEOUTPUT
JMPDISPLAY
TRIA:
;三角子程序的入口部分
CALLTRIA_P
JMPOUTPUT
OUTPUT:
;退出程序段
MOVAH,9
INT21H
MOVAH,4CH
INT21H
;***********************************************
;三角绘制子程序
;***********************************************
TRIA_PPROCNEAR
PUSHCX
CALLINPUT_T
MOVAH,0FH
INT10H
MOVOL_T,AL;保存原来屏幕格式,用来恢复的
MOVAX,0A000H;显存
MOVES,AX
SETMODE12H;设置640*480*16图形模式?
?
?
?
LEASI,POINT
NEXT:
MOVAX,0012H
INT10H
MOVAL,2
CALLSET_WRITE_MODE
MOVAX,BKCOLOR
CALLCLEAR;将背景清成黑色
CALLOUTPUT_T;调用输出子函数
MOVAH,0
INT16H
MOVAH,0
MOVAL,OL_T
INT10H
MOVAH,9
INT21H
MOVAH,1
INT21H
CMPAL,'0'
JEDISPLAY
CMPAL,'q'
POPCX
JEOUTPUT
RET
TRIA_PENDP
;***********************************************
;画像素点子程序
;***********************************************
PIXELPROC
PUSHBP;压栈保护
PUSHBX
PUSHCX
PUSHDS
MOVBP,SP
MOVAX,80
MOVBX,WORDPTR[BP+12];BX<=Y
MULBX;(DX:
AX)<=80*Y
MOVBX,AX
MOVAX,WORDPTR[BP+14];AX<--X
MOVCL,8
DIVCL;AL<=商(X/8),AH<=余数(X%8)SP->||
MOVCL,AH;CL<=AH|DS|<-BP
MOVAH,0;|CX|<-BP+2
ADDBX,AX;BX(OFFSET)<=80*Y+X/8|BX|<-BP+4
MOVAL,80H;|BP|<-BP+6
SHRAL,CL;AL(MASK)<=(80H>>CL)|返回地址|<-BP+8
PUSHAX;|COLOR|<-BP+10
MOVDX,3CEH;|Y|<-BP+12
MOVAL,8;|X|<-BP+14
OUTDX,AL;||
MOVDX,3CFH;PIXEL堆栈结构
POPAX
OUTDX,AL
MOVAL,ES:
[BX]
MOVAX,WORDPTR[BP+10];AX<=COLOR
MOVBYTEPTRES:
[BX],AL
POPDS
POPCX
POPBX
POPBP
RET6
PIXELENDP
;***********************************************
;清屏函数
;***********************************************
CLEARPROCNEAR
MOVBX,0
CLR1:
MOVES:
[BX],AL;ES中放的是显存的地址
INCBX
CMPBX,9600H;80*480
JNBCLR2
JMPCLR1
CLR2:
RET
CLEARENDP
;***********************************************
;设置写模式的函数
;***********************************************
SET_WRITE_MODEPROCNEAR
PUSHAX
MOVDX,3CEH
MOVAL,5
OUTDX,AL
MOVDX,3CFH
POPAX
OUTDX,AL
MOVDX,3CEH
MOVAL,8
OUTDX,AL
MOVDX,3CFH
MOVAL,0FFH
OUTDX,AL
RET
SET_WRITE_MODEENDP
;***********************************************
;输入子函数READ将数字转化为二进制存入AX中
;***********************************************
READPROCNEAR
PUSHCX
LEADX,BUFFER
MOVAH,0AH
INT21H
MOVAX,0
MOVCL,BUFFER+1
MOVCH,0
LEABX,BUFFER+2
ONE:
MULC10
MOVDL,[BX]
ANDDL,0FH
ADDAL,DL
ADCAH,0
INCBX
LOOPONE
POPCX
RET
READENDP
;***********************************************
;输入错误提示子程序共用部分
;***********************************************
INPUT_ERPROCNEAR
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 课程设计