6.3 KiB
附录二:调试程序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 NC,CS、DS、ES指向同一段,IP=0000,SS指向可用空间的底部,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
四、练习
- 使用DEBUG的R命令查看和修改寄存器内容。
- 使用DEBUG的D命令查看内存中的数据。
- 使用DEBUG的E命令修改内存单元。
- 使用DEBUG的A命令输入汇编指令并用U命令反汇编验证。
- 使用DEBUG的T命令单步执行程序,观察程序执行过程。