调 试 程 序 DEBUG
1封面调 试 程 序 DEBUG
2调试程序 DEBUG的使用调 试 程 序 D E B U G 的 使 用
DEBUG.EXE是 DOS提供的用于调试可执行程序的工具软件,是汇编语言程序设计中常用的调试工具。在 DEBUG环境下,不但可以调试经汇编、连接后生成的可执行程序,也可以编写简单的程序。
调 试 程 序 DEBUG
3启动 DEBUG程序
§ 1.启动 DEBUG程序
①在 DOS提示符下键入,DEBUG ↙( 表示回车 )
Debug执行,屏幕显示提示符,-,,说明计算机当前处于 DEBUG的管理之下,可接受、并执行
DEBUG命令。
②在 DOS提示符下键入,DEBUG [路径\ ]文件名 ↙
DEBUG执行,并将指定文件装入内存,供调试。
如不指定被调试程序,DEBUG设置所有段寄存器的值相同,并指向最低的、可用的段地址; SP指向本段的尾部; IP指向本段的 0100H单元;其它通用寄存器和所有状态标志清 0。
调 试 程 序 DEBUG
4启动 DEBUG2
如带入的被调试程序扩展名不是,EXE,则 BX,CX
包含被调试文件长度(字节数,BX为高位),其他同上。 (带入,COM程序同此 )
如带入的被调试程序扩展名是,EXE,则需要重新定位。 DS=ES指向当前最低的、可用的段地址( PSP
的首字节); CS:IP和 SS:SP根据被调试程序确定,
分别指向代码段和堆栈段; BX.CX为文件长度,其它通用寄存器和状态标志清 0。
演示,DEBUG的两种启动方法调 试 程 序 DEBUG
5命令格式
§ 2 DEBUG命令和参数的格式
1.命令格式 命令字母 [参数 ]
字母不分大小写 ;
只使用 16进制数,不加 H;
分割符只在两个数值之间是必须的,命令和参数之间可有可无;
键入回车键执行命令,Ctrl+Break或 Ctrl+C
中止命令的执行;
如命令不符合 DEBUG的规则,则提示,error”
并使用,^,指示错误位置。
调 试 程 序 DEBUG
6参数格式 1
2.参数格式
①表示地址 (逻辑地址 ):
段地址,偏移地址 D0400:2500 D10ac:0
Dds:04 Dcs:100
偏移地址 D2505 D100 ; DEBUG认为输入的是偏移地址,段地址采用默认的段寄存器,不同的命令默认不同的段寄存器,例如汇编命令默认 CS,
显示数据命令默认 DS。
既不送段地址,也不送偏移地址,段地址采用默认的段寄存器,偏移地址采用当前值。
只送段地址,省略偏移地址,非法。
如 DDS,或 D0400:
调 试 程 序 DEBUG
7参数格式 2
② 表示范围
开始地址 结束地址如,D DS:0 50”,“D2AC0:100 200”,“D100 120”
注意:结束地址不能带段地址
开始地址 L 字节长度如,D DS:0 L 10”,“D100L20”
调 试 程 序 DEBUG
8命令索引命 令 索 引
D命令 E命令 F命令 R命令 A命令
U命令 G命令 T命令 P命令 Q命令
N命令 L命令 W命令 C命令 H命令
S命令 I命令 O命令 M命令调 试 程 序 DEBUG
9D命令
§ 3.DEBUG命令
1.显示命令 D
① D [地址 ]
② D [范围 ];如不指定范围,一次显示 8行 × 16个字节。
- D ;默认段寄存器为 DS,当前偏移地址
- D DS:100 /- D CS:200
- D 200:100
- D 200; 200为偏移地址,默认段寄存器 DS
- D DS:100 110/ - D 100 L 10
调 试 程 序 DEBUG
10E命令
2.修改命令 E
① E 地址 ;从指定地址开始,修改(或连续修改)存储单元内容。 DEBUG首先显示指定单元内容,
如要修改,可输入新数据;空格键显示下一个单元内容并可修改,减号键显示上一个单元内容并可修改;如不修改,可直接按空格键或减号键;回车键结束命令。
② E 地址 数据表;从指定的地址开始用数据表给定的数据修改存储单元。
- E DS:100 F3?AB? 8D。
调 试 程 序 DEBUG
11F命令
3.添充命令 F
F 范围 数据表;
将数据表写入指定范围的存储单元;数据个数多,忽略多出的数据,个数少,则重复使用数据表。
- F DS:0 L5 01,02,03,04,05
- F DS:0 L5 01 02 03 04 05(空格分隔)
- F DS:0 L5 FF ; 5个字节重复使用 FF
注意和 E命令的区别,E 地址 数据表起始地址,不是范围调 试 程 序 DEBUG
12R命令
4.显示修改寄存器命令 R
① R;★显示所有寄存器和标志位状态;
★显示当前 CS,IP指向的指令。
显示标志时使用的符号:
标志 标志 =1 标志 =0
OF OV NV
DF DN UP
IF EI DI
SF NG PL
ZF ZR NZ
AF AC NA
PF PE PO
CF CY NC
调 试 程 序 DEBUG
13A命令
② R 寄存器名;显示并修改指定的寄存器。
RAX ; RIP; RF等
5.汇编命令 A
A [地址 ];从指定的地址开始输入符号指令;
如省略地址,则接着上一个 A命令的最后一个单元开始;若第一次使用 A命令省略地址,则从当前 CS:IP
开始(通常是 CS,100)。
注释,① 在 DEBUG下编写简单程序即使用 A命令。
②每条指令后要按回车。
③不输入指令按回车,或按 Ctrl+C结束汇编。
④支持所有 8086符号硬指令,伪指令只支持 DB、
DW,不支持各类符号名。
调 试 程 序 DEBUG
14U命令
6.反汇编命令 U
① U [地址 ];从指定地址开始反汇编 32个字节的机器指令;省略地址时,则接着上一个 U命令的最后一个单元开始;若第一次使用 U命令省略地址,则从当前 CS:IP开始(通常是 CS,100)。
② U 范围;对指定范围的单元进行反汇编。
- U
- U100
- U100L10
调 试 程 序 DEBUG
15G命令
7.运行程序命令 G
① G;从 CS:IP指向的指令开始执行程序,直到程序结束或遇到 INT 3。
② G=地址;从指定地址开始执行程序,直到程序结束或遇到 INT 3。
③ G 断点 1[,断点 2,… 断点 10];从 CS:IP指向的指令开始执行程序,直到遇到断点。
④ G=地址 断点 1[,断点 2,… 断点 10]
- G ;从 CS:IP指向的指令开始执行程序。
- G=100 ;从指定地址开始执行程序。
- G=100 105 110 120
调 试 程 序 DEBUG
16G命令 2
注 释:
1)最多可设置 10个断点。
2)断点必须设置在一条指令的首字节。
3)如设置了多个断点,程序在第一个断点停下后,显示寄存器、标志及下一条要执行的指令,再次输入 G命令,程序继续往下执行,直到下一个断点或程序结束。
4)程序如有错误,执行时可能造成死机。
调 试 程 序 DEBUG
17T命令
8.跟踪命令(单步执行命令) T
① T;从当前 IP开始执行一条指令。
② T 数值;从当前 IP开始执行多条指令。
② T =地址;
③ T =地址 数值;
- T
- T5 / - T=100 5
必须用分割符调 试 程 序 DEBUG
18P,Q命令
9.跟踪执行并跳过子程序命令 P
P [=地址 ] [数值 ];类似 T命令,但跳过子程序和中断服务程序。
10.退出 DEBUG命令 Q
Q;返回 DOS环境。
- Q
调 试 程 序 DEBUG
19N命令
11.命名命令 N
N 文件标示符;指定文件,以便用 W命令在磁盘上生成该文件,或者用 L命令从磁盘装入该文件。
- N MY_PRO.COM
写盘:在当前盘当前目录生成指定文件。
读盘:在当前盘当前目录读取指定文件。
- N A:\ USER \ MY_PRO.COM
调 试 程 序 DEBUG
20L命令
12.装入命令 L
① L [地址 ];装入 N命令指定的文件,默认的内存地址为 CS,100。
- N MY_PRO.COM
- L
② L 地址 驱动器号 扇区号 扇区数;将某驱动器的若干扇区(最多 80H个)装入内存; 0=A,1=B,
2=C…… ;默认的段地址为 CS。
- L DS:200 2 0 1
调 试 程 序 DEBUG
21W命令
13.写盘命令 W
① W [地址 ];将指定地址开始的内存数据写入磁盘,生成 N命令指定的文件;默认的内存地址为
CS:100;写盘的字节数由 BX(高位字 )和 CX(低位字 )决定,可执行程序写盘时,文件扩展名应指定,COM。
- N MY_PRO.COM
- W
② W 地址 驱动器号 扇区号 扇区数;将内存数据写入磁盘的若干扇区(最多 80H);默认的段地址为 CS。
- W DS:0 2 0 1
注释:写磁盘扇区要慎用。
调 试 程 序 DEBUG
22其他命令 1
14.其他命令
* 比较命令 C
C 范围 地址;将指定范围内的内容与以指定地址为起点的内容相比较。
* 16进制数计算命令 H
H 数 1,数 2( H 数 1 数 2);同时计算两个数字的和与差。
* 查找命令 S
S 范围 数据;在指定范围内查找指定数据。
调 试 程 序 DEBUG
23其它命令 2
* 输入命令 I
I 端口地址;输入一个字节并显示。
* 输出命令 O
O 端口地址 字节数据;输出到指定的端口。
* 传送命令 M
M 范围 地址;将指定范围的内容传送到以指定地址为起点的存储单元。
1封面调 试 程 序 DEBUG
2调试程序 DEBUG的使用调 试 程 序 D E B U G 的 使 用
DEBUG.EXE是 DOS提供的用于调试可执行程序的工具软件,是汇编语言程序设计中常用的调试工具。在 DEBUG环境下,不但可以调试经汇编、连接后生成的可执行程序,也可以编写简单的程序。
调 试 程 序 DEBUG
3启动 DEBUG程序
§ 1.启动 DEBUG程序
①在 DOS提示符下键入,DEBUG ↙( 表示回车 )
Debug执行,屏幕显示提示符,-,,说明计算机当前处于 DEBUG的管理之下,可接受、并执行
DEBUG命令。
②在 DOS提示符下键入,DEBUG [路径\ ]文件名 ↙
DEBUG执行,并将指定文件装入内存,供调试。
如不指定被调试程序,DEBUG设置所有段寄存器的值相同,并指向最低的、可用的段地址; SP指向本段的尾部; IP指向本段的 0100H单元;其它通用寄存器和所有状态标志清 0。
调 试 程 序 DEBUG
4启动 DEBUG2
如带入的被调试程序扩展名不是,EXE,则 BX,CX
包含被调试文件长度(字节数,BX为高位),其他同上。 (带入,COM程序同此 )
如带入的被调试程序扩展名是,EXE,则需要重新定位。 DS=ES指向当前最低的、可用的段地址( PSP
的首字节); CS:IP和 SS:SP根据被调试程序确定,
分别指向代码段和堆栈段; BX.CX为文件长度,其它通用寄存器和状态标志清 0。
演示,DEBUG的两种启动方法调 试 程 序 DEBUG
5命令格式
§ 2 DEBUG命令和参数的格式
1.命令格式 命令字母 [参数 ]
字母不分大小写 ;
只使用 16进制数,不加 H;
分割符只在两个数值之间是必须的,命令和参数之间可有可无;
键入回车键执行命令,Ctrl+Break或 Ctrl+C
中止命令的执行;
如命令不符合 DEBUG的规则,则提示,error”
并使用,^,指示错误位置。
调 试 程 序 DEBUG
6参数格式 1
2.参数格式
①表示地址 (逻辑地址 ):
段地址,偏移地址 D0400:2500 D10ac:0
Dds:04 Dcs:100
偏移地址 D2505 D100 ; DEBUG认为输入的是偏移地址,段地址采用默认的段寄存器,不同的命令默认不同的段寄存器,例如汇编命令默认 CS,
显示数据命令默认 DS。
既不送段地址,也不送偏移地址,段地址采用默认的段寄存器,偏移地址采用当前值。
只送段地址,省略偏移地址,非法。
如 DDS,或 D0400:
调 试 程 序 DEBUG
7参数格式 2
② 表示范围
开始地址 结束地址如,D DS:0 50”,“D2AC0:100 200”,“D100 120”
注意:结束地址不能带段地址
开始地址 L 字节长度如,D DS:0 L 10”,“D100L20”
调 试 程 序 DEBUG
8命令索引命 令 索 引
D命令 E命令 F命令 R命令 A命令
U命令 G命令 T命令 P命令 Q命令
N命令 L命令 W命令 C命令 H命令
S命令 I命令 O命令 M命令调 试 程 序 DEBUG
9D命令
§ 3.DEBUG命令
1.显示命令 D
① D [地址 ]
② D [范围 ];如不指定范围,一次显示 8行 × 16个字节。
- D ;默认段寄存器为 DS,当前偏移地址
- D DS:100 /- D CS:200
- D 200:100
- D 200; 200为偏移地址,默认段寄存器 DS
- D DS:100 110/ - D 100 L 10
调 试 程 序 DEBUG
10E命令
2.修改命令 E
① E 地址 ;从指定地址开始,修改(或连续修改)存储单元内容。 DEBUG首先显示指定单元内容,
如要修改,可输入新数据;空格键显示下一个单元内容并可修改,减号键显示上一个单元内容并可修改;如不修改,可直接按空格键或减号键;回车键结束命令。
② E 地址 数据表;从指定的地址开始用数据表给定的数据修改存储单元。
- E DS:100 F3?AB? 8D。
调 试 程 序 DEBUG
11F命令
3.添充命令 F
F 范围 数据表;
将数据表写入指定范围的存储单元;数据个数多,忽略多出的数据,个数少,则重复使用数据表。
- F DS:0 L5 01,02,03,04,05
- F DS:0 L5 01 02 03 04 05(空格分隔)
- F DS:0 L5 FF ; 5个字节重复使用 FF
注意和 E命令的区别,E 地址 数据表起始地址,不是范围调 试 程 序 DEBUG
12R命令
4.显示修改寄存器命令 R
① R;★显示所有寄存器和标志位状态;
★显示当前 CS,IP指向的指令。
显示标志时使用的符号:
标志 标志 =1 标志 =0
OF OV NV
DF DN UP
IF EI DI
SF NG PL
ZF ZR NZ
AF AC NA
PF PE PO
CF CY NC
调 试 程 序 DEBUG
13A命令
② R 寄存器名;显示并修改指定的寄存器。
RAX ; RIP; RF等
5.汇编命令 A
A [地址 ];从指定的地址开始输入符号指令;
如省略地址,则接着上一个 A命令的最后一个单元开始;若第一次使用 A命令省略地址,则从当前 CS:IP
开始(通常是 CS,100)。
注释,① 在 DEBUG下编写简单程序即使用 A命令。
②每条指令后要按回车。
③不输入指令按回车,或按 Ctrl+C结束汇编。
④支持所有 8086符号硬指令,伪指令只支持 DB、
DW,不支持各类符号名。
调 试 程 序 DEBUG
14U命令
6.反汇编命令 U
① U [地址 ];从指定地址开始反汇编 32个字节的机器指令;省略地址时,则接着上一个 U命令的最后一个单元开始;若第一次使用 U命令省略地址,则从当前 CS:IP开始(通常是 CS,100)。
② U 范围;对指定范围的单元进行反汇编。
- U
- U100
- U100L10
调 试 程 序 DEBUG
15G命令
7.运行程序命令 G
① G;从 CS:IP指向的指令开始执行程序,直到程序结束或遇到 INT 3。
② G=地址;从指定地址开始执行程序,直到程序结束或遇到 INT 3。
③ G 断点 1[,断点 2,… 断点 10];从 CS:IP指向的指令开始执行程序,直到遇到断点。
④ G=地址 断点 1[,断点 2,… 断点 10]
- G ;从 CS:IP指向的指令开始执行程序。
- G=100 ;从指定地址开始执行程序。
- G=100 105 110 120
调 试 程 序 DEBUG
16G命令 2
注 释:
1)最多可设置 10个断点。
2)断点必须设置在一条指令的首字节。
3)如设置了多个断点,程序在第一个断点停下后,显示寄存器、标志及下一条要执行的指令,再次输入 G命令,程序继续往下执行,直到下一个断点或程序结束。
4)程序如有错误,执行时可能造成死机。
调 试 程 序 DEBUG
17T命令
8.跟踪命令(单步执行命令) T
① T;从当前 IP开始执行一条指令。
② T 数值;从当前 IP开始执行多条指令。
② T =地址;
③ T =地址 数值;
- T
- T5 / - T=100 5
必须用分割符调 试 程 序 DEBUG
18P,Q命令
9.跟踪执行并跳过子程序命令 P
P [=地址 ] [数值 ];类似 T命令,但跳过子程序和中断服务程序。
10.退出 DEBUG命令 Q
Q;返回 DOS环境。
- Q
调 试 程 序 DEBUG
19N命令
11.命名命令 N
N 文件标示符;指定文件,以便用 W命令在磁盘上生成该文件,或者用 L命令从磁盘装入该文件。
- N MY_PRO.COM
写盘:在当前盘当前目录生成指定文件。
读盘:在当前盘当前目录读取指定文件。
- N A:\ USER \ MY_PRO.COM
调 试 程 序 DEBUG
20L命令
12.装入命令 L
① L [地址 ];装入 N命令指定的文件,默认的内存地址为 CS,100。
- N MY_PRO.COM
- L
② L 地址 驱动器号 扇区号 扇区数;将某驱动器的若干扇区(最多 80H个)装入内存; 0=A,1=B,
2=C…… ;默认的段地址为 CS。
- L DS:200 2 0 1
调 试 程 序 DEBUG
21W命令
13.写盘命令 W
① W [地址 ];将指定地址开始的内存数据写入磁盘,生成 N命令指定的文件;默认的内存地址为
CS:100;写盘的字节数由 BX(高位字 )和 CX(低位字 )决定,可执行程序写盘时,文件扩展名应指定,COM。
- N MY_PRO.COM
- W
② W 地址 驱动器号 扇区号 扇区数;将内存数据写入磁盘的若干扇区(最多 80H);默认的段地址为 CS。
- W DS:0 2 0 1
注释:写磁盘扇区要慎用。
调 试 程 序 DEBUG
22其他命令 1
14.其他命令
* 比较命令 C
C 范围 地址;将指定范围内的内容与以指定地址为起点的内容相比较。
* 16进制数计算命令 H
H 数 1,数 2( H 数 1 数 2);同时计算两个数字的和与差。
* 查找命令 S
S 范围 数据;在指定范围内查找指定数据。
调 试 程 序 DEBUG
23其它命令 2
* 输入命令 I
I 端口地址;输入一个字节并显示。
* 输出命令 O
O 端口地址 字节数据;输出到指定的端口。
* 传送命令 M
M 范围 地址;将指定范围的内容传送到以指定地址为起点的存储单元。