Files
2026-06-25 00:09:09 +08:00

6.3 KiB
Raw Permalink Blame History

附录二调试程序DEBUG

一、DEBUG的主要命令

DEBUG是为汇编语言程序员设计的一个调试工具具有各种调试功能。用户可以在DEBUG中直接输入命令来观察、修改寄存器和内存的内容跟踪指令的执行过程等。

1. 显示和修改寄存器命令R

1显示寄存器内容

在DEBUG提示符"-"下键入:

-r

屏幕显示所有寄存器的内容和下一条要执行的指令。

2显示和修改寄存器

在DEBUG提示符下键入

-r ax

系统响应:

AX 0000

冒号后可以输入新的值,例如输入:

:1ff

按回车则AX的内容被修改为01FF。

3显示和修改标志位

在DEBUG提示符下键入

-rf

系统响应:

NV UP EI PL NZ NA PO NC

冒号后可以输入新的标志位值,例如输入:

:NV

表示将标志设置为NV无溢出上升沿允许中断正数无辅助进位奇偶校验为奇

2. 显示存储单元命令D

1显示内存某指定范围的内容

格式:

-d 地址范围

例如:

-d 100 10F

表示显示从地址100H到10FH的内容。

2显示从上一个D命令结束后地址开始的内容

格式:

-d

3显示特定段的内容

例如:

-d ds:100

表示显示数据段中从偏移地址100H开始的128个字节的内容。

3. 修改存储单元命令E

1写入单字节数据

格式:

-e 地址 数据列表

例如:

-e 100 41 42 43

表示从地址100H开始写入41H、42H、43H三个字节。

2逐个修改存储单元

格式:

-e 地址

例如:

-e 100

系统响应:

100 41
_

此时可以输入新值或按空格跳过。例如输入:

100 41.-42 43 44

表示在地址100H写入41H地址101H写入42H地址102H写入43H地址103H写入44H。

4. 检查和修改寄存器命令R

1显示和修改寄存器

在DEBUG提示符下键入

-r 寄存器名

例如:

-r ax

系统显示AX当前值等待输入新值。

2显示和修改标志位

-rf

系统显示当前标志位状态,等待输入新值。

5. 填充存储单元命令F

格式:

-f 地址范围 数据列表

例如:

-f 100 104 41 42 43 44 45

表示从地址100H到104H的5个字节分别写入41H到45H。

6. 移动存储单元内容命令M

格式:

-m 源地址范围 目标地址

例如:

-m 100 10F 300

表示将地址100H到10FH的内容移动到300H开始的区域。

7. 填充存储单元命令F

格式:

-f 地址范围 数据

例如:

-f 100 104 'ABC'

表示从地址100H开始连续5个字节填入字符'A'、'B'、'C'、'A'、'B'。

8. 十六进制算术运算命令H

格式:

-h 操作数1 操作数2

例如:

-h 10 8

系统显示0018 0008

9. 端口输入命令I

格式:

-i 端口地址

例如:

-i 3F8

表示从端口3F8H读取并显示一个字节。

10. 端口输出命令O

格式:

-o 端口地址 数据

例如:

-o 3F8 4F

表示向端口3F8H输出数据4FH。

11. 执行程序命令G

1运行程序到指定地址

格式:

-g =地址 [断点列表]

例如:

-g =100

表示从地址100H开始执行程序。

2设置断点运行

格式:

-g =起始地址 断点1 断点2 ...

例如:

-g =100 10A 120

表示从100H开始执行在10AH和120H处设置断点。

12. 跟踪命令T

1单条指令跟踪

格式:

-t [=地址]

例如:

-t

从当前CS:IP指向的指令开始执行一条指令显示执行后各寄存器的状态。

2从指定地址开始跟踪

-t =100

从CS:100H处开始单步执行。

13. 汇编命令A

格式:

-a [地址]

例如:

-a 100

表示从地址100H开始输入汇编指令可以逐条输入按回车结束输入。

14. 反汇编命令U

1反汇编指定地址范围

格式:

-u [地址范围]

例如:

-u 100 10F

表示将地址100H到10FH的内容反汇编。

2反汇编指定地址开始的指令

格式:

-u [地址]

例如:

-u 100

从地址100H开始反汇编20H条指令。

15. 显示内存单元命令D

格式:

-d [地址]

例如:

-d 100

显示从偏移地址100H开始的128个字节。

二、DEBUG命令详解

1. 启动DEBUG

在DOS提示符下键入

C:\>DEBUG [文件名]

如果未指定文件名DEBUG将所有寄存器初始化为0000标志位初始化为NV UP DI PL NZ NA PO NCCS、DS、ES指向同一段IP=0000SS指向可用空间的底部SP指向段顶部。

2. 退出DEBUG

在DEBUG提示符下键入

-q

3. 常用DEBUG命令一览

命令 功能
R 显示或修改寄存器内容
D 显示内存单元内容
E 修改内存单元内容
F 填充内存单元
M 移动内存块
H 十六进制运算
I 端口输入
O 端口输出
G 执行程序
T 跟踪执行
A 汇编指令
U 反汇编
Q 退出DEBUG

三、使用DEBUG的实例

例1显示和修改寄存器

C:\>DEBUG
- r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0D3E ES=0D3E SS=0D3E CS=0D3E IP=0000 NV UP DI PL NZ NA PO NC
- r ax
AX 0000
:1234
- r
AX=1234 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0D3E ES=0D3E SS=0D3E CS=0D3E IP=0000 NV UP DI PL NZ NA PO NC

例2显示内存内容

- d 100 10F
0D3E:0100 41 42 43 44 45 46 47 48-49 4A 4B 4C 4D 4E 4F 50 51
0D3E:0110 52 53 54 55 56 57 58 59-5A 5B 5C 5D 5E 5F 60 61 62

例3修改内存内容

- e 100
0D3E:0100 41.61

将地址100H的内容从41H修改为61H。

例4反汇编

- u 100 10F
0D3E:0100 B86102       MOV AX,0261
0D3E:0103 8ED8         MOV DS,AX
0D3E:0105 8EC0         MOV ES,AX
0D3E:0107 BEC402       MOV SI,02C4

四、练习

  1. 使用DEBUG的R命令查看和修改寄存器内容。
  2. 使用DEBUG的D命令查看内存中的数据。
  3. 使用DEBUG的E命令修改内存单元。
  4. 使用DEBUG的A命令输入汇编指令并用U命令反汇编验证。
  5. 使用DEBUG的T命令单步执行程序观察程序执行过程。