常用DEBUG命令的功能及使用举例 第一节DEBUG的主要用途及DEBUG的调用 DEBUG是为汇编语言设计的一种调试工具,它通过单步执行、设置断点等方式为剂 编语言程序员提供了非常有效的程序调试手段,DEUG可以直接用来检查和修改内存单元 装入、存储及启动运行程序、检查及修改寄存器,也就是说DBUG可深入到计算机的内部, 可使用户更紧密地与计算机中真正进行的工作相联系。不仅如此,对汇编语言初学者来说, DBLG也是练习使用汇编指令的一种有效工具。初学者可以直接在DBG环境下执行汇编 指令。然而,在DEBG下运行汇编语言源程序也受到了一些限制,它不宜汇编较长的程序, 不便于分块程序设计,不便于形成以O5外部命令形式构成的,XE文件,不能使用浮动 地址,也不能使用ASM和MASM提供的绝大多数伪指令。 在DOS系统中,DEBUG是以DOS外部命令文件形式提供给用户的,名为DEBUG.EXE。 命令文件DEBUG.EXE一般存放在D0S子目录下,因此调用DEBG时,只需在DOS提示符下 键入 DEBUG[<驱动器名>:][<路径>][<文件名>[.<扩展名>][<参数1>][<参数2>]<回车> 例如:C:\DOS>DEBUG DISKCOPY.COMA:B: 进入DEBUG的提示符是符号“-”。即,出现提示符“-”就表示可以接受DEBG 命令了。 当进入DEBUG时,寄存器和标志设成以下数值,这些值用于DEBUG调试中的程序。 段寄存器CS,DS,ES和SS均指向DEBG末尾的第一个段。 IP寄存器置为0100H。栈指针SP指向尾部或装入程序的暂存部分的底部。 其余寄存器皆取零值,但若用户调用时含文件说明,则CX含文件长度(长度大于 64K时以含长度的高位):标志为各自的复位值:驱动器传送地址在代码段位移81处
常用 DEBUG 命令的功能及使用举例 第一节 DEBUG 的主要用途及 DEBUG 的调用 DEBUG 是为汇编语言设计的一种调试工具,它通过单步执行、设置断点等方式为汇 编语言程序员提供了非常有效的程序调试手段。DEBUG 可以直接用来检查和修改内存单元、 装入、存储及启动运行程序、检查及修改寄存器,也就是说 DEBUG 可深入到计算机的内部, 可使用户更紧密地与计算机中真正进行的工作相联系。不仅如此,对汇编语言初学者来说, DEBUG 也是练习使用汇编指令的一种有效工具。初学者可以直接在 DEBUG 环境下执行汇编 指令。然而,在 DEBUG 下运行汇编语言源程序也受到了一些限制,它不宜汇编较长的程序, 不便于分块程序设计,不便于形成以 DOS 外部命令形式构成的 .EXE 文件,不能使用浮动 地址,也不能使用 ASM 和 MASM 提供的绝大多数伪指令。 在 DOS 系统中,DEBUG 是以 DOS 外部命令文件形式提供给用户的,名为 DEBUG.EXE。 命令文件 DEBUG.EXE 一般存放在 DOS 子目录下,因此调用 DEBUG 时,只需在 DOS 提示符下 键入: DEBUG [<驱动器名>:][<路径>][<文件名>[.<扩展名>]][<参数 1>][<参数 2>] < 回车> 例如: C:\DOS>DEBUG DISKCOPY.COM A: B: 进入 DEBUG 的提示符是符号“-”。即,出现提示符“-”就表示可以接受 DEBUG 命令了。 当进入 DEBUG 时,寄存器和标志设成以下数值,这些值用于 DEBUG 调试中的程序。 段寄存器 CS,DS,ES 和 SS 均指向 DEBUG 末尾的第一个段。 IP 寄存器置为 0100H。栈指针 SP 指向尾部或装入程序的暂存部分的底部。 其余寄存器皆取零值,但若用户调用时含文件说明,则 CX 含文件长度(长度大于 64K 时 BX 含长度的高位);标志为各自的复位值;驱动器传送地址在代码段位移 80H 处
注意,若DEBUG装入扩展名为.EXE的文件,则DEBUG需重定位且设置段寄存器指示器为文 件中所定义的值。但DS,ES指向最低可用段处的程序区前缀。BX和CX为文件容量值。 而,XE文件如果在连接时选择了装入内存高处的参数,则该程序装入高处。 第二节DEBUG的主要命令功能与格式 DEBUG命令是在DEBG提示符“-”下,由键盘键入的。每条命令以单个字母的命 令符开头,然后是命令的操作参数,操作参数与操作参数之间,用空格或逗号隔开,操作 参数与命令符之间用空格隔开,命令的结束符是回车键Enter。命令及参数的输入可以是 大小写的结合。Ctrl+Break键可中止命令的执行。Ctrl+Num Lock键可暂停屏幕卷动,按 任一健继续。所用数均为十六进制数,且不必写H。 *1.汇编命令A 格式:A[<段寄存器名>/<段地址>:】<段内偏移>] 上式等价于: (1)A<段寄存器名>:<段内偏移> (2)A<段地址>:<段内偏移> (3)A<段内偏移> (4)A 功能:健入该命令后显示段地址和段内偏移并等待用户从健盘逐条健入汇编命令,逐条汇 编成代码指令,顺序存放到段地址和段内偏移所指定的内存区域,直到显示下一地址时用 户直接键入回车键返回到提示符“-”。 注:其中(1)用指定段寄存器的内容作段地址,(3)用CS的内容作段地址,(④)以CS:100 作地址。以后命令中提及的各种‘地址'形式,均指()、(②)、(3)中A后的地址形式。 2.比较命令C 格式:C〈源地址范围>,〈目标地址
注意,若 DEBUG 装入扩展名为.EXE 的文件,则 DEBUG 需重定位且设置段寄存器指示器为文 件中所定义的值。但 DS,ES 指向最低可用段处的程序区前缀。BX 和 CX 为文件容量值。 而 .EXE 文件如果在连接时选择了装入内存高处的参数,则该程序装入高处。 第二节 DEBUG 的主要命令功能与格式 DEBUG 命令是在 DEBUG 提示符“-”下,由键盘键入的。每条命令以单个字母的命 令符开头,然后是命令的操作参数,操作参数与操作参数之间,用空格或逗号隔开,操作 参数与命令符之间用空格隔开,命令的结束符是回车键 Enter。命令及参数的输入可以是 大小写的结合。Ctrl+Break 键可中止命令的执行。Ctrl+Num Lock 键可暂停屏幕卷动,按 任一键继续。所用数均为十六进制数,且不必写 H。 * 1. 汇编命令 A 格式:A [[<段寄存器名>/<段地址>:] <段内偏移>] 上式等价于: (1) A <段寄存器名>:<段内偏移> (2) A <段地址>:<段内偏移> (3) A <段内偏移> (4) A 功能:键入该命令后显示段地址和段内偏移并等待用户从键盘逐条键入汇编命令,逐条汇 编成代码指令,顺序存放到段地址和段内偏移所指定的内存区域,直到显示下一地址时用 户直接键入回车键返回到提示符“-”。 注: 其中(1)用指定段寄存器的内容作段地址,(3)用 CS 的内容作段地址,(4)以 CS:100 作地址。以后命令中提及的各种‘地址’形式,均指(1)、(2)、(3)中 A 后的地址形式。 2. 比较命令 C 格式: C <源地址范围>,<目标地址>
其中<范围>是由<起始地址>〈终止地址>或者是由<起始地址>L<长度>指出的 片连续单元。 功能:从<源地址范围>的起始地址单元起逐个与目标起始地址以后的单元顺序比较单元的 内容,直至源终止地址为止。遇有不一致时,以<源地址><源内容>〈目标内容><目标地 址>的形式显示失配单元及内容。 *3.显示内存命令D 格式:D[<地址>/<范围>】 上式等价于 (1)D<地址> (2)D<范围> (3)D 功能:以两种形式显示指定范围的内存内容。一种形式为十六进制内容,一种形式为以相 应字节的内容作为ASCII码的字符,对不可见字符以‘.’代替。 注:其中(1)以CS为段寄存器。(③)显示CS:100起始的一片内 容。 *4.修改内存命令 E 格式:E<地址>[K单元内容表>]
其中<范围>是由<起始地址> <终止地址>或者是由<起始地址> L <长度>指出的一 片连续单元。 功能:从<源地址范围>的起始地址单元起逐个与目标起始地址以后的单元顺序比较单元的 内容,直至源终止地址为止。遇有不一致时,以<源地址> <源内容> <目标内容> <目标地 址>的形式显示失配单元及内容。 * 3. 显示内存命令 D 格式: D [<地址>/<范围>] 上式等价于: (1) D <地址> (2) D <范围> (3) D 功能:以两种形式显示指定范围的内存内容。一种形式为十六进制内容,一种形式为以相 应字节的内容作为 ASCII 码的字符,对不可见字符以‘.’代替。 注: 其中(1)以 CS 为段寄存器。(3)显示 CS:100 起始的一片内 容。 * 4. 修改内存命令 E 格式: E <地址> [<单元内容表>]
上式等价于: (1)E<地址> (②)E<地址><单元内容表> 其中<单元内容表>是以逗号分隔的十六进制数,或用'或”括起来的字符串,或 者是二者的组合。 功能:(①)不断显示地址,可连续键入修改内容,直至新地址出现后键入回车Enter为止。 (②)将<单元内容表>逐一写入由<地址>开始的一片单元。 5.填充内存命令F 格式:F<范围><单元内容表> 功能:将单元内容表中的值逐个填入指定范围,单元内容表中内容用完后重复使用。 例如:-F5BC:200L10B2,‘XYZ',3C<Enter> *6.执行命令G 格式:G[=<地址>[,<断点>] 上式等价于 (1)G (2)G=<地址> (3)G=<地址>,<断点> 功能:执行内存中的指令序列 注:()从CS:IP所指处开始执行 (2)从指定地址开始执行 (③)从指定地址开始执行,到断点自动停止。 7.十大进制算求运算指令H 格式:H<值1)<值2> 功能:求十六进制数<值1>和<值2>的和与差并显示结果 8.端口输入命令I
上式等价于: (1) E <地址> (2) E <地址> <单元内容表> 其中<单元内容表>是以逗号分隔的十六进制数,或用’或”括起来的字符串,或 者是二者的组合。 功能: (1)不断显示地址,可连续键入修改内容,直至新地址出现后键入回车 Enter 为止。 (2)将<单元内容表>逐一写入由<地址>开始的一片单元。 5. 填充内存命令 F 格式: F <范围> <单元内容表> 功能: 将单元内容表中的值逐个填入指定范围,单元内容表中内容用完后重复使用。 例如: -F 5BC:200 L 10 B2,‘XYZ’,3C <Enter> * 6. 执行命令 G 格式: G [=<地址>[,<断点>]] 上式等价于: (1) G (2) G=<地址> (3) G=<地址>,<断点> 功能: 执行内存中的指令序列 注: (1)从 CS:IP 所指处开始执行 (2)从指定地址开始执行 (3)从指定地址开始执行,到断点自动停止。 7. 十六进制算求运算指令 H 格式: H <值 1> <值 2> 功能: 求十六进制数<值 1>和<值 2>的和与差并显示结果。 8. 端口输入命令 I
格式:1<端口地址> 功能:从指定端口接收信息并将输入的内容显示出来。 *9.读盘命令L 格式:L<地址><驱动器号><起始逻辑扇区><所读扇区个数> 其中<地址>的缺省值为CS:100。逻辑扇区可由物理扇区号换算得到,以双面双密 度盘为例:物理扇区是按0面0道1区,0面0道2区,0面0道9区,0面1道1 区,.,0面39道9区,1面0道1区,.,1面39道9区排列。而逻辑扇区与物理 扇区号的对应关系为物理扇区0面0道1扇区至9扇区,逻辑扇区号为0一8:物理扇区1 面0道1扇区至9扇区,逻辑扇区号为9一11H:物理扇区0面1道1扇区至9扇区,逻辑 扇区号为12一1:。这样每道先0面后1面一直排下去。 其中<驱动器号>为0、1或2,0表示A驱,1表示B驱,2表示硬盘。 功能:将<驱动器号>指定的盘上,从<起始逻辑扇区>起,共个逻辑扇区上的所有字节顺 序读入指定内存地址开始的一片连续单元。当L后的参数缺省时,必须在L之前由N命令 指定(或进入D$G时一并指出)所读驱动器文件名。此时L执行后将该文件装入内存。 例如:-N EXAMPL,E<Enter> -L <Enter> 将当前驱动器上的EXAMPLE文件装入CS:1O0起始的一片内存单元。 10.内存搬家命令M 格式:M<源地址范围><目标起始地址> 其中源及目标地址若仅输入偏移量,则隐含相对DS。 功能:把<源地址范围>中的内容顺序搬至<目标起始地址>起的一片连续单元。 例如:-MC5:100110600 把从CS:100起至CS:110止17个字节搬至DS:600至DS:610的一片单元。 *11.命名待读/写文件命令N 格式:N<文件名说明>
格式: I <端口地址> 功能: 从指定端口接收信息并将输入的内容显示出来。 * 9. 读盘命令 L 格式: L <地址> <驱动器号> <起始逻辑扇区> <所读扇区个数 n> 其中<地址>的缺省值为 CS:100。逻辑扇区可由物理扇区号换算得到,以双面双密 度盘为例:物理扇区是按 0 面 0 道 1 区,0 面 0 道 2 区,.,0 面 0 道 9 区,0 面 1 道 1 区,.,0 面 39 道 9 区,1 面 0 道 1 区,.,1 面 39 道 9 区排列。而逻辑扇区与物理 扇区号的对应关系为物理扇区 0 面 0 道 1 扇区至 9 扇区,逻辑扇区号为 0—8;物理扇区 1 面 0 道 1 扇区至 9 扇区,逻辑扇区号为 9—11H;物理扇区 0 面 1 道 1 扇区至 9 扇区,逻辑 扇区号为 12—1AH;.。这样每道先 0 面后 1 面一直排下去。 其中<驱动器号>为 0、1 或 2,0 表示 A 驱,1 表示 B 驱,2 表示硬盘。 功能: 将<驱动器号>指定的盘上,从<起始逻辑扇区>起,共 n 个逻辑扇区上的所有字节顺 序读入指定内存地址开始的一片连续单元。当 L 后的参数缺省时,必须在 L 之前由 N 命令 指定(或进入 DEBUG 时一并指出)所读驱动器文件名。此时 L 执行后将该文件装入内存。 例如:-N EXAMPLE <Enter> -L <Enter> 将当前驱动器上的 EXAMPLE 文件装入 CS:100 起始的一片内存单元。 10. 内存搬家命令 M 格式: M <源地址范围> <目标起始地址> 其中源及目标地址若仅输入偏移量,则隐含相对 DS。 功能:把<源地址范围>中的内容顺序搬至<目标起始地址>起的一片连续单元。 例如:-M CS:100 110 600 把从 CS:100 起至 CS:110 止 17 个字节搬至 DS:600 至 DS:610 的一片单元。 * 11. 命名待读/写文件命令 N 格式: N <文件名说明>