您好,欢迎访问三七文档
HHaarrbbiinnIInnssttiittuutteeooffTTeecchhnnoollooggyyaattWWeeiihhaaii汇编语言实验报告实验一第一部分:dubug用法一、问题描述上机前预习debug常用命令的用法,复习汇编语言基本指令,上机时进行debug命令练习。二、问题分析使用dubug调试汇编程序,MS-DOS环境,使用WINNT文件夹下system32子文件夹的DEBUG.EXE文件。三、设计思想1.在DOS的提示符下,可如下键入Debug启动调试程序:DEBUG[路径\文件名][参数1][参数2]2.Debug后可以不带文件名,仅运行Debug程序;需要时,再用N和L命令调入被调试程序。命令中可以带有被调试程序的文件名,则运行Debug的同时,还将指定的程序调入主存;参数1/2是被调试程序所需要的参数。3.在Debug程序调入后,根据有无被调试程序及其类型相应设置寄存器组的内容,发出Debug的提示符“-”,此时就可用Debug命令来调试程序。4.运行Debug程序时,如果不带被调试程序,则所有段寄存器值相等,都指向当前可用的主存段;除SP之外的通用寄存器都设置为0,而SP指示当前堆栈顶在这个段的尾部;IP=0100h;状态标志都是清0状态。5.运行Debug程序时,如果带入的被调试程序扩展名不是.EXE,则BX.CX包含被调试文件大小的字节数(BX为高16位),其他同不带被调试程序的情况。6.运行Debug程序时,如果带入的被调试程序扩展名是.EXE,则需要重新定位。此时,CS:IP和SS:SP根据被调试程序确定,分别指向代码段和堆栈段。DS=ES指向当前可用的主存段,BX.CX包含被调试文件大小的字节数(BX为高16位),其他通用寄存器为0,状态标志都是清0状态。7.运行Debug程序时,如果带入的被调试程序扩展名不是.EXE,则BX.CX包含被调试文件大小的字节数(BX为高16位),其他同不带被调试程序的情况。8.运行Debug程序时,如果带入的被调试程序扩展名是.EXE,则需要重新定位。此时,CS:IP和SS:SP根据被调试程序确定,分别指向代码段和堆栈段。DS=ES指向当前可用的主存段,BX.CX包含被调试文件大小的字节数(BX为高16位),其他通用寄存器为0,状态标志都是清0状态。Debug的命令都是一个字母,后跟一个或多个参数:字母[参数]四、注意事项命令的使用中注意:①字母不分大小写;②只使用16进制数,没有后缀字母;③分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数间可无分隔符;④每个命令只有按了回车键后才有效,可以用Ctrl+Break中止命令的执行;⑤命令如果不符合Debug的规则,则将以“error”提示,并用“^”指示错误位置。许多命令的参数是主存逻辑地址,形式是“段基地址:偏移地址”。其中,段基地址可以是段寄存器或数值;偏移地址是数值。如果不输入段地址,则采用默认值,可以是缺省段寄存器值。如果没有提供偏移地址,则通常就是当前偏移地址。五、命令形式1.显示命令DD(Dump)命令显示主存单元的内容,它的格式如下(注意分号后的部分用于解释命令功能,不是命令本身):D[地址];显示当前或指定开始地址的主存内容D[范围];显示指定范围的主存内容例如,显示当前(接着上一个D命令显示的最后一个地址)主存内容:左边部分是主存逻辑地址,中间是连续16个字节的主存内容(16进制数,以字节为单位),右边部分是这16个字节内容的ASCII字符显示,不可显示字符用点“.”表示。一个D命令仅显示“8行×16个字节”(80列显示模式)内容。2.修改命令EE(Enter)命令用于修改主存内容,它有两种格式:E地址;格式1,修改指定地址的内容E地址数据表;格式2,用数据表的数据修改指定地址的内容3.填充命令FF(Fill)命令用于对一个主存区域填写内容,同时改写原来的内容,其格式为:F范围数据表该命令用数据表的数据写入指定范围的主存。如果数据个数超过指定的范围,则忽略多出的项;如果数据个数小于指定的范围,则重复使用这些数据,直到填满指定范围。4.寄存器命令RR(Register)命令用于显示和修改处理器的寄存器,它有三种格式。R;格式1,显示所有寄存器内容和标志位状态R寄存器名;格式2,显示和修改指定寄存器5.汇编命令A输入A命令后,就可以输入8086指令,Debug将它们汇编成机器代码,相继地存放在指定地址开始的存储区中,记住最后要输入一个回车结束A命令。进行汇编的步骤如下:①输入汇编命令A[地址],按回车。Debug提示地址,等待你输入新指令;②输入汇编指令,按回车;③如上继续输入汇编指令,直到输入所有指令;④不输入内容就按回车,结束汇编,返回Debug的提示符状态。6.反汇编命令反汇编命令U(Unassemble)将主存内容按照机器代码形成汇编指令显示:U[地址];从指定地址开始,反汇编32个字节(80列显示模式)U范围;对指定范围的主存内容进行反汇编U命令中如果没有指定地址,则接着上一个U命令的最后一个单元开始;若还没有使用过U命令,则从当前CS:IP开始。屏幕显示的左边是主存逻辑地址,中间是该指令的机器代码,而右边则是对应的指令汇编格式。7.运行命令G运行命令G(Go)从指定地址处开始运行程序,直到遇到断点或者程序正常结束。G[=地址][断点地址1,断点地址2,...,断点地址10]G命令等号后的地址指定程序段运行的起始地址,如不指定则从当前的CS:IP开始运行。断点地址如果只有偏移地址,则默认是代码段CS;断点可以没有,但最多只能有10个。程序遇到断点(实际上就是断点中断指令INT3),停止执行,并显示当前所有寄存器和标志位的内容、以及下一条将要执行的指令,以便观察程序运行到此的情况。程序正常结束,将显示“Programterminatednormally”。8.跟踪命令T跟踪命令T(Trace),也称为单步命令,每执行一条指令就显示运行结果,使程序员可以细致地观察程序的执行情况。T[=地址];逐条指令跟踪T[=地址][数值];多条指令跟踪从指定地址起执行一条或数值参数指定条数的指令后停下来,每条指令执行后都要显示所有寄存器和标志位的值以及下一条指令。如未指定地址则从当前的CS:IP开始执行。注意给出的执行地址前有一个等号,否则会被认为是被跟踪指令的条数(数值)。9.继续命令P继续命令P(Proceed)类似T命令,逐条执行指令、显示结果。但是当遇到子程序调用、中断功能调用和循环指令等时,不在子程序、中断服务程序或循环体中单步执行,而是直接执行完成子程序、中断服务程序或循环体,然后显示结果。当不需要调试子程序、中断服务程序或循环程序段时,要应用P命令,而不是T命令。P[=地址][数值]10.退出命令Q退出命令Q(Quit)使Debug程序退出,返回DOS。Q命令并无存盘功能,可使用W命令存盘。第二部分:编写比较两个字符串是否相等的程序一、问题描述编写程序,程比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示“MATCH”,若不相同则显示“NOMATCH”。编译链接后,根据所定义的字符串情况用debug观察程序的运行结果是否正确,并且会用debug修改字符串的值,以便检查程序两个分支是否都能正确运行。二、问题分析定义两个字符串,从前向后依次比较每个字符是否相等,如果不相等,则输出nomatch结束,否则继续比较下一个,全部比较完成之后,输出match,结束。三、设计思想分支结构设计,循环设计。前向后依次比较每个字符是否相等,如果不相等,则输出nomatch结束,否则继续比较下一个,全部比较完成之后,输出match,结束。四、流程图五、调试分析主要在在于分支结构的跳转语句的设计。六、源程序代码datasegmentstr1db'mes'str2db'mess'str3db'match$'str4db'notmatch$'dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmoves,axmovcx,4movdi,offsetstr1movsi,offsetstr2repzcmpsbjzlab1jnzlab2lab1:movdx,offsetstr3movah,09hint21hmovah,4chint21hlab2:movdx,offsetstr4movah,09hint21hmovah,4chint21hcodeendsendstart七、运行结果八、总结通过这次试验了解了分支程序的设计,熟悉了字符串比较的基本操作流程,对设计一个汇编程序有了深入的了解。实验二一、问题描述输入一个关键字和一个句子,判断句子中是否包含关键字,如包含,显示其在句子中的位置,否则给出未找到信息。二、问题分析比较的方法,依次比较,不是关键字则回溯,回溯时让源串回溯,模式串指针回到开始位置,继续进行比较,知道比较到有符合条件的部分输出match,否则输出nomatch.三、设计思想本道题目的设计方法就是用比较回朔法进行比较,若关键字字符串的指针在比较过程中移动到字符串尾,则证明找到此字符串,然后母串的指针减去字串的长度,即求到此字串的位置。四、程序流程图开始初始化数据段初始化代码段获取INFO1的偏移地址并赋值给DX应用INT21H的09H号功能获取str1的偏移地址并赋值给DX应用INT21H的0AH号功能六、实验源程序:DATASEGMENTSTRdb50MAX1db?STRING1db50dup(?)KEYWORDdb50MAX2db?STRING2db50dup(?)INFO1DB0AH,0DH,'inputstring:','$'INFO2DB0AH,0DH,'inputkeyword:','$'INFO3DB0AH,0DH,'weatheryoucanfindkeyword:'JUDGDB20H,20H,20H,20H,20H,0AH,0DH,'$'DATAENDSCH=MAX1;CL=MAX2SI=DI=0判断str1和str2的相对应位置是否相等YDI,SI后移NCL是否为0YN输出match结束CL减一SI后移,DI清零CL减一CH是否为0输出nomatchNCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEADX,INFO1MOVAH,09HINT21HMOVDX,OFFSETSTRMOVAH,0AHINT21HLEADX,INFO2MOVAH,09HINT21HMOVDX,OFFSETKEYWORDMOVAH,0AHINT21HMOVCH,MAX1MOVCL,MAX2MOVSI,0MOVDI,0NEXT:MOVAH,STRING1[SI]CMPAH,STRING2[DI]JNZNOJZYESYES:INCDIINCSIDECCLCMPCL,0JNZNEXTJZFINI2NO:INCSIMOVDI,0DECCHCMPCH,0JZFINIJNZNEXTFINI:LEADX,INFO3MOVJUDG,'N'MOVJUDG+1,'O'MOVJUDG+2,'M'MOVJUDG+3,'A'MOVJUDG+4,'T'MOVJUDG+5,'C'MOVJUDG+6,'H'MOVAH,09HINT21HMOVAH,4CHINT21HFINI2:LEADX,INFO3MOVJUDG+2,'M'MOVJUDG+3,'A'MOVJUDG+4,'T'MOVJUDG+5,'C'MOVJUDG+6,'H'MOVAH,09HINT21HMOVBX,OFFSETSTRING2MOVCX,SISUBCX,BXMOVDL,CLADDDL,30HMOVAH,02HINT21HMOVAH,4CHINT21HCODEENDSENDSTART五、调试分析在进行计算字符串位置的时候出现了问题,不知道偏移指针的差如何使用,也是在老师的指导下,才完成调试。六、运
本文标题:汇编语言实验报告
链接地址:https://www.777doc.com/doc-1890618 .html