为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

汇编调试

2020-03-08 9页 doc 25KB 6阅读

用户头像

is_751406

暂无简介

举报
汇编调试汇编软件MASM和调试 工具软件DEBUG使用 汇编语言是唯一能够充分利用计算机硬件特性并直接控制硬件设备的语言。对于诸如实时控制、软件加密解密、病毒分析、软件调试等领域,汇编语言是最有效的程序设计语言。在学习汇编语言的过程中,只有通过大量的上机实验才能更好地掌握汇编语言程序设计的技能。 1.1  实 验 目 的 (1)掌握汇编软件MASM的使用,熟悉汇编语言的上机过程。 (2)掌握调试工具软件DEBUG的应用,掌握汇编语言程序的调试技能。 1.2  相关基础知识 1.2.1  汇编语言程序上机步骤 1.汇编语言程序设计上机步...
汇编调试
汇编软件MASM和调试 工具软件DEBUG使用 汇编语言是唯一能够充分利用计算机硬件特性并直接控制硬件设备的语言。对于诸如实时控制、软件加密解密、病毒、软件调试等领域,汇编语言是最有效的程序设计语言。在学习汇编语言的过程中,只有通过大量的上机实验才能更好地掌握汇编语言程序设计的技能。 1.1  实 验 目 的 (1)掌握汇编软件MASM的使用,熟悉汇编语言的上机过程。 (2)掌握调试工具软件DEBUG的应用,掌握汇编语言程序的调试技能。 1.2  相关基础知识 1.2.1  汇编语言程序上机步骤 1.汇编语言程序设计上机步骤 汇编语言源程序的上机步骤包括编辑、汇编、链接、调试等几个过程,如图1-1所示。 图1.1  汇编语言源程序上机步骤 源程序文件的编辑就是编写一个汇编语言源程序,它可以使用任何一个文件编辑器实现。例如,Windows 2000操作系统附件中的记事本。编辑形成的文件最后一定要以.ASM后缀保存。在编辑源程序的时候一定要将输入法切换到英文环境下,否则会出错。 2.汇编 汇编是把用汇编语言编写的源代码程序翻译成计算机能够识别的二进制机器语言程序。目前常用的汇编程序是MASM,称为宏汇编程序。宏汇编程序当前主要有两个版本:MASM5.0和MASM6.0。其中,MASM5.0的可执行文件是MASM.EXE,MASM5.0用于DOS环境下。初学者首先学习使用MASM5.0。而MASM6.0的可执行文件是ML.EXE。 汇编过程是将源程序翻译为等价的二进制机器语言的过程。所产生的文件称为目标程序,其后缀为.OBJ。在这个阶段中,将对源程序的语法进行检验,如果发现错误将给予提示。错误提示分为严重错误和警告错误两种。严重错误指示某些指令存在语法错误,不能形成对应的二进制机器指令。而警告错误指示某些指令含义不够明确,需要提醒程序员注意。程序员可以根据提示对源程序进行修改,直到得到正确的结果为止。 在汇编过程中还会产生列表文件和交叉引用文件。列表文件的后缀为.LST,主要用于给出源程序和机器代码程序的,以供检查程序使用。交叉引用文件的后缀为.CRF,它是一个为源程序所引用的各种符号进行前后对照的文件,主要用于给出不同程序段中互相引用的全部符号列表。这两个文件是可有可无的,如果不需要生成这两个文件,可以在汇编过程中加以控制。 3.链接 在汇编过程中形成了目标文件(.OBJ),但是在该文件中,只是将源程序的操作码部分变成了机器码,而地址操作数还是可浮动的相对地址,不是实际地址,浮动地址需要再定位。只有经过链接过程才能形成最后的可执行文件。链接程序的功能就是把一个或多个目标文件合并成一个可执行文件,其后缀为.EXE。其实在链接过程中一共形成两个文件:第一个是可执行文件(.EXE)。默认的可执行文件名字与源程序文件相同,也可以根据用户要求进行修改可执行文件的名字;链接过程中形成的第二个文件是内存映像文件(.MAP),它给出了每个段的地址分配情况和长度。如果不需要该文件则可以在链接命令执行时直接输入Enter键。在链接过程中还与一个库文件(.LIB文件)相关。一般的汇编程序不需要库文件。但是当汇编语言与高级语言(如C语言)接口时需要用到库文件。此时输入相应的库文件名字即可。 4.运行 通过汇编和链接,最终形成的可执行文件已经排出了程序中的语法错误,可以直接执行。但是可能还存在一些算法错误,这样的错误则要通过调试过程来修正。常用的调试工具软件有DEBUG等。 5.汇编语言上机举例 例 编写一个名字为ABCD.ASM的源程序,该程序的功能是在计算机屏幕上显示一个字符串“HELLO!”。 1)编辑源程序 利用Windows 2000操作系统附件中的“记事本”编辑如下源程序。 DATA    SEGMENT S1    DB    'HELLO!','$' DATA    ENDS STACK    SEGMENT    PARA STACK DB 64 DUP(?) STACK    ENDS CODE    SEGMENT MAIN PROC FAR ASSUME    CS:CODE,DS:DATA,SS:STACK START:    PUSH  DS MOV    AX,0 PUSH  AX MOV      AX,DATA MOV      DS,AX MOV    AX,STACK MOV      SS,AX MOV      AH,09H MOV      DX,OFFSET S1 INT      21H RET MAIN ENDP CODE     ENDS END START 2)汇编 在MASM5.0中的汇编程序是MASM.EXE。 其命令格式为: C:〉MASM  ABCD.ASM 执行上述操作命令之后将在屏幕上显示如下信息: Microsoft(R) Macro Assembler Version 5.00 Copyright(C) Microsoft Corp 1981-1985,1987.All rights reserved Object filename[ABCD.OBJ]: Source listing[NUL.LST]: Cross reference[NUL.CRF]: 50678 + 410090 Bytes symbol space free 0 warning Errors 0 Severe Errors 在汇编过程中产生了三个文件,其默认的文件名显示在屏幕上,如果不需要做任何改变就直接按Enter键。 通过屏幕上的显示,可以了解到在本次汇编过程中没有发生错误和警告,因此可以继续进行链接操作。 3)链接 在MASM5.0中的汇编程序是LINK.EXE。 其命令格式为: C:〉LINK ABCD 执行上述命令后将在屏幕上显示如下信息: Microsoft(R) Overlay Linker Version 3.6 Copyright(C) Mirosoft Corp 1983-1987.All rights reserved Run File[ABCD.EXE] List File[NUL.MAP]: Libraries[.LIB]: 在链接过程中产生了两个文件,其默认的文件名显示在屏幕上,如果不需要做任何改变就直接按Enter键。对于库文件一栏,如果不需要使用库文件,可以直接按Enter键;如果需要使用库文件,则要求输入所使用的库文件名字。 4)运行 其命令格式为: C:〉ABCD 在屏幕上就可以看到“HELLO!”的字样了。 1.2.2  调试工具软件DEBUG 如果汇编语言的源程序中存在一些语法或格式上的错误,在汇编和链接过程中都可以被发现并得到纠正。但是如果在源程序中存在着算法错误和逻辑错误,那就只有在调试过程中才能发现并纠正了。常用的调试工具软件是DEBUG。DEBUG提供了修改寄存器和内存单元内容的命令,可以很方便地修改寄存器、内存单元的内容,为调试程序、修改程序带来了方便。在DEBUG状态下,还提供了调试、控制测试的环境。用户可以在此环境下进行编辑、调试和执行等一些简单的汇编程序。DEBUG有显示命令,通过显示命令,可以观察某个内存单元的内容、CPU内部某个寄存器的内容,并可以根据这些内容的变化情况分析、调试程序。 1.DEBUG的启动 假设在Windows 2000的环境下,通过选择“程序”→“附件”→“命令提示符”进入DOS状态。然后输入:Debug [[drive:][path] filename [parameters]] 即可进入DEBUG环境。 其中,[drive:][path] filename:指定要测试的可执行文件的位置和名称。 [parameters]:指定所需要的命令。 如果已经进入存放DEBUG文件的目录下,则可以使用简化的命令进入DEBUG。简化命令的格式为:Debug。进入DEBUG后,显示DEBUG的提示符号,该提示符号为连字符 (-)。 2.DEBUG的主要命令 这里只介绍常用到的几个主要DEBUG命令,全部的DEBUG命令请参考相关文献。 1)A(汇编命令) 该命令的功能是从汇编语言程序语句创建可执行的机器码。所有数值都是十六进制格式,必须按1~4个字符输入这些数值。 命令格式:A address 参数address是指定输入汇编语言指令的位置。 对 address 使用十六进制值,但是输入十六进制地址时不能以h字符结尾。如果不指定地址,执行A命令后将在它上次停止处的地址开始汇编。 A命令使用举例如下。 -A 0100:0500   0100:0500 MOV AL,05 0100:0502 JMP  NEAR 505 0100:0505 JMP  FAR 50A 2)C(比较命令) 该命令的功能是比较内存的两个区域存放的内容。 命令格式为:C range address 参数range指定要比较的内存第一个区域的起始和结束地址,或起始地址和长度。 参数address指定要比较的第二个内存区域的起始地址。 C命令使用举例如下。 -C 100,10F 300 该命令对 100h~10Fh 的内存数据块与300h~30Fh的内存数据块进行比较。 Debug 响应前面的命令并显示如下信息(假定此时 DS = 197F): 197F:0100 4D E4 197F:0300   197F:0101 67 99 197F:0301   197F:0102 A3 27 197F:0302   197F:0103 35 F3 197F:0303   197F:0104 97 BD 197F:0304   197F:0105 04 35 197F:0305   197F:0107 76 71 197F:0307   197F:0108 E6 11 197F:0308   197F:0109 19 2C 197F:0309   197F:010A 80 0A 197F:030A   197F:010B 36 7F 197F:030B   197F:010C BE 22 197F:030C  
/
本文档为【汇编调试】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索