2024年6月8日发(作者:)

debug指令详解

一、DEBUG概述

DEBUG是在DOS状态下面供程序员使用的程序调试工具。它可以用来检查内存中任

何地址中的内容以及修改特定地址中的内容。DEBUG还可以用于逐指令执行某个程序,追

踪程序的执行过程,比较一条指令执行前后数值变化情况,读写文件与磁盘扇区。此外,

DEBUG还可以用于读写端口中的数值。

在DEBUG状态下,所有数据都作为字节序列,可以用DEBUG把任何类型的文件读入

内存中。DEBUG能够处理的数据为两种: 十六进制数和ASCⅡ码,使用两位数表示十六进

制数据(0~9,A~F)。在DEBUG中涉及内存中的数据时,要指定数据所在的内存单元的地

址,地址的输入格式是: [段地址]: [位移]。如果没有输入地址,DEBUG将假定为当前内存

段,从位于地址100H的字节开始。前100H字节保留给程序段前缀使用(称PSP结构,包

含程序执行的各种信息),该区域用于建立DOS与程序之间的联系。在DEBUG中,使用四

位十六进制数表示地址(0~9,A~F)。

DEBUG输入数据时有两种方法: 提示方法和非提示方法。在提示方法下,输入要求输入

数据的命令,后跟保存数据的地址。执行后可以看到该地址中已有的内容及一个冒号提示符。

此时可以在提示符下输入一个新的值或者按下回车键或CTRL+C回到“—”提示符。在非

提示方法下,输入保持数据的内存地址以及要输入的数据。 DEBUG的启动: 进入DOS

状态下,键入DEBUG ‏,按ENTER键,如: C:>DEBUG ‏,则屏幕显示: -

符号“-”是进入DEBUG的提示符,在该提示符下可键入任意DEBUG命令。

DEBUG的退出:

在DEBUG的提示符后输入Q命令,按ENTER键,则退出DEBUG返回DOS。

DEBUG的使用:

在DEBUG的提示符后输入DEBUG命令,按ENTER键。

二、DEBUG 命令详解

★ A命令

格式:A[地址]

功能:将指令直接汇编成机器码输入到内存中。

参数说明:[地址]指定存放键入汇编语言指令的内存单元的位置。

★ C命令

格式:C[源地址范围][目的地址]

功能:比较两内存区域中的内容是否相同。若不同则按字节显示其地址和内容,若相同则不

显示任何内容。

参数说明:[源地址范围]指定要比较的内存第一个区域的起始和结束地址,或起始地址和长

度。[目的地址] 指定要比较的第二个内存区域的起始地址。

★ D命令

格式:D[地址] 或D[起始地址][目的地址]

功能:以内存映象方式显示内存中的数据。 参数说明:指定要显示内容的内存单元的起始

地址和结束地址,或起始地址和长度。如果不指定 [地址],Debug将从以前 d 命令中所指

定的地址范围的末尾开始显示 128个字节的内容;第一次从DS:100处开始显示。

★ E命令

格式:E[地址] [字节串] 或E[地址]

功能:从指定的地址开始修改内存值。 参数说明:[地址]指定存放[字节串]第一个内存的位

置,[字节串]是要放入内存单元中的数据。

★ F命令

格式:F[地址范围] [字节或字节串]

功能:将要填写的字节或字节串填入由地址范围指定的存储器中。

参数说明:[地址范围]指定要填充内存区域的起始和结束地址,或起始地址和长度。[字节或

字节串] 指定要输入的数据,可以由十六进制数或引号包括起来的字符串组成。

★ G命令

格式:G[=起始地址] [[断点]„„]

功能:执行正在调试的程序,当达到断点时停止执行, 并且显示寄存器标志和下一条要执

行的命令。 参数说明:[=起始地址]指定当前在内存中要开始执行的指令所在的内存单元的

地址。如果不指定[=起始地址],DEBUG将从 CS:IP 寄存器中的当前地址开始执行程序。

[[断点]„„] 指定可以设置为 g 命令的部分的 1 到 10 个临时断点。

★ H命令

格式:H[数值][数值]

功能:分别显示两个十六进制数相加的和以及第一个数减去第二个数的差。

参数说明:[数值]表示从 0 到 FFFFh 范围内的任何十六进制数字。

★ I命令

格式:I[端口地址]

功能:从指定的端口输入并显示(用十六进制)指定端口中的数据(字节)。 参数说明:[端口

地址]指定要读取数据的端口地址。

★ L命令

格式:L[地址][盘号:][逻辑扇区号][扇区数]

功能:将一个文件或盘的绝对扇区装入存储器。

参数说明:[地址] 指定要在其中加载文件或扇区内容的内存空间的起始位置。[盘号:] 指定

包含读取指定扇区的磁盘的驱动器。该值是数值型,表示为:0 = A, 1 = B, 2 = C,„„ 等。

[逻辑扇区号] 指定要加载其内容的第一个扇区的十六进制数。 [扇区数] 指定要加载其内容

的连续扇区的十六进制数。

★ M命令

格式:M[地址范围][起始地址]

功能:把地址范围内的存储器单元的内容移到起始地址的指定地址中

参数说明:[地址范围] 指定要复制内容的内存区域的起始和结束地址,或起始地址和长度。

[起始地址] 指定要将 range 内容复制到该位置的起始地址。

★ N命令

格式:N[盘号: ] [路径] [文件名] [扩展名]

功能:定义DEBUG使用的文件。

参数说明:[盘号: ] [路径] [文件名] [扩展名]指定文件所在的盘符,路径,文件名和扩展名。

★ O命令

格式:O[端口地址] [数据]

功能:发送数据(字节)到指定的输出端口。