9.0 KiB
实验一:DEBUG基础
一、实验名称
DEBUG基础
二、实验目的
- 掌握DEBUG程序的加载方法
- 熟悉DEBUG状态下各种常用命令的使用方法
- 学会使用DEBUG命令进行程序调试
三、实验内容
3.1 基础性实验:DEBUG常用命令练习
(1)DEBUG的加载
DEBUG是为DOS提供的一种调试工具,它不能独立运行,需要在DOS环境下加载运行。
加载方法:在DOS命令提示符下键入:
C:\>DEBUG [程序文件名]
(2)DEBUG常用命令练习
D命令(显示内存)
格式:D [地址] 或 D [范围]
功能:显示指定地址的内存内容
示例:
D 100 ;显示CS:100开始的内存内容
D 100 120 ;显示CS:100到CS:120范围的内容
E命令(修改内存)
格式:E 地址 [数据表]
功能:修改指定地址的内存内容
示例:
E 100 ;逐个修改CS:100开始的内存内容
E 100 'ABCD' ;从CS:100开始写入字符串ABCD
F命令(填充内存)
格式:F 范围 数据表
功能:将数据填充到指定范围的内存
示例:
F 100 110 0 ;将100-110区域填充0
R命令(显示/修改寄存器)
格式:R [寄存器名]
功能:显示或修改寄存器的内容
示例:
R ;显示所有寄存器内容
R AX ;显示并修改AX内容
G命令(执行程序)
格式:G [=起始地址] [断点地址]
功能:运行程序,可设置断点
示例:
G=100 ;从CS:100开始执行
G=100 10A ;从100开始执行,在10A处设置断点
A命令(汇编命令)
格式:A [地址]
功能:在指定地址开始汇编输入指令
示例:
A 100 ;从CS:100开始输入汇编指令
T命令(跟踪执行)
格式:T [=地址] [条数]
功能:单步执行指令
示例:
T ;执行一条指令
T=100 5 ;从100开始执行5条指令
U命令(反汇编)
格式:U [地址] 或 U [范围]
功能:将机器码反汇编为汇编语言
示例:
U 100 ;从100开始反汇编
U 100 120 ;反汇编100-120范围
N命令(命名命令)
格式:N 文件名
功能:给要操作的文件命名
示例:
N FILE.COM ;将FILE.COM作为要操作的文件名
L命令(装入内存)
格式:L [地址 [驱动器 扇区号 扇区数]]
功能:将文件或扇区内容装入内存
示例:
L ;将已命名文件装入CS:100
L 100 1 10 5 ;将A盘5个扇区装入CS:100
W命令(写盘命令)
格式:W [地址 [驱动器 扇区号 扇区数]]
功能:将内存内容写入磁盘
示例:
W ;将CS:100开始的内容写入文件
W 100 1 10 5 ;将CS:100内容写入A盘
Q命令(退出DEBUG)
格式:Q
功能:退出DEBUG,返回DOS
示例:
Q ;退出DEBUG
3.2 加强性实验:DEBUG命令综合练习
【程序要求】
利用DEBUG的A命令,在内存2000:0000处输入以下程序:
MOV AL, [0000]
MOV BL, [0001]
ADD AL, BL
MOV [0002], AL
INT 20
【程序说明】
| 指令 | 功能 |
|---|---|
| MOV AL, [0000] | 将内存地址2000:0000处的字节数据传送到AL寄存器 |
| MOV BL, [0001] | 将内存地址2000:0001处的字节数据传送到BL寄存器 |
| ADD AL, BL | 将AL和BL的内容相加,结果存入AL |
| MOV [0002], AL | 将AL的内容传送到内存地址2000:0002 |
| INT 20 | 终止程序运行,返回DOS |
四、实验步骤
4.1 基础性实验步骤
-
在DOS环境下加载DEBUG程序
C:\>DEBUG - -
使用R命令查看当前寄存器状态
-r -
使用D命令查看内存内容
-d 100 -
使用E命令修改内存数据
-e 100 41 42 43 44 -
使用A命令输入汇编指令
-a 2000:0000 -
使用T命令单步执行程序
-t -
使用G命令运行程序
-g=2000:0000 -
使用U命令查看反汇编结果
-u 2000:0000 -
使用Q命令退出DEBUG
-q
4.2 加强性实验步骤
-
进入DEBUG环境
-
设置段寄存器DS指向2000H
-r ds DS 0000 :2000 -
使用E命令在2000:0000和2000:0001处写入两个数
-e 2000:0000 2000:0000 00.05 2000:0001 00.03 -
使用A命令在2000:0000处输入程序
-a 2000:0000 2000:0000 MOV AL, [0000] 2000:0003 MOV BL, [0001] 2000:0006 ADD AL, BL 2000:0008 MOV [0002], AL 2000:000B INT 20 2000:000D -
使用U命令验证输入的程序
-u 2000:0000 -
使用T命令单步执行程序,观察各寄存器的变化
-
使用D命令查看程序执行后的内存结果
-d 2000:0000 2000:0002 -
程序执行完成后,使用Q命令退出DEBUG
五、程序代码
5.1 基础性实验程序代码
基础性实验主要练习DEBUG的各个命令,不需要编写独立的程序代码。
5.2 加强性实验程序代码(汇编源程序)
; 实验一加强性实验程序
; 程序功能:将内存2000:0000和2000:0001处的两个字节相加,结果存入2000:0002
; 在DEBUG中使用A命令输入以下代码
CODE SEGMENT
ASSUME CS:CODE
ORG 2000H ; 指定程序装入地址
START:
MOV AX, 2000H ; 设置数据段地址
MOV DS, AX ; 将2000H传送到DS段寄存器
MOV AL, [0000] ; 将DS:0000处的字节传送到AL
MOV BL, [0001] ; 将DS:0001处的字节传送到BL
ADD AL, BL ; AL = AL + BL
MOV [0002], AL ; 将AL的内容传送到DS:0002
INT 20 ; 退出程序,返回DOS
CODE ENDS
END START
5.3 DEBUG中直接输入的机器码
2000:0000 A0 00 00 MOV AL, [0000]
2000:0003 8A 1E 01 00 MOV BL, [0001]
2000:0007 00 D8 ADD AL, BL
2000:0009 A2 02 00 MOV [0002], AL
2000:000C CD 20 INT 20
六、实验结果
6.1 基础性实验结果
【此处需要截图:运行DEBUG程序,展示各命令的使用效果】
截图应包含:
- DEBUG启动界面
- R命令显示寄存器内容
- D命令显示内存内容
- E命令修改内存数据
- A命令输入汇编指令
- U命令反汇编结果
- T命令单步执行效果
- Q命令退出DEBUG
6.2 加强性实验结果
【此处需要截图:展示加强性实验的程序执行过程】
截图应包含:
- 使用E命令设置初始数据(2000:0000=05H, 2000:0001=03H)
- 使用A命令输入程序
- 使用U命令反汇编验证程序
- 使用T命令单步执行,观察AL、BL的变化
- 程序执行后D命令显示内存2000:0000-2000:0002的内容
- 预期结果:2000:0002处应为08H(05H+03H=08H)
6.3 实验数据记录表
| 地址 | 初始值 | 操作后值 |
|---|---|---|
| 2000:0000 | 05H | 05H |
| 2000:0001 | 03H | 03H |
| 2000:0002 | 00H | 08H |
七、思考题答案
7.1 思考题一:在DEBUG中如何正确使用段寄存器作为地址前缀?
答: 在DEBUG中,当使用其他段寄存器作为地址前缀时,需要在指令中显式指明段寄存器。格式为"段寄存器:偏移地址"。
例如:
MOV AL, DS:[0000] ; 使用DS段寄存器访问内存
MOV BL, ES:[0001] ; 使用ES段寄存器访问内存
MOV [CS:1000], AL ; 使用CS段寄存器访问内存
如果未指明段寄存器,DEBUG会使用默认的段寄存器:
- 对于数据访问,默认使用DS段寄存器
- 对于堆栈操作,默认使用SS段寄存器
- 对于代码获取,默认使用CS段寄存器
7.2 思考题二:如何使用D命令查看程序执行后的内存结果?
答: 使用D命令可以查看指定地址范围的内存内容。
查看程序执行后的内存结果方法:
-
首先确定要查看的内存地址和范围
-d 2000:0000 2000:0002这将显示从2000:0000到2000:0002地址范围的内存内容
-
如果不指定结束地址,D命令默认显示128个字节
-d 2000:0000 -
连续使用D命令时,会接着显示下一个地址范围
-d
实验中的程序将结果存入2000:0002,执行完后使用D 2000:0000 2000:0002命令可以查看:
- 2000:0000处的原始数据(如05H)
- 2000:0001处的原始数据(如03H)
- 2000:0002处的结果(如08H,即05H+03H)
八、实验心得
-
DEBUG是一个功能强大的调试工具,熟练掌握各命令的使用对于汇编语言程序开发至关重要。
-
通过R命令可以随时观察寄存器的状态,D命令可以查看内存数据,这对于跟踪程序执行过程非常有帮助。
-
A命令允许直接输入汇编指令,非常适合编写和测试小程序。
-
T命令是单步执行命令,可以逐条观察程序执行过程中各寄存器和内存的变化,是调试程序的重要手段。
-
在使用其他段寄存器访问内存时,必须显式指明段寄存器前缀,否则会使用默认段寄存器导致错误。
-
通过本次实验,对DEBUG的各常用命令有了初步认识,为后续深入学习汇编语言和程序调试打下基础。