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

405 lines
6.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 附录二调试程序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命令单步执行程序观察程序执行过程。