您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 汇编语言实验指导手册(附个人编译答案)
汇编语言程序设计实验指导手册班级:_______________学号:_______________姓名:杨天啸电子与信息工程学院计算机科学系写在最前面的话这个文档在网上到处都是,这也体现了我们工大人大公无私的精神~\(≧▽≦)/~但是!答案是没有滴~~~因此老杨我作为一个伪学霸,特地整理了一下我自己编的程序,有些加以极其详细备注,这要特地感谢我的→_→战友←_←啊,没有她的鸡蛋里挑骨头的询问,我也不会打得如此详细,我发表这个文档的目的不是让大家大肆抄袭,而是仅仅为大家提供一个汇编上的编程思路,当然我的程序肯定有不足之处啦,毕竟是伪学霸╮(╯▽╰)╭,所以大家一定要小心哦,不要踩雷,祝大家学习进步,心想事成,成为学霸,走上人生巅峰,抱得美人归*^_^*-1-第一部分上机实验的目的和要求一、课程性质、目的与任务“汇编语言程序设计实验”课程是计算机科学与技术及其他相关专业学生的一门核心必修课程。通过本课程的学习与实验,可以加深学生对汇编语言的理解,进一步掌握CPU、存储器及外设的性能和他们的基本使用方法,提高学生运用所学知识,独立分析问题与解决问题的能力。二、教学基本要求本课为设计性实验课,学生试验前应按实验内容要求编制程序,学生在实验期间输入和调试程序,观察程序运行结果,课后写出试验报告。指导教师在实验前概述实验程序算法,在实验期间做针对性的指导、检查实验结果,实验后批改实验报告。三、上机实验前的准备工作在上机实验前应事先做好准备工作,以提高上机实验的效率,准备工作至少应包括:(1)了解所用的计算机系统的性能和使用方法;(2)复习和掌握与本实验有关的教学内容;(3)准备好上机所需的程序。由于计算机实验室给每个学生安排的时间是有限的,要珍惜时间,充分利用。应当在上机前按指定的题目编写好程序。手编程序应书写整齐,并经人工检查无误后才能上机,以提高上机效率。初学者切忌不编程序或抄别人程序去上机,应从一开始就养成严谨的科学作风;(4)对运行中可能出现的问题事先作出估计,对程序中自己有疑问的地方,应作出记号,以便在上机时给予注意;(5)准备好调试和运行时所需的数据。四、实验报告实验后,应整理出实验报告,实验报告应包括以下内容:(1)题目;(2)程序清单(计算机打印出的程序清单);(3)运行结果(必须是上面程序清单所对应打印输出的结果);(4)对运行情况所作的分析以及本次调试程序所取得的经验。如果程序末能通过,应分析其原因。-2-第二部分汇编语言的上机过程汇编是面向机器的语言,但汇编程序是用指令助记符编写的程序,不能直接被机器执行,也必须要经过类似高级语言的编译、连接的过程才能执行,因此熟练掌握汇编语言的上机过程是学好汇编语言的基础。一、汇编程序的上机运行过程汇编程序从建立到运行的过程如下图所示:EDITMASMLINK图2-1汇编语言程序的建立及汇编过程从上图我们可以看到汇编语言源程序编写好以后,必须经过下列几个步骤才能在机(1)编辑源程序(生成.ASM(2)汇编源程序(.ASM→.OBJ(3)连接目标程序(.OBJ→.EXE(4)运行程序输出结果。二、汇编语言上机的必备程序建立汇编源文件,汇编,连接和运行程序的这样一个过程,需要在磁盘目录下有EDIT.COM、MASM.EXE、LINK.EXE、DEBUG.COM等相应程序。其中,EDIT.COM是编辑程序,运行EDIT就可以进入编辑页面编辑汇编语言的源文件,编辑后将文件保存为*.ASM文件;MASM.EXE文件称为汇编程序,是对已编辑好的汇编源文件进行汇编的过程,经过两次汇编扫描后,生成*.OBJ的目标文件,如有语法错误,显示相应的错误信息;DEBUG.COM文件是.EXE文件的调试程序,可以对.EXE文件进行跟踪调试,查找程序的逻辑错误。三、汇编语言上机的基本步骤以在屏幕上显示字符串‘welcome’为例,汇编语言的上机过程如下:源文件.asm编辑程序连接程序汇编程序目标文件.obj可执行文件.exe-3-1、进入DOS状态,选取一个磁盘(此处以D盘为例),在其根目录下建立一个MASM子目录,将MASM.EXE、LINK.EXE文件拷入该目录下。图2-2进入DOS状态2、在D:\MASM\目录下,输入EDITSAMPLE.ASM回车,进入编辑界面图2-3在DOS状态进入编辑状态的方法输入下面程序:图2-4编辑页面程序输入后存盘,按ALT+F键,选SAVE保存程序后,退出;如输入有错误,则再次执行D:\MASMEDITSAMPLE.ASM进行修改。3、汇编源程序在D:\MASM目录下用MASM.EXE文件对汇编源文件进行汇编,如下图所示:-4-D:\MASMMASMSAMPLE(文件扩展名为.ASM,可省)图2-5用MASM文件对汇编源文件的汇编过程由此可见,在执行汇编程序后,首先显示版本号,然后出现三个提示行。第一个提示行为:Objectfilename[Sample.OBJ]:这是询问目标程序文件名,方括号内为机器规定的默认的文件名,通常直接按回车键,表示采用默认的文件名(如上所示),这是我们汇编的主要目的。第二个提示行为:Sourcelisting[NUL.LST]:这是询问是否建立列表文件。若不建立,直接回车;若要建立,可以输入文件名SAMPLE再回车,表示要建立名为SAMPLE的列表文件。列表文件中同时列出源程序和机器语言程序清单,并给出符号表,有利于程序调试。第三个提示行为:Cross-reference[NUL.CRF]:这是询问是否要建立交叉索引文件。若不建立,则直接回车;若要建立,可以输入文件名SAMPLE,表示要建立SAMPLE.CRF文件。当我们回答了上述各提示行的询问之后(一般输入三个回车即可),汇编程序就对源程序进行汇编。若汇编过程中发现源程序有语法错误,则列出有错误的语句和错误的代码。错误分警告错误(WraningErrors)和严重错误(SevereErrors)。警告错误是指汇编程序认为的一般性错误;严重错误是指汇编程序认为无法进行正确汇编的错误,并给出错-5-误的个数及行号、错误的性质等。这时,就要对错误进行分析,找出问题和原因,然后再调用编辑程序加以修改,修改后重新汇编,直到汇编后无错误为止。4、连接目录文件在D:\MASM目录下用LINK.EXE连接源程序生成的.OBJ文件,如下图所示:D:\MASMLINKSAMPLE(文件扩展名为.OBJ,可省)图2-6用LINK文件对.OBJ文件的连接过程由此可见,在执行连接程序后,首先显示版本号,然后出现三个提示行。第一个提示行为:RunFile[SAMPLE.EXE]:这是询问要产生的可执行文件的文件名。一般直接回车采用方括号内规定的隐含文件名。第二个提示行为:ListFile[NUL.MAP]:这是询问是否要建立连接映象文件。若不建立,则直接回车;若要建立,则输入文件名再回车。如果要建立该文件,可以输入文件名SAMPLE。第三个提示行为:Libraries[.LIB]:这是询问是否用到库文件。若无特殊需要,则直接回车即可。上述提示行回答后,连接程序开始连接。若连接过程中有错,则显示错误信息,错误分析清楚后,要重新调入编辑程序进行修改,然后重新汇编,再经过连接,直至无错为止。连接以后,便产生了可执行程序文件(EXE文件)。-6-若连接程序给出“无堆栈段的警告性错误”,并不影响程序的运行,如下图所示。图2-7LINK时出现的无堆栈段的警告性错误5、执行程序经过上面连接过程,生成.EXE文件后,就可以在操作系统下执行该.EXE程序了。我们在D:\MASM目录下输入文件名执行程序,如下图所示:D:\MASMSAMPLE(文件扩展名为.EXE,可省)图2-8可执行文件的执行过程一个汇编语言源程序的编写、汇编、连接和执行过程是上面所示的几个步骤,但一个汇编程序的编写大都不是一帆风顺的,要经过很多次的修改和调试才能完成,这就要求我们对汇编语言的调试工具有一个深入的了解。四、DEBUG调试程序的使用DEBUG的启动:进入DOS状态下,键入DEBUG[路径文件名.扩展名],按回车键,如:D:\DEBUGSAMPLE.EXE,则屏幕显示:符号“-”,说明系统已进入DEBUG-7-状态。DEBUG的退出:在DEBUG的提示符后输入Q命令,按回车键,则退出DEBUG返回DOS。图2-9DEBUG的启动和退出DEBUG的使用:在DEBUG的提示符“-”后输入任意的DEBUG命令,按ENTER键。DEBUG命令格式:(1)DEBUG命令都是一个英文字母,后面跟着一个或多个有关参数。多个操作参数之间用“,”或空格隔开。(2)DEBUG命令必须接着按ENTER键,命令才有效。(3)参数中不论是地址还是数据,均用十六进制数表示,但十六进制数据后面不要用“H”。(4)可以用Ctrl和Break键来停止一个命令的执行,返回到DEBUG的提示符“—”下。(5)用Ctrl-NumLock键中止正在上卷的输出行,再通过按任意键继续输出信息。1、DEBUG的常用命令DEBUG命令有很多,下面使用例1-1为例,介绍一些经常使用的DEBUG命令。(1)反汇编命令U格式:a.U[段地址]:[偏移地址]b.U[地址范围]-8-功能:将指定范围内的代码以汇编语言形式显示,同时显示该代码位于内存的地址和机器码。若在命令中没有指定地址,则以上一个U命令的最后一条指令地址的下一个单元作为起始地址;若没有输入过U命令,则反汇编32个字节;即为代码段的起始32个字节单元内容。如下图所示:图2-10DEBUG中U命令的使用其中反汇编中的第一行内容的含义如下:0CF2:0000为代码段的段地址和偏移地址;B8F10C为第一条有效指令的机器码;MOVAX,0CF1为反汇编后的指令形式。范围可以由起始地址、结束地址(只能包含地址偏移量)或起始地址及长度来指定。其命令格式如:U0CF2:00000008或U04BA:0000L7。(2)显示内存命令D格式:a.D[地址]b.D[地址范围]c.D功能:显示指定内存范围的内容。显示的内容为两种形式:一种为十六进制内容,一种为与十六进制相对应的ASCII码字符,对不可见字符以“·”代替。对于格式a、c每次显示128个字节内容,格式b显示的字节数由地址范围来决定。若命令中有地址,则显示的内容从指定地址开始,若中中无地址(如格式c)则从-9-上一个D命令所显示的最后一个单元的下一个单元开始。若以前没有使用过D命令,则从代码段的起始单元开始显示。若格式中的地址只有偏移地址,则段地址为CS的内容。其命令格式如:D0CF1:0000或D或D0080,其使用如图2-10所示。图2-11DEBUG中D命令的使用(3)修改存储单元内容命令E格式:a.E[地址][内容表]b.E[地址]功能:格式a用命令所给定的内容表去代替指定地址范围的内存单元内容。格式b一个单元一个单元地连续修改单元内容。其中:内容表为一个十六进制数,也可以是用单引号括起的一串字符。其命令格式如:E0CF1:0000‘*******’或E0CF1:0010,其使用如图2-11所示。-10-图2-12DEBUG中E命令的使用(4)检查和修改寄存器内容命令R格式:a.Rb.R[寄存器名]功能:a.显示CPU内部所有寄存器的内容和全部标志位的状态。b.显示和修改一个指定寄定器的内容和标志位的状态。其中对状态标志寄存器FLAG以位的形式显示,显示时,8个状态标志的显示次序和符号如表2-1所示。其使用如图2-12所示。表2-1状态标志显示形式标志位状态显示形式(置位/复位)溢出标志OF有/无OV/NV方向标志DF增/减DN/UP中断标志IF开/关EI/DI符号标志SF负/正NG/PL零标志ZF零/非ZR/NZ辅助进位AF有/无AC/NA奇偶标志PF偶/奇PE/PO进位标志CF有/无CY/NC-11-图2-13DEBUG中R命令的使用(5)跟踪与显示命令T格式:a.T[=地址]或T[地址]b.T[=地址][条数]或T[地址][条数]功能:a.执行一条指定地址处的
本文标题:汇编语言实验指导手册(附个人编译答案)
链接地址:https://www.777doc.com/doc-5102146 .html