资源预览内容
第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
第9页 / 共13页
第10页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第 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。 汇编过程是将源程序翻译为等价的二进制机器语言的过程。所产生的文件称为目标程实验指导篇3第 1 篇序,其后缀为.OBJ。在这个阶段中,将对源程序的语法进行检验,如果发现错误将给予提 示。错误提示分为严重错误和警告错误两种。严重错误指示某些指令存在语法错误,不能 形成对应的二进制机器指令。而警告错误指示某些指令含义不够明确,需要提醒程序员注 意。程序员可以根据提示对源程序进行修改,直到得到正确的结果为止。 在汇编过程中还会产生列表文件和交叉引用文件。列表文件的后缀为.LST,主要用于 给出源程序和机器代码程序的清单,以供检查程序使用。交叉引用文件的后缀为.CRF,它 是一个为源程序所引用的各种符号进行前后对照的文件,主要用于给出不同程序段中互相 引用的全部符号列表。这两个文件是可有可无的,如果不需要生成这两个文件,可以在汇 编过程中加以控制。 3链接 在汇编过程中形成了目标文件(.OBJ) ,但是在该文件中,只是将源程序的操作码部 分变成了机器码,而地址操作数还是可浮动的相对地址,不是实际地址,浮动地址需要再 定位。只有经过链接过程才能形成最后的可执行文件。链接程序的功能就是把一个或多个 目标文件合并成一个可执行文件,其后缀为.EXE。其实在链接过程中一共形成两个文件: 第一个是可执行文件(.EXE) 。默认的可执行文件名字与源程序文件相同,也可以根据用 户要求进行修改可执行文件的名字;链接过程中形成的第二个文件是内存映像文件 (.MAP) ,它给出了每个段的地址分配情况和长度。如果不需要该文件则可以在链接命令 执行时直接输入 Enter 键。在链接过程中还与一个库文件(.LIB 文件)相关。一般的汇编 程序不需要库文件。但是当汇编语言与高级语言(如 C 语言)接口时需要用到库文件。 此时输入相应的库文件名字即可。 4运行 通过汇编和链接,最终形成的可执行文件已经排出了程序中的语法错误,可以直接执 行。但是可能还存在一些算法错误,这样的错误则要通过调试过程来修正。常用的调试工 具软件有 DEBUG 等。 5汇编语言上机举例 例 编写一个名字为 ABCD.ASM 的源程序,该程序的功能是在计算机屏幕上显示一 个字符串“HELLO!” 。 1)编辑源程序 利用 Windows 2000 操作系统附件中的“记事本”编辑如下源程序。DATASEGMENT S1DBHELLO!,$ DATAENDS STACKSEGMENT PARA STACK DB 64 DUP(?) STACKENDS CODESEGMENT MAIN PROC FAR ASSUMECS:CODE,DS:DATA,SS:STACK START:PUSH DSMOV AX,0汇编语言程序设计实验指导及习题解答 4PUSH AXMOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AH,09HMOV DX,OFFSET S1INT 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 reservedObject filenameABCD.OBJ: Source listingNUL.LST: Cross referenceNUL.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 FileABCD.EXE List FileNUL.MAP: Libraries.LIB:实验指导篇5第 1 篇在链接过程中产生了两个文件,其默认的文件名显示在屏幕上,如果不需要做任何改 变就直接按 Enter 键。对于库文件一栏,如果不需要使用库文件,可以直接按 Enter 键; 如果需要使用库文件,则要求输入所使用的库文件名字。 4)运行 其命令格式为:C:ABCD在屏幕上就可以看到“HELLO!”的字样了。1.2.2 调试工具软件 DEBUG如果汇编语言的源程序中存在一些语法或格式上的错误,在汇编和链接过程中都可以 被发现并得到纠正。但是如果在源程序中存在着算法错误和逻辑错误,那就只有在调试过 程中才能发现并纠正了。常用的调试工具软件是 DEBUG。DEBUG 提供了修改寄存器和 内存单元内容的命令,可以很方便地修改寄存器、内存单元的内容,为调试程序、修改程 序带来了方便。在 DEBUG 状态下,还提供了调试、控制测试的环境。用户可以在此环境 下进行编辑、调试和执行等一些简单的汇编程序。DEBUG 有显示命令,通过显示命令, 可以观察某个内存单元的内容、CPU 内部某个寄存器的内容,并可以根据这些内容的变 化情况分析、调试程序。 1DEBUG 的启动 假设在Windows 2000 的环境下,通过选择“程序”“附件”“命令提示符”进入 DOS 状态。然后输入:Debug drive:path filename parameters 即可进入DEBUG 环境。 其中,drive:path filename:指定要测试的可执行文件的位置和名称。parameters:指定所需要的命令。 如果已经进入存放 DEBUG 文件的目录下,则可以使用简化的命令进入 DEBUG。简 化命令的格式为:Debug。进入 DEBUG 后,显示 DEBUG 的提示符号,该提示符号为 连字符 (-)。 2DEBUG 的主要命令 这里只介绍常用到的几个主要 DEBUG 命令,全部的 DEBUG 命令请参考相关文献。1)A(汇编命令)该命令的功能是从汇编语言程序语句创建可执行的机器码。所有数值都是十六进制格式,必须按 14 个字符输入这些数值。命令格式:A address参数 address 是指定输入汇编语言指令的位置。对 address 使用十六进制值,但是输入十六进制地址时不能以 h 字符结尾。如果不指定地址,执行 A 命令后将在它上次停止处的地址开始汇编。A 命令使用举例如下。-A 0100:0500 0100:0500 MOV AL,05汇编语言程序设计实验指导及习题解答 60100:0502 JMP NEAR 505 0100:0505 JMP FAR 50A2)C(比较命令) 该命令的功能是比较内存的两个区域存放的内容。 命令格式为:C range address 参数 range 指定要比较的内存第一个区域的起始和结束地址,或起始地址和长度。 参数 address 指定要比较的第二个内存区域的起始地址。 C 命令使用举例如下。-C 100,10F 300该命令对 100h10Fh 的内存数据块与 300h30Fh 的内存数据块进行比较。 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 197F:010D 83 93 197F:030D 197F:010E 49 77 197F:030E 197F:010F 4F 8A 197F:030F 注意:列表中缺少地址 197F:0106 和 197F:0306,这表明地址中的数据值是相同的。3)D(显示内存命令) 该命令的功能是显示一定范围内存地址的内容。 命令格式:D range 参数 range 指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。如 不指定 range,将从以前 D 命令中所指定地址范围末尾开始显示 128 字节的内容。 D 命令举例如下。-D CS:100 10F Debug 按以下格式显示范围中的内容:04BA:0100 54 4F 4D 00 53 41 57 59-45 52 00 00 00 00 00 00 TOM.SAWYER. .实验指导篇7第 1 篇当使用 D 命令时,Debug 以两个部分显示内存内容:十六进制部分(每个字节的值 都用十六进制格式表示)和 ASCII 码部分(每个字节的值都用 ASCII 码字符表示)。每个 非打印字符在显示的 ASCII 部分由英文句号(.)表示。每个显示行显示 16 字节的内容,其 中在第 8 和第 9 字节之间有一个连字符。每个显示行从 16 字节的边界上开始。 4)G(运行命令) 该命令功能是运行当前在内存中的程序。 命令格式:G =address breakpoints 参数 address 指定
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号