
常用DEBUG命令的功能及使用举例 第一节DEBUG的主要用途及DEBUG的调用 DEBUG是为汇编语言设计的一种调试工具,它通过单步执行、设置断点等方式为剂 编语言程序员提供了非常有效的程序调试手段,DEUG可以直接用来检查和修改内存单元 装入、存储及启动运行程序、检查及修改寄存器,也就是说DBUG可深入到计算机的内部, 可使用户更紧密地与计算机中真正进行的工作相联系。不仅如此,对汇编语言初学者来说, DBLG也是练习使用汇编指令的一种有效工具。初学者可以直接在DBG环境下执行汇编 指令。然而,在DEBG下运行汇编语言源程序也受到了一些限制,它不宜汇编较长的程序, 不便于分块程序设计,不便于形成以O5外部命令形式构成的,XE文件,不能使用浮动 地址,也不能使用ASM和MASM提供的绝大多数伪指令。 在DOS系统中,DEBUG是以DOS外部命令文件形式提供给用户的,名为DEBUG.EXE。 命令文件DEBUG.EXE一般存放在D0S子目录下,因此调用DEBG时,只需在DOS提示符下 键入 DEBUG[:][][[.][][] 例如: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 [:][][[.]][][] 例如: 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 *6.执行命令G 格式:G[=[,] 上式等价于 (1)G (2)G= (3)G=, 功能:执行内存中的指令序列 注:()从CS:IP所指处开始执行 (2)从指定地址开始执行 (③)从指定地址开始执行,到断点自动停止。 7.十大进制算求运算指令H 格式:H 功能:求十六进制数和的和与差并显示结果 8.端口输入命令I
上式等价于: (1) E (2) E 其中是以逗号分隔的十六进制数,或用’或”括起来的字符串,或 者是二者的组合。 功能: (1)不断显示地址,可连续键入修改内容,直至新地址出现后键入回车 Enter 为止。 (2)将逐一写入由开始的一片单元。 5. 填充内存命令 F 格式: F 功能: 将单元内容表中的值逐个填入指定范围,单元内容表中内容用完后重复使用。 例如: -F 5BC:200 L 10 B2,‘XYZ’,3C * 6. 执行命令 G 格式: G [=[,]] 上式等价于: (1) G (2) G= (3) G=, 功能: 执行内存中的指令序列 注: (1)从 CS:IP 所指处开始执行 (2)从指定地址开始执行 (3)从指定地址开始执行,到断点自动停止。 7. 十六进制算求运算指令 H 格式: H 功能: 求十六进制数和的和与差并显示结果。 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 -L 将当前驱动器上的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 其中的缺省值为 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 -L 将当前驱动器上的 EXAMPLE 文件装入 CS:100 起始的一片内存单元。 10. 内存搬家命令 M 格式: M 其中源及目标地址若仅输入偏移量,则隐含相对 DS。 功能:把中的内容顺序搬至起的一片连续单元。 例如:-M CS:100 110 600 把从 CS:100 起至 CS:110 止 17 个字节搬至 DS:600 至 DS:610 的一片单元。 * 11. 命名待读/写文件命令 N 格式: N

功能:为L/臂命令指定特装入/写盘文件 注:其它形式参考DOS手册 12.端口输出命令0 格式:0 功能:将该从指定(端口地址>输出。 例如:-02那4 将4阳从端口2F阳输出 *13.结束DEBUG返回D0S命令0 格式:Q 功能:返回DOS提示符下 *14.显示修改寄存器命令R 格式:R[] 上式等价于 (1)R (2)R 功能:()显示当前所有寄存器内容,状态标志及将要执行的下一指令的地址,代码及汇 编语句形式。其中对状态标志1AG以每位的形式显示,详见表5-1。 表5-1状态标志显示形式 标志位溢出OF方向D吓中断F符号SF零ZF铺助5奇偶P℉进位C下 状态有/无减/增开/关负/正零/非有/无偶/奇有/无 显示N/WN/UPEI/DIG/PL2R/zAC/ME/POY/C (②)显示指定寄存器内容 例如:-RA -R F 15.搜素指定内存命令S
功能: 为 L/W 命令指定待装入/写盘文件 注: 其它形式参考 DOS 手册 12. 端口输出命令 O 格式: O 功能:将该从指定输出。 例如:-O 2F 4F 将 4FH 从端口 2FH 输出 * 13. 结束 DEBUG 返回 DOS 命令 Q 格式:Q 功能:返回 DOS 提示符下 * 14. 显示修改寄存器命令 R 格式: R [] 上式等价于: (1) R (2) R 功能: (1)显示当前所有寄存器内容,状态标志及将要执行的下一指令的地址,代码及汇 编语句形式。其中对状态标志 FLAG 以每位的形式显示,详见表 5-1。 表 5-1 状态标志显示形式 标志位 溢出 OF 方向 DF 中断 IF 符号 SF 零 ZF 辅助 AF 奇偶 PF 进位 CF 状 态 有/无 减/增 开/关 负/正 零/非 有/无 偶/奇 有/无 显 示 OV/NV DN/UP EI/DI NG/PL ZR/NZ AC/NA PE/PO CY/NC (2)显示指定寄存器内容 例如:-R AX -R F 15. 搜索指定内存命令 S

格式:S〈地址范围> 功能:在指定范围搜索表中内容,找到后显示表中元素所在地址 例如:-SCS:10011041 KEnter> 显示:04BA:0104 04BA:010D 表示在位移100H至110H间的上述两处有41H。又如: -SC3:100L1141“AB”E 表示在当前代码段位移100至111H处寻找连续4个字节内容为41L、41H、42、0的 起始单元地址。 *16.执行并显示系统环境命令T 格式:T[=(地址>】[指定的若干条命令。其中的缺省值是当前 IP值,的缺省值是一条。 例如:-T? 执行当前指令并显示状态 -T 10 从当前指令始执行10州条 指令 *17.反汇编命令U 格式:U[/】 上式等价于: ()U (2)U (3)U 功能:将指定范围内的代码以汇编语句形式显示,同时显示地址及代码。注意,反汇编时 定确认指令的起始地址后再作,否则将得不到正确结果。地址及范围的缺省值是上次 指令后下一地址的值。这样可以连续反汇编
格式: S 功能:在指定范围搜索表中内容,找到后显示表中元素所在地址 例如:-S CS:100 110 41 显示:04BA:0104 04BA:010D 表示在位移 100H 至 110H 间的上述两处有 41H。又如: -S C3:100 L 11 41“AB”E 表示在当前代码段位移 100H 至 111H 处寻找连续 4 个字节内容为 41H、41H、42H、0EH 的 起始单元地址。 * 16. 执行并显示系统环境命令 T 格式:T [=] [] 功能:执行由指定地址起始的、由指定的若干条命令。其中的缺省值是当前 IP 值,的缺省值是一条。 例如:-T 执行当前指令并显示状态 -T 10 从当前指令始执行 10H 条 指令 * 17. 反汇编命令 U 格式:U [/] 上式等价于: (1) U (2) U (3) U 功能:将指定范围内的代码以汇编语句形式显示,同时显示地址及代码。注意,反汇编时 一定确认指令的起始地址后再作,否则将得不到正确结果。地址及范围的缺省值是上次 U 指令后下一地址的值。这样可以连续反汇编

*18.写盘命令7 格式:罪〈盘号>〈起始逻辑扇区> 功能:与L命令不同的地方是将内存从起始的一片单元内容写入指定扇区。只有W 而没有参数时,与N命令配合使用将文件写盘。 注:要求读者对其中打"*”的EBUG命令必须能熟练使用。 第三节在DEBUG环境下执行汇编指令 本节从几个典型例子出发,通过上机实习,引导读者学会使用DBG调试程序运 行汇编语言程序,以便读者在以后的学习中能够有一个熟练的调试和运行手段。 在进入DBUG的提示符-'之后,用户可以通过DEBG的命令输入汇编源程序 并用相应命令将其汇编成机器语言程序:然后调试并运行该程序。 例1在DEBUG下运行如下程序。 MOV DL,33H :字符3的ASCII码送DL MOV AH,2 :使用D0S的2号功能调用 INT 21H :进入功能调用,输出3” INT 20H :BIOS中断服务程序,正常结束。 该程序运行结果是在显示器上输出一个字符‘3”。如果要输出其它字符,请改变 程序中‘33册'为相应字符的ASCI码。 运行步骤: (I)进入DEBG 设DEBUG.EXE位于C盘DOS子目录,进入DOS后键入DEBUG,即 C:\DOS>DEBUG 屏幕显示: -号是进入DEBG的提示符,在该提示符下可键入任意DEBG命令。现在用A命 令送程序如下
* 18. 写盘命令 W 格式:W 功能:与 L 命令不同的地方是将内存从起始的一片单元内容写入指定扇区。只有 W 而没有参数时,与 N 命令配合使用将文件写盘。 注:要求读者对其中打"*"的 DEBUG 命令必须能熟练使用。 第三节 在 DEBUG 环境下执行汇编指令 本节从几个典型例子出发,通过上机实习,引导读者学会使用 DEBUG 调试程序运 行汇编语言程序,以便读者在以后的学习中能够有一个熟练的调试和运行手段。 在进入 DEBUG 的提示符‘-’之后,用户可以通过 DEBUG 的命令输入汇编源程序, 并用相应命令将其汇编成机器语言程序;然后调试并运行该程序。 例 1 在 DEBUG 下运行如下程序。 MOV DL,33H ;字符 3 的 ASCII 码送 DL MOV AH,2 ;使用 DOS 的 2 号功能调用 INT 21H ;进入功能调用,输出‘3’ INT 20H ;BIOS 中断服务程序,正常结束。 该程序运行结果是在显示器上输出一个字符‘3’。如果要输出其它字符,请改变 程序中‘33H’为相应字符的 ASCII 码。 运行步骤: (1)进入 DEBUG 设 DEBUG.EXE 位于 C 盘 DOS 子目录,进入 DOS 后键入 DEBUG ,即 C:\DOS>DEBUG 屏幕显示: - ‘-’号是进入 DEBUG 的提示符,在该提示符下可键入任意 DEBUG 命令。现在用 A 命 令送程序如下:

(②)送程序并汇编 -A 100 169C:0100 MOV DL,33 169C:0102 MOV AH,2 169C:0104 INT 21 169C:0106 INT 20 169C:0108 -(Enter> 至此程序己送完,汇编成机器指令,顺序存放于CS段100州起始的8个存储单元。 如果在汇编后想看一下机器指令是什么样子的话,方法之一是可以用反汇编命令 作如下操作: (3③)反汇 -U100108 169C:0100B233 MOV DL,33 169C:0102B402 MOV AH,02 169C:0104CD21 INT 21 169C:0106CD20 INT 20 169C:0108 右边是汇编指令,中间是该汇编指令的机器码,左边是存放该条指令的内存单元地址 (4)运行程序 -G 3
(2)送程序并汇编 -A 100 169C:0100 MOV DL,33 169C:0102 MOV AH,2 169C:0104 INT 21 169C:0106 INT 20 169C:0108 - 至此程序已送完,汇编成机器指令,顺序存放于 CS 段 100H 起始的 8 个存储单元。 如果在汇编后想看一下机器指令是什么样子的话,方法之一是可以用反汇编命令 U 作如下操作: (3)反汇 编 -U 100 108 169C:0100 B233 MOV DL,33 169C:0102 B402 MOV AH,02 169C:0104 CD21 INT 21 169C:0106 CD20 INT 20 169C:0108 - 右边是汇编指令,中间是该汇编指令的机器码,左边是存放该条指令的内存单元地址。 (4)运行程序 -G 3

Program terminated normally (5)写C0M文件 -R BX Bx0000 : -R CX CX0000 :A -N EXCOM.COM -W 其中(B)*10000+(CX)用于指定所写的字节数,(Bx)为该数的高16位,(Cx)为该 数的低16位。因此,上面的过程实际上是要将A个字节写入文件EXCOM.COM。 (6)送机器指令程序 -E 200 B2 33 B4 02 CD 21 CD 20 ()显示内存 -D200208 169C:0200B233B402CD21CD20-61 ·3。··!··a (⑧)执行机器指令程序 -G=200 3 Program terminated normally
Program terminated normally - (5)写 COM 文件 -R BX BX 0000 : -R CX CX 0000 :A -N EXCOM.COM -W - 其中(BX)*10000H+(CX)用于指定所写的字节数,(BX)为该数的高 16 位,(CX)为该 数的低 16 位。因此,上面的过程实际上是要将 A 个字节写入文件 EXCOM.COM。 (6)送机器指令程序 -E 200 B2 33 B4 02 CD 21 CD 20 - (7)显示内存 -D 200 208 169C:0200 B2 33 B4 02 CD 21 CD 20-61 . 3 . . . ! . . a - (8)执行机器指令程序 -G=200 3 Program terminated normally