前言
DEBUG是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
Debug 程序的调用
在DOS提示符下,可以键入命令:
C> DEBUG [d:][path][文件名][参数1][参数2]
其中,文件名是被调试文件的名称,它必须是执行文件(EXE),两个参数是运行被调试文件时所需要的命令参数,在DEBUG程序调入后,出现提示符:
Debug的主要命令
名称 | 解释 | 格式 |
---|---|---|
a(Assemble) | 逐行汇编 | a [address] |
c(Compare) | 比较两内存块 | c range address |
d(Dump) | 内存16进制显示 | d [address]或 d [range] |
e(Enter) | 修改内存字节 | e address [list] |
f(fin) | 预置一段内存 | f range list |
g(Go) | 执行程序 | g [=address][address…] |
h(Hexavithmetic) | 制算术运算 | h value value |
i(Input) | 从指定端口地址输入 | i pataddress |
l(Load) | 读盘 | l [address [driver seetor]] |
m(Move) | 内存块传送 | m range address |
n(Name) | 置文件名 | n filespec [filespec…] |
o(Output) | 从指定端口地址输出 | o portadress byte |
P | 执行循环、重复的字符串指令、软件中断或子例程。不跟踪内部。 | p |
q(Quit) | 结束 | q |
r(Register) | 显示和修改寄存器 | r [register name] |
s(Search) | 查找字节串 | s range list |
t(Trace) | 跟踪执行 | t [=address] [value] |
u(Unassemble) | 反汇编 | u [address ]或range |
w(Write) | 存盘 | w [address[driver sector secnum]] |
显示内存单元内容的命令D
- D (Dump) 内存以16进制显示
格式为:
-D [地址]
-D [范围]
修改内存单元内容的命令E
用给定的内容代替指定范围的单元内容
- E(Enter)修改内存字节
-E 地址 内容表
例如,在DOS中键入以下命令:
修改指定范围内容
-E DS:100 F3 "XYZ" 8D
查看修改后的内容
-D DS:100
逐个单元相继地修改
-E 地址
例如,在DOS中键入以下命令:
修改指定范围内容
-E 100
查看修改后的内容
-D DS:100
检查和修改寄存器内容的命令R
显示CPU内部所有寄存器内容和标志位状态
- R(Register)显示和修改寄存器
格式为:
-R
R命令中显示中标志位状态位的含义如下表所示:
标识名 | 置位 | 复位 |
---|---|---|
溢出Overflow(是/否) | OV | NV |
方向Direction(减量/增量) | DN | UP |
中断Interrupt(允许/屏蔽) | EI | DI |
符号Sign(负/正) | NG | PL |
零Zero(是/否) | ZR | NZ |
辅助进位Auxiliary Carry(是/否) | AC | NA |
奇偶Parity(偶/奇) | PE | PO |
进位Carry(是/否) | CY | NC |
显示和修改某个寄存器的内容
格式为:
-R 寄存器名
例如,在DOS中键入以下命令:
查看修改后的内容
-R
修改指定范围内容
-R AX
查看修改后的内容
-R
如果不想要修改修改AX的内容,可以在:出现后,直接回车就取消修改了。可以拿来查看寄存器中存储数据的内容。
-R AX
AX 0000
: ---->在这里直接回车(Enter)就可以退出修改了
显示和修改标志位状态
格式为:
-RF
例如,在DOS中键入以下命令:
查看修改后的内容
-R
修改指定范围内容
-R AX ---->如果不想修改的话,直接回车(Enter)可以跳过修改
查看修改后的内容
-R
运行命令G
- G(Go)结束
格式为:
-G [=地址1][地址2[地址3......]]
其中,地址1规定了运行起始地址,后面的若干地址均为断点地址。
追踪命令T
- T(Trace)跟踪执行
逐条指令追踪
格式为:
-T [地址]
该命令从指定地址起执行一条指令后停下来,显示寄存器内容和状态值。
多条命令追踪
格式为:
-T [地址][值]
该命令从指定地址起执行后停下来,n由[值]确定。
汇编命令A
- A(Assemble)逐行汇编
格式为:
-A [地址]
该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。
反汇编指令U
- U(Unassemble)反汇编
按地址反汇编
格式为:
-U [地址]
该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U命令的最后一个指令的下一个单元开始显示32个字节。
按范围反汇编
格式为:
-U 范围
该指令对指定范围的内存单元进行反汇编。
命名命令N
- N(Name)置文件名
格式为:
-N 文件标识符 [文件标识符]
此命令将两个文件标志符格式化在CS:5CH和CS:6CH的两个文件控制块里面,以便使用L或者是W命令把文件装入或者存盘。
装入命令L
- L(Load)读盘
1.把磁盘上指定扇区的内容装入到内存指定地址起始的单元中,格式为:
-L 地址 驱动器 扇区号 扇区数
2.装入到指定文件中,格式为:
-L [地址]
此命令已在CS:5CH中格式化的文件控制块所制定的文件。
在用L命令前,BX和CX中应包含所读文件的字节数。
写命令W
- W(Write)存盘
1.把数据写入到磁盘的指定扇区:
-W 地址 驱动器 扇区号 扇区数
2.把数据写入到指定文件中:
-W [地址]
此命令把指定内存区域中的数据写入由CS:5CH处的FCB所规定的文件中。
在用W命令前,BX和CX中应包含要写入文件的字节数。
退出命令Q
- Q(Quit)退出
格式为:
-Q
它退出DEBUG程序,返回DOS,但该命令本身并不把内存中的文件存盘,如需存盘,应在执行Q命令前先执行写命令W。
DEBUG调试过程
DEBUG调试并运行可执行文件的过程,如何查看执行结果?
- 1、编写源代码XX.asm文件
- 2、在debug中键入masmXX.asm
- 3、生成XX.obj文件
- 4、在debug中键入linkXX.obj
- 5、生成XX.exe可执行文件
- 6、在debug中键入XX.exe 执行文件
- 7、用U命令和T命令调试。
- 8、在执行指令时.在寄存器状态下方会显示下次该执行的指令和该指令的操作数在内存中的内容,根据指令来观察寄存器的状态标志的变化来查错和查看执行结果。