版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《汇编语言》课程实验指导手册本实验指导手册旨在指导数学与软件科学学院信息与计算科学专业《汇编语言》(专业任选课)的实验教学活动过程。其主要使用对象为本课程主讲教师和实验指导教师。它可以作为教学过程中的教学辅助参考资料,也可以作为学生在本门课程的学习中,结合实际教学内容,完成相关实验并填写实验报告的主要依据。具体实施过程中,除开各实验中要求的必做题目外,教师可结合实际教学情况,根据学生接受程度作适当扩展。学生在进行实践设计活动时,也可以结合自身掌握和学习的实际情况进行有选择地实践。本指导手册仅针对本学院信息与计算科学专业而设置。本实验手册编写的参考书籍:1.《IBM-PC汇编语言程序设计(第2版)》,沈美明温冬婵编著,北京:清华大学出版社,2001年8月(第2版)2005年6月第14次印刷2.《80X86汇编语言程序设计教程》,杨季文等编著,北京:清华大学出版社,1998年6月(第1版)2005年8月第14次印刷引言汇编语言程序设计技术是实践性很强的课程。实践也是学好程序设计课程中必不可少的重要环节。程序设计的实践分两个步骤:一是设计和编写解决问题的程序算法流程,并在此基础上编写源程序代码;二是在计算机上对程序进行调试,并使程序完成问题的求解过程,进行相应的逻辑测试。由于汇编语言固有的特点,其程序调试比一般的高级程序语言困难,为此,学习过程中,尤其注意事先做好上机准备,做到目的明确,思路清晰,调试策略完全、全面,以便更好地观察和分析汇编程序执行的技巧,并注意领会计算机工作的本质过程和步骤。可以参阅计算机组成原理方面的参考书,帮助理解计算机的基本工作原理。实验过程中,应当注意如下问题:(1)上机实习的主要目的是训练汇编语言程序的上机调试能力和分析、解决调试过程中遇到的问题的能力。并在此过程中逐步提高程序编写与问题分析能力。而不是简单地对教材上的实例做验证式的操作;(2)上机内容可以结合教材内容和习题,或由老师布置专门的上机习题进行;(3)为提高上机效果。必须在上机之前准备好上机的基本内容并编写好上机程序,尽量在上机之前先作好预先的阅读分析工作;(4)上机调试的基本方法:语法检查(编译)==>逻辑检查(设计者检查)==>测试。上机实验的主要步骤:(1)了解实验目的和要求,并复习或阅读相关教材内容;(2)根据题目要求,事先编写好程序,并经过设计者静态检查程序的语法正确性和逻辑正确性,分析可能出现的问题;(3)设计好上机时准备测试程序的用例;(4)上机调试通过程序,并记录上机调试中出现的问题和测试结论等,写出实验报告。调试过程中,尤其要注意各种语法错误、逻辑错误调试经验的积累。要注意的是,汇编语言程序的实验中,其源程序到可执行程序之间的转换过程的调试步骤一般不要求有集成环境,需要分步进行。具体步骤如下:1)编辑源程序(用edlin/edit/TurboC编辑环境或其它可以编辑生成文本文件的编辑器均可);2)将源程序汇编成2#目标文件;3)对目标文件进行链接,形成可执行文件(.EXE/.COM);4)执行或调试执行可执行文件。实验报告的主要内容:(1)实验题目;(2)目的要求;(3)程序说明(如程序结构、各模块的算法和数据结构等);(4)经调试后的程序清单;(5)测试情况说明;(6)分析(包含没有通过的程序的原因分析)。实验环境(软件和硬件环境):硬件环境:IBM-PC及其系列机内存256KB以上外存:硬盘或至少一个软驱CPU:80586以上显示器:单色或彩色显示器键盘:标准ASCII码键盘软件环境:编缉器:EDIT.COM或其它编缉器汇编程序:MASM.EXE或ASM.EXE连接程序:LINK.EXE调试程序:DEBUG.COM或DEBUG.EXE实验报告的具体内容填写格式,参见《四川师范大学实验报告手册》格式的规定。其中,程序清单请附着在相应的实验单元后面,程序结果、说明与分析等写在实验结果处,如不够,可另行附页。实验一熟悉汇编程序编辑、编译、连接和执行与调试的基本方法(1学时)实验目的:(1)熟悉汇编语言程序的基本结构;(2)熟悉汇编程序的编辑、编译、连接与执行方法;(3)熟悉汇编程序的调试执行过程。实验内容:1.完成并熟悉一个简单汇编语言程序的编辑、编译、连接、运行过程,直到程序输出结果正确;2.熟悉基本的DEBUG命令的使用方法;3.可参考的程序实例如下(也可以参考教材范例):(0100-0118);source:hello.asm;function:displayastring;datasegmentDSEGSEGMENTMESSAGEDB‘Thisismyfirstprogram!’,0DH,0AH,24HDSEGENDS;codesegmentCSEGSEGMENTASSUMECS:CSEG,DS:DESGBEGINMOVAX,DSEGMOVDS,AXMOVDX,OFFSETMESSAGEMOVAH,9INT21HMOVAH,4CHINT21HCSEGENDSENDBEGIN实验准备:(1)计算机设备;(2)程序调试环境的准备(熟悉汇编语言的基本结构,汇编语言的编译、连接等过程和方法,调式环境DEBUG的基本使用方法);(3)实验源程序准备。实验步骤:(1)工作环境准备(安装、复制MASM),如果已经准备好,则可以跳过此步;(2)用EDIT.COM或其它编辑软件输入源程序代码;(3)在DOS界面上进行汇编,有条件的也可以在集成环境下进行;(4)对汇编结果文件(2#.OBJ文件)进行连接;(5)执行可执行文件,观察并记录执行结果信息;(6)熟悉DEBUG的基本使用方法;(7)编写实验报告。实验结果:(1)对基于MASM的程序调试环境、方法和步骤进行总结;(2)给出汇编程序的基本结构和实验程序实例的执行逻辑和结果;(3)给出DEBUG的基本使用方法。实验二设计并跟踪调试简单汇编程序(1学时)实验目的:(1)熟悉汇编程序解决实际问题的程序编写方法;(2)进一步熟练掌握编译、连接和DEBUG调试程序的方法。实验内容:1.汇编语言程序设计方法。主要实验实例:(1)设计并实现一个1+2+…+20的程序,并上机实现之(或根据实际情况布置相应的问题进行设计);(2)显示一个“Hello,Howareyou?”的汇编程序。(0100-0111)2.DEBUG的基本使用。(参见后面的DEBUG使用资料)(1)启动和退出方法;(2)各种命令的使用方法。实验准备:汇编语言程序设计方法,DEBUG的基本使用。实验步骤:(1)选择实验问题;(2)设计汇编语言的程序代码,并进行阅读、分析;(3)上机调试进行测试并做测试记录;(4)全面熟悉DEBUG的常用命令的使用方法,并作简要记录;(5)编写实验报告。实验结果:(1)根据实验题目的程序测试,写出测试报告;(2)写出关于DEBUG常用命令使用方法的测试报告和说明;(3)测试结果和汇编程序代码清单。实验三利用汇编指令完成简单程序设计(1学时)实验目的:(1)熟悉用数据段进行数据临时存储和数据移动的方法;(2)熟悉汇编语言中的数据传送、逻辑运算等指令。实验内容:(第1题必做,2和3任选其一)主要实验实例:1.利用DEBUG工具测试和掌握教材习题中的各种指令在各种寻址方式下的使用方法和结果;2.利用教材3.19题进行单步执行,观察并记录寄存器中的CF、SF、OF和ZF等标志位的变化规律;3.编写程序完成将存放在附加段中的数组数据移动到数据段中的程序。实验准备:认真阅读和复制教材相关内容和课后习题。实验步骤:(1)对第1题,先分析各种寻址实例,并预测其可能的执行结果;(2)对2和3题任选其一,进行汇编程序设计,然后,上机测试和分析;(3)编写实验报告。实验结果:(1)根据测试目标写出测试报告;(2)测试结果分析说明;(3)测试程序代码清单。实验四利用汇编语言环境进行顺序程序设计(1学时)实验目的:运用汇编指令系统完成顺序程序设计问题的求解。实验内容:(第1题中任选其一,2、3、4、5中任选其一)主要实验实例:1.写出执行以下功能的汇编语言程序:(1)ZW+(Z-X)(2)ZW-(X+6)-(R+9)(3)Z(W*X)/(Y+6),R余数(4)Z((W-X)/5*Y)*2其中,X,Y,Z,R,W均为存放16位带符号数单元的地址。2.试写出对存放在DX和AX中双字长数,求补的指令序列3.试编写程序,求出双字长的绝对值。该数存放在A和A+2单元中。要求结果存放在B和B+2单元中。4.设X和Y均为16位无符号数,试写程序求表达式16X+Y的值,要求将结果存放在存储单元Z处。5.试编写一个将压缩BCD码转换为10#数字表示的ASCII码的程序。对BCD码和转换后的ASCII码,要求分别存放在数据段中BCD和ASCII起始的存储单元中。实验准备:复习顺序程序设计的基本方法和计算机进行问题求解的基本步骤。实验步骤:(1)完成源程序设计任务,并准备好测试用例,分析其可能的测试结果;(2)上机运行和测试所写的程序;(3)进行实验分析;(4)编写实验报告。实验结果:(1)根据测试目标写出测试报告;(2)测试结果分析说明;(3)测试程序代码清单。实验五利用汇编语言进行分支程序设计(4学时)实验目的:主要掌握汇编语言分支程序设计技术。重点掌握分支程序设计中的条件判断和准备等技巧。实验内容:(任选其二)主要实验实例:1.比较AX、BX和CX(或三个从BUFF位置连续的数据)中带符号的数据,将大者存放于AX中,小者存放于CX,中者存放于BX。2.试编写一个将16#数转换为对应ASCII码的程序。3.试编写一个统计学生成绩的程序。分别统计分数在60分以下的,60-69段,70-79段,80-89段,90-99段和100段的人数,并分别将它们存放在RESULT开始的存储单元中。实验准备:汇编语言条件判断和转移指令知识,分支程序设计的基本方法。实验步骤:(1)完成源程序设计任务,并准备好测试用例,分析其可能的测试结果;(2)上机运行和测试所写的程序;(3)进行实验分析;(4)编写实验报告。实验结果:(1)根据测试目标写出测试报告;(2)测试结果分析说明;(3)测试程序代码清单。实验六汇编语言中的循环程序设计(4学时)实验目的:掌握循环程序设计的基本方法。主要掌握几种基本的循环程序设计技巧,如计数法程序设计、当循环、直到循环等程序设计技术。实验内容:(任选其二)主要实验实例:1.用多种循环方法实现1+2+3+…+20的程序(至少二种方法);2.将寄存器AX中的2#数用16#形式显示出来;3.将内存中的数据块中(BUFF为起始地址)奇数和偶数分别存入以ADDR1和ADDR2开始的存储块中,并分别统计其中的奇、偶数,将统计结果存放在RESULT开始的两个字存储单元中;4.不利用乘法指令实现乘法的程序;5.对在附加段中的首地址为LIST的字数组进行从大到小的排序;6.对给定数组和给定数,编制程序来确定数组中是否有给定数的值,如有则从数组中删除之;7.对给定数组和给定数(设数组是有序数组),试将给定数插入给定数组中相应位置。实验准备:汇编语言下的循环程序设计基本技术和指令系统。循环程序设计的基本结构和问题表示方法。实验步骤:(1)完成源程序设计任务,并准备好测试用例,分析其可能的测试结果;(2)上机运行和测试所写的程序;(3)进行实验分析;(4)编写实验报告。实验结果:(1)根据测试目标写出测试报告;(2)测试结果分析说明;(3)测试程序代码清单。实验七汇编语言中的子程序设计(4学时)实验目的:熟悉和掌握汇编语言中的子程序设计技术,并应用它解决实际问题。实验内容:(任选其二)主要实验实例:1.通过寄存器传递参数的子程序设计10#数到16#数的转换程序的实现(从键盘获取一个10#数,然后把该数以16#的形式在屏幕上显示出来)。2.通过地址表传递参数的子程序设计(重复以上程序)。3.通过堆栈传递参数的子程序设计(重复以上程序)。实验准备:子程序的基本构成和表示方法。子程序的基本特点和程序表达方法。子程序的参数传递与调用、返回特点。实验步骤:(1)完成源程序设计任务,并准备好测试用例,分析其可能的测试结果;(2)上机运行和测试所写的程序;(3)进行实验分析;(4)编写实验报告。实验结果:(1)根据测试目标写出测试报告;(2)测试结果分析说明;(3)测试程序代码清单。实验八主程序与子程序之间的参数传递实验(4学时)实验目的:熟悉主程序和子程序之间的参数传递基本途径和方法。实验内容:主要实验实例:(1)把一个大写字母改写为小写字母的子程序的编写和调试。(2)写一个判别字符是否为数字的子程序,并利用该子程序删除一个字符串中的所有数字字符。实验准备:有关子程序和主程序概念,及其参数传递方法。实验步骤:(1)上机验证所选题目,并做相应测试和分析;(2)进行实验分析;(3)总结指针及其程序设计、实现方法和经验;(4)编写实验报告。实验结果:(1)根据测试目标写出测试报告;(2)测试结果分析说明;(3)测试程序代码清单。实验九DOS功能调用方法(2学时)实验目的:熟悉和掌握程序中的DOS功能调用基本方法,并实践常用的几种方法。实验内容:(任选其二)主要实验实例:(1)写一个程序,用2#数形式显示所按键的ASCII码值。(2)写一个程序,它首先接受一个字符串,然后显示其中的数字符的个数,英文字母的个数和字符串的长度。(3)编写一个显示指定内存单元内容的程序。要求:允许用户按16#数的形式输入指定内存单元的段地址值和偏移,然后用16#数形式显示指定字节单元的内容。(4)写一个显示文本文件内容的程序。实验准备:DOS功能调用的用途、方法。实验步骤:(1)上机验证所选题目的程序设计结果,并做相应测试和分析;(2)进行实验分析;(3)总结结构体程序设计和实现的基本方法及其经验,尤其是链表技术;(4)编写实验报告。实验结果:(1)根据测试目标写出测试报告;(2)测试结果分析说明;(3)测试程序代码清单。实验十输入、输出与中断调用(2学时)实验目的:初步掌握输入、输出和中断调用的基本方法。实验内容:主要实验实例:1.写一个程序完成如下功能:读键盘,并把按键在显示器上显示出来。在检测到按下SHIFT键时,程序结束。2.采用直接写屏的方法在屏幕上以多种属性显示字符串“HELLO”。实验准备:输入、输出和中断调用的基本方法和用途。实验步骤:(1)上机验证所选题目的程序设计结果,并做相应测试和分析;(2)进行实验分析;(3)总结结构体程序设计和实现的基本方法及其经验,尤其是链表技术;(4)编写实验报告。实验结果:(1)根据测试目标写出测试报告;(2)测试结果分析说明;(3)测试程序代码清单。实验指导手册制定人:冯山2005年9月DEBUG简介每个版本的DOS都带有DEBUG调试器(Windows系统也不例外),原因在于,DEBUG不仅是动态调试器,也是2#文件编辑器和系统维护工具。启动和退出命令格式:DEBUG[文件标识符[参数]]其中,文件标识符是要打开的文件名(.EXE和.COM文件),参数是即将被调试的文件或程序要用到的命令行参数。DEBUG将根据文件的扩展名判定被调试程序的类型。除.EXE和.COM外,所有其它文件都被认为是数据文件。如果缺省,则认为还没有指定具体的被调试对象。此时,它仍将在内存中开辟一段区域来建立程序的前缀部分,并进入调试状态。DEBUG的用法中,注意[]内的项表示可有可无。因此,共有以下几种使用方法:C>DEBUG--------缺省调试文件C>DEBUGHELLO.EXE--------给出被调试文件,但不带参数C>DEBUGHELLO.EXE10--------给出被调试文件,同时带参数进入DEBUG后,将处于操作提示符“-”的状态。要退出DEBUG,只需在操作提示符状态位置输入Q命令即可。要注意的是,Q命令退出时,正在被调试的程序文件的不会被保存。命令一览表及其基本使用方法命令一览表DEBUG命令一览表编号命令格式功能说明1A[地址]汇编2C[范围]地址内存区域比较3D[范围]显示内存单元中的内容4E地址[字节值表]修改内存单元内容5F范围字节值表填充内存区域6G[=起始地址][断点地址表]断点执行7H数值数值十六进制数加减8I端口地址从端口输入9L[地址[驱动器号扇区号扇区数]]从磁盘读取指定区域的内容10M范围地址内存区域传送11N文件标识符[文件标识符…]指定文件12O端口字节值向端口输出字节中的值13P[=地址][数值]执行过程14Q退出DEBUG15R[寄存器]显示和修改寄存器中的值16S范围字节值表在内存区域搜索字节值表17T[=地址][数值]跟踪执行18U[范围]反汇编功能19W[地址[驱动器号扇区号扇区数]]向磁盘指定区域写入命令使用的整体说明1)命令和参数不分大小写;2)命令和参数之间,要用定界符分隔,即空格、制表符、逗号等。要注意的是定界符只在两个16#数之间是必须的。例如,一下命令格式是完全等价的:DCS:100110DCS:100,110D,CS:100,1103)命令只有回车后才有效;4)如果命令格式或语法有错,DEBUG将以“Error”指出其所在位置;5)常用编辑键可以用于命令的输入过程中(回车之前);6)要中断命令的执行,可以用Ctrl+Break或Ctrl+C,以返回DEBUG操作提示符;7)若命令产生的输出行较多时,可以用Ctrl+S暂停显示。注:DEBUG接受和显示的都是16#数。命令参数的使用说明DEBUG中,除开Q命令外,所有命令都有参数。为了便于对命令的准确描述和使用,对参数的使用方法和符号约定作如下说明:1)地址:通常表示一个内存区域(或缓冲区)的开始地址,由段地址值和偏移地址两部分构成。段地址既可以用寄存器表示,也可以用4位16#数表示。而偏移地址值则用4位16#数表示。例如:CS:100表示中,段地址由CS寄存器给出,100表示偏移地址;1098:0000表示中,1098即段地址值,而0000表示偏移地址。当段地址缺省时,除A,G,L,T,U和W命令隐含使用CS寄存器值作为段地址外,都使用DS中的值作为段地址。例如:图1缺省启动DEBUG后的缺省段地址参数使用实例图2带被调试文件名的DEBUG启动后的缺省段地址使用实例如图1所示,D命令不带任何参数时,其使用的段地址由DS寄存器表示,即1383。注:图1中CS寄存器中的值也是1383,原因在于DEBUG启动时没有给出准备被调试的程序。如图2所示,如果启动时带文件名,则可观察出来。此时,D命令用的段地址正好是DS的值,即13D9(此时,CS的值为13E9)。使用CS的例子,请在实验中操作和观察。2)端口地址:由一个两位的16#数构成。主要用于端口地址的输入和输出。3)范围:用于指定内存区域或缓冲区域。有两种表示方法:一是用起始地址和结束地址界定;二是用起始地址和长度表示,而长度必须以字母L引导,最大的范围是64K,即0到0FFFFH。例如:CS:100110----两地址界定法CS:100L10----地址加长度法注:CS:100CS:110的表示法是错误的。4)数值:一般表示重复的次数。其范围最多为4位16#数。5)字节值:表示输出到端口中的数值,最多可以是2位16#数。6)字节值表:表示要替换或查找的若干个以字节为单位的值。各个值之间由空格等间隔符分隔。注:字节值表可以含字符串,而字符串必须用引号引住。7)驱动器号:表示要读写扇区所在的驱动器。其中,0代表A,1代表B,2代表C,3代表D。8)扇区号:表示DOS逻辑扇区号,最多可以是3位16#数。利用DEBUG命令调试程序的常用命令使用实例(1)帮助命令?----用于显示DEBUG的命令及其使用格式信息(如图3所示)。图3DEBUG的帮助命令及其信息(2)R命令----显示8086/8088各个寄存器的内容和下一条将要执行的指令(如图1,图2所示)。不带任何参数的R只是显示寄存器内容。如果带寄存器参数,则可以修改该寄存器的值(如图4所示)。(3)U命令----将指定范围内的内容反汇编出来。如果范围不指定,则表示从当前CS:IP处开始,或紧接上次反汇编操作结束处开始,默认为32字节(如图4所示)。例如:UDS:0000L5表示从DS:0000开始反编译5条指令。(4)D命令----可以显示内存空间中最低端的1MB范围内的任何单元的值。例如:D1096:0000L30表示显示1096段处从0000单元开始的48字节的内容(如图5所示)。图4DEBUG的R和U命令使用实例(5)T命令----用于跟踪执行一条或多条指令。跟踪可从指定地址开始,地址参数以等号引导,参数无段地址值,则用CS值作为段地址。如果无起始地址,则从CS:IP处开始执行。如果不指定跟踪的指令条数,则默认跟踪一条。例如:T=CS:00003表示从CS:0000处开始,跟踪3条指令的执行情况(如图5所示)。图5DEBUG的D和T命令使用实例注:与T命令相近的有P命令。其区别在于:P命令不会由于过程调用或软中断调用而跟进入被调用的程序中。G命令用于设置断点。没有指定开始地址的,从CS:IP位置开始执行,直到遇到断点或程序正常结束。(6)E命令----修改内存中存储单元的值。汇编器和链接器的使用方法DOS平台上主要用的汇编编译器为MASM和TASM,链接器为LINK和TLINK。前者由Microsoft提供,后者由Borland提供。这里只介绍MASM和LINK。TASM和TLINK的使用方法相似。MASM的使用以MASM5.0为例,其格式如下:MASM[/options][source[.asm]],[out[.obj]],[list[.lst]],[cref[.crf]][;]其中,source[.asm]----源程序文件。缺省扩展名为.asmout[.obj]----指定输出的目标代码文件。缺省的文件名为源程序文件名,缺省的扩展名为.objlist[.lst]----指定输出列表文件,缺省的扩展名为.lst。缺省情况下不生成列表文件。cref[.crf]----指定输出的交叉参考文件,缺省的扩展名是.crf。缺省情况下不生成交叉参考文件。最后的分号表示其后的项按缺省处理。如果运行MASM时不带参数,则自动提示给出相应参数。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 夏天预防疾病的方法与策略
- 净化板工程施工方案
- 外贸团队制度培训
- 如何做一个好员工
- 2024版房屋租赁合同终止与结算协议
- 珠海工业改造施工方案
- 2024版餐饮业经营场地租赁合同
- 联通双11活动策划方案
- 汽车排气阀施工方案
- 2024版房产抵押借款合同范本协议
- (T8联考)2025届高三部分重点中学12月第一次联考评物理试卷(含答案详解)
- 中国慢性冠脉综合征患者诊断及管理指南2024版解读
- 国内No.7信令方式技术规范----综合业务数字网用户部分(ISUP)
- 销售人员培训教材
- 尾矿库在线监测方案)
- 会计恒等式--试讲
- 房屋安全简易鉴定表.docx
- FSSC运营管理制度(培训管理办法)
- 警察公安工作汇报ppt模板ppt通用模板课件
- (完整)中考英语首字母填空高频词
- 海洋科学导论考试复习题(含答案)
评论
0/150
提交评论