Debug使用方法.docx
- 文档编号:11484766
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:36
- 大小:30.86KB
Debug使用方法.docx
《Debug使用方法.docx》由会员分享,可在线阅读,更多相关《Debug使用方法.docx(36页珍藏版)》请在冰豆网上搜索。
Debug使用方法
DEBUG使用方法
启动DEBUG程序,DEBUG程序用于调试可执行文件。
格式:
DEBUG[[drive:
][path]filename[testfile-parameters]]
参数:
[drive:
][path]filename
指定待调试可执行文件的所在位置及文件名。
testfile-parameters
指定待设计可执行文件需要的命令参数。
相关命令
A(汇编,Assemble)
C(比较,Compare)
D(卸出,Dump)
E(输入数据,Enter))
F(填充,Fill)
G(执行,Go)
H(十六进行运算,Hex)
I(读输入口,Input)
L(装入,Load)
M(移动,MOVE)
N(命令,NAME)
O(写输出口,OUTPUT)
P(调试循环程序,PROCEED)
Q(退出,QUIT)
R(寄存器,REGISTER)
S(找寻,SEARCH)
T(跟踪,TRACE)
U(反汇编,UNASSEMBLE)
W(写盘,WRITE)
XA(分配扩充内存,ALLOCATEEM)
XD(释放分配的扩充内存,DEALLOCATEEM)
XM(扩展内存页影像,MAPEXMPAGES)
XS(显示扩充内存状态,DISPLAYEMSTATUS)
二、注意事项
不指定调试文件名时DEBUG命令的使用。
使用DEBUG命令时,如果未指定调试文件的所在位置及名子,DEBUG执行时将显示符(-)。
这时,用户可输入任何一个DEBUG调试命令。
DEBUG命令
以下为DEBUG使用的调试命令及其简介:
?
显示所有的调试命令
A汇编8086/8087/8088汇编语言源程序。
C比较两块内存的内容。
D显示部分内存的内容。
E人指定的地址开始把数据送入内存。
F将指一值填进某一范围的内存。
G运行内存中的程序。
H执行十六进制算术运算。
I从指定输入口输入一道字节值。
L把文件或磁盘扇区内容装入内存。
M拷贝某块内存的内容。
N指定文件名,以便L或W命令读写该文件;指定正调试文件所需的参数。
O发送一字节值至指定输出口。
P执行循环程序,重复字符串指令,软中断,或子程序。
Q结束DEBUG命令执行。
R显示或修改一个或数个寄存器内容。
S在内存指定范围内找寻指定的值。
T执行一条指令,然后显示所有寄存器的内容,所有标志状态,以及下一条要执行的指令(汇编语言格式)。
U反汇编某一范围内的字节,显示其相应汇编语言源语名。
W把正调试文件写入磁盘。
XA分配扩充内存
XD释放分配的扩充内存。
XM作扩充内存页的影像。
XS显示扩充内存的状态。
命令参数间的隔离
除命令Q外,所有的调试命令都可使用参数。
参数间可用逗号或空格隔开,但只是在十六进制数之间才要求必须隔开。
因此,下列命令是等价的:
dcs:
100110
DCS:
100110
D,CS:
100,110
指定有效地址
调试命令中的addres(地址)参数指定内存中的地址。
地址分两部分,一部分是段寄存器字母或4位的段地址,另一部分为偏移地址。
其中,段寄存器或段地址可以省略。
对命令A,G,L,T,U,W,默认段为CS,对所有其余命令,默认段为DS。
所有数值都为十六进制。
以下为有效地址:
CS:
0100
04BA:
0100
注意,在段名和偏移值之间要加冒号。
指定有效地址范围。
调试命令中的range(范围)参数指定内存中的地址范围。
地址范围有两种格式:
开始地址和结束地址;开始地址和范围长度(由L指定)。
例如:
从CS:
100开始,到10F结束,共16字节范围,可使用两种格式说明:
CS:
10010F
CS:
100110
1、DEBUG:
A(汇编)
一、概述
直接汇编8086/80878088汇编语言源程序,汇编结果放内存。
本命令将汇编语言语句转换成执行的机器码,语句中所有操作数据均为16进制,由1到4个字符组成。
格式:
A[address]
参数
address
指定输入汇编语言语句的地址。
地址为16进制数但实际输入时结尾不必加字符“h”,如果不指定地址,命令A将从上一次汇编结束地的地址开始。
相关命令
有关在指定地址输入数据的具体说明,参阅DEBUGE命令
有关反汇编的具体说明,参阅DEBUG U命令。
二、注意事项
使用助记符
地址段名助记符为CS:
DS:
ES:
SS:
。
远程返回助记符为RETF。
字符串处理助记符必须根据其处理的字符串的长度选择使用。
例如,移动字串(16bits)使用MOVSW,移动字节串(8bits)使用MOVSB。
转移语句和子程序调用的汇编
汇编命令将根据语句中地址字节移动自动汇编短,近,远转移或调用,生成目标地址。
用户也可以使用前缀NEAR或FAR直接说明这类转移或调用。
例如:
-a0100:
0500
0100:
0500jmp502;2字节短转移,生成2字节目标地址。
0100:
0502jmpnear505;3字节近转移,生成4字节目标地址。
0100:
0505jmpfor50a;5字节远转移,生成8(段+偏移)字节目标地址。
前缀NEAR可以省略为NE。
字内存地址和字节内存地址的区分
当仅从操作数本身不能区分究竟是字内存地址还是字节内存地址是地,必须用前缀WORDPRT(字)或BYTEPTR(字节)指字其类型。
两者可省略为WO和BY,例如:
decwo[si]
negbyteptr[128]
指定操作数
DEBUG按常规认方括号内的操作为内存地址。
否则,为立即数。
例如:
movax,21;把数值21装入AX
movax,[21];把内存21H单元的内容装入AX
使用伪指令
A命令使用常用的两个伪指令:
DB和DW。
DB汇编字节,DW汇编字。
汇编后生成的值存入内存(分别以字节和字为单位存放)。
例如:
db1,2,3,4,"thisisanexample"
db'thisiaaquotationmark:
"
db"thisisaquoutationmark:
'"
dw1000,2000,3000,"BACH"
三、应用举例
A命令支持所有各种形式的寄存器间接寻址指令,例如:
addbx,34[pb+2].[si-1]
pop[bp+di]
push[si]
A命令支持同义操作代码,例如:
loopz100
loope100
ja200
jnbe200
使用8087操作代码时,应加前缀WAIT或FWAIT,例如:
fwaitfaddst,st(3);thislineassembles
;arfwaitprefix
2、DEBUG:
C(比较)
一、概述
比较丙块内存的内容
格式
Crangeaddress
参数
range
指定待比较的第一块内存的起始和结束地址,或其起始地址和长度。
有关本参数有效值的说明,参阅DEBUG命令。
address
指定待比较的第二块内存的起始和结束地址,或其起始地址和长度。
有关本参数有效值的说明,参阅DEBUG命令。
二、注意事项
如果比较的两块内存内容相同,DEBUG不显示任何信息,只返回DEBUG提示符,如果比较的内容有差别,将以下格式显示这些差别。
address1byte1btye2address2
三、应用举例
以下两条命令的执行结果相同:
cl100,10f300
c100L10300
两条命令都比较从100h到10Fh和从300h到30Fh的两块内存的内容。
DEBUG执行这两条命令时将显示与下面相似的信息(假定DS=197F):
197F:
10004DE4194F:
0300
197F:
01016799197F:
0301
197F:
0102A327194F:
0302
197F:
010335F3194F:
0303
197F:
010497BD197F:
0304
197f:
01050435197F:
0305
197F:
01077671197F:
0307
197F:
0108E611197F:
0308
197F:
0109192C197f:
0309
197F:
010A800A197F:
030A
197F:
010B367F197F:
030B
197F:
010CBE22197F:
030C
197F:
010D8393197F:
030D
197F:
010E4977197F:
030E
197F:
010F4F8A197F:
030F
注意上表中缺地址197F:
0106和197F:
0306,这表示两个地址存放的数值相同。
3、DEBUG:
D(卸出)
一、概述
显示指定范围内存的内容
格式
D[range]
参数
range
指定要显示其内容的内存的起始地址和结束地址,或起始地址和长度。
有关范围有效值的说明,参阅DEBUG命令。
如未指定范围,将从上一次D命令显示的结束地址开始,显示128字节的内容。
相关命令
有关寄存器内容的显示,参阅DEBUGR命令。
有关反汇编的说明,参阅DEBUGU命令。
二、注意事项
D命令显示的内存内容分为两部分:
十六进制值部分(字节值都显示十六进制的格式)和ASCII字符部分(显示与字节值对应的ASCII字符),无法显示的字符用圆点(.)表示每一行显示行显示16字节的内容,第8和第9字节间用短横线(-)隔开,每一显示行都从16字节边界处开始显示。
三、应用举例
假设打入如下命令:
dcs:
10010f
DEGUG将显示类似如下格式的内容:
04BA:
0100544F04D000F53415759-52000000000000TOM.SAWYERM......
如随后再打入D命令但不指定范围,DEGUG将紧接着上次显示的最后地址(110)开始显示内存内容,格式同上;每一显示行显示的起始地址都比上一行的大16字节(如显示器屏幕为40列,则大8字节)。
如输入如下命令,DEGUG将从cs:
100开始,显示20H字节内容:
dcs:
100L20 (命令中L可为小写)
如输入如下命令,DEGUG将显示CS段内从100H开始到115H为止的内容:
dcs:
100115
4、DEGUG:
E(输入数据)
一、概述
输入数据到指定内存。
输入的数据可为16进制数,也可为ASCII字符。
指定内存在输入新数据后,原先的内容丢失。
格式
Eaddress[list]
参数
address
指定要输入数据的第一个内存单元。
list
指定要输入到内存连续单元的数据。
可以是一串16进制数或字符。
相关命令
有关汇编命令的说明,参阅DEGUGA命令。
有关内存内容显示的说明,参阅DEGUGD命令。
二、注意事项
使用address参数
如果指定了地址但未指定LIST,DEGUG显示指定地址及其内容,等待用户输入。
此时,用户可作如下操作:
输入新值。
在显示的内存当前值键入新的值。
如果键入多于两位数或是无效的16进制值,DEGUG将不显示无效值和多余字符。
按空格键跳至下一字节,一直到需要输入新值的字节为止。
输入新值的方法同上,如果按空格键移动超过8字节边界,DEGUG将另起一新行并在行首显示当前地址。
按短横线回到上一字节。
每按一次,回退一字节,而且启动一新的显示行显示显示当前地址及其内容。
按回车结束E命令。
可在任意字节位置上按回车键结束本命令。
使用list参数
如果命令中指字了list参数的值勤,E命令将以list中的值顺序取代指定地址的的当前值。
如果中途发生错误,原值不变。
list的值可以是一串16进制数或一串字符。
各个值之间以空格,逗号或制表符(TAB)分隔。
字符串则必须加上单引号或双引号。
三、应用举例
如输入如下命令:
ecs:
100
DEGUG以如下格式显示第一个字节的内容:
04BA:
0100EB._
键入41,该单元内容将改为41;如:
04BA:
0100EB.41_
在一个E命令下可连续输入多个字节值。
如上例,在输入新值后接着按空格键,DEGUG将显示下一单元的值,用户接着可输入该单元的新值。
依此类推。
例如:
04BA:
0100EB.4110.00BC._
接着修改值BC为42,在光标处键入42,DEGUG显示如下:
04BA:
0400EB.4110.00BC.42_
如果要修改输入的新值,比如将10改为6F,可按短横线(-)两次,回到值为10的地址0101处。
此时,DEGUG显示如下:
04BA:
0100EB.4110.00BC.42-
04BA:
010200.-
04BA:
010110._
键入6F代替原来的值10:
04BA:
010110.6F_
按回车键结束E命令,返回到DEGUG提示符下。
输入字符串到指定内存的操作举例如下:
eds:
100"Thisisthetextexample"
该命令将从ds:
100处开始填入引号内字符的ASCII值,共24字节内容。
5、DEGUG:
F(填充)
一、概述
用指定值填充指定区域的内存。
指定值可为16进制数据或ASCII字符。
填充后,指定内存原内容丢失。
格式
FRANGELIST
参数
range
指定待填充内存的起始和结束地址,或其起始地址和长度。
有关本参数有效值的说明,参阅DEGUG命令。
指定填充数据。
指定值可为16进制数据或引号内的ACSII字符。
二、注意事项
使用range参数
如果range中包含的字节数多于list中的数值个数,DEGUG将重复使用list中的数值,直到range中的所有字节填满为止。
如果range内的内存单元坏或不存在,DEGUG将显示出错信息并停止F命令。
使用list参数
如果list中的数值个数多于range包含的字节数,DEGUG将忽略list中多余的值。
三、应用举例
如输入如下命令:
f01ba:
100L1004245525441
DEGUG将五个指定值勤(42到41)填入从04BA:
1FF的内存单元。
DEGUG重复使用指定的五个值,直到所有100H个单元填完为止。
6、DEGUG:
G(执行)
一、概述
运行内存中的程序
格式
G[=address][breakpoints]
参数
=address
指定运行程序的起始地址。
如不指定该地址,DEGUG将从由CS:
IP指定的当前地址处开始运行程序。
breakpoints
指定临时断点地址。
断点数为1到10个。
相关命令
有关执行循环,字符吕重复指令,软中断及子程序的说明,参阅DEGUGP命令。
有关逐条执行指令的说明,参阅DEGUGT命令。
二、注意事项
=address参数的使用
注意本参数前面的等号(=),其作用是指导程序运行的起始地址和程序运行期间的断点地址(breakpoints)区分开来。
指定断点
程序在到达第一个断点停下,不管该断点在断点中表示什么地方。
因为断点设定后,DEGUG即把每一个断点处的原指令换为中断码(0CCh)。
程序到达断点时,DEGUG将所有断点处的中断码恢复为原来的指令,显示各寄存器的当前内容和标志状态,当前地址及其存放的指令。
DEGUG的这些显示信息如同执行R(寄存器)命令并指定断点时显示的信息一样。
如果程序执行时没有遇到断点,一直执行下去,DEGUG不会把断点处的中断码恢复为原来的指令。
断点设置的限制
断点必须害在存放着8086操作码(opcode)和一个字节的地址上,不能插在中间。
如果设置的断点超过10个,DEGUG显示如下信息:
bpError
对用户堆载指针的要求
用户规模指针必须有效,且应有6个字节供G命令使用。
G命令使用IRET指令跳至正在调试的程序。
DEGUG置用户堆栈无效或太小,操作系统可能终止。
DEGUG还在旨定断点处放置一中断码(0CCh)。
重新启动程序
程序运行正常结束,MS-DOS显示如下信息:
rpogramterminatednormally
此时,不要马上启动程序运行。
必须使用DEGUG的N和L命令重新装入该程序后,才能保证程序正常运行。
三、应用举例
输入如下命令:
gcs:
7550
MS-DOS运行现正在内存中的程序,到断点--CS段的7550地址处停下。
DEGUG显示当前各寄存器的内容和标志状态,并暂停G命令的执行。
如下命令设置两个断点:
gcs:
7550,cs:
8000
如果用户在DEGUG遇到一个断点暂停后在输入G命令,程序将从断点后面的第一条指令开始继续运行,而不是像通常那样从起始地址开始运行。
7、DEGUG:
H(16进制算术运算)
一、概述
对指定的两个数进行16进制算术运算。
格式
Hvaluelvalue2
参数
valuel
参数运算的第一个数,为从0到FFFFh的任意16进制数。
value2
参数运算的第二个数,为从0到FFFFh的任意16进制数。
二、注意事项
DEGUG先对两个数作加法运算,然后作减法运算,从第一个数减去第二个数。
运算结果显示在同行上--首先是和,然后是差。
三、应用举例
假设输入如下命令:
h19f10a
DEGUG执行运算并显示如下结果:
02A90095
8、DEGUG:
I(读输入口)
一、概述
从指一输入口读入并显示一字节的值。
格式
Iport
参数
port
指定输入口地址。
该址址可以是一个16-bit的值。
相关命令
有关把数据发送至输出口的说明,参阅DEGUGO命令。
二、应用举例
假设输入口2F8的字节值为42H,那么输入如下命令:
i2f8
DEGUG将读入该字节并显示如下:
42
9、DEGUG:
L(装入)
一、概述
把指定文件或磁盘扇区的内容装入内存。
格式
L[address]
Laddressdrivestartnumber
第一个格式把磁盘文件(由N命令指定)读入内存,读入字节数存BX:
CX。
第二个格式绕过MS-DOS文件系统,直接从指定的磁盘扇区读入数据。
参数
address
指定存放读入数据的内存位置。
如果不指定,DEGUG将从CS:
IP处开始存放读入数据。
(.exe和.hex文件的装入地址参阅注意事项)
drive
指定要读入某扇区内容的盘符。
本参数值为数字。
每个值与一盘符对应,如0=A,1=B,2=C等等。
start
指定要读入其内容的每一个扇区号(十六进制数)。
number
指定要读入其内容的连续扇数(十六进制数)。
相关命令
有关在使用L命令读入前先指定文件的说明,参阅DEGUGN命令。
有关把调试文件写入磁盘的说明,参阅DEGUGW命令。
二、注意事项
不带参数L命令的使用
如果在输入DEGUG的命令行中指定了文件,那么不带参数使用L命令将把该指定文件的内容从磁盘读入内存。
如果命令行中没有指定文件,那么读入的文件是最近运行命令N指定的文件。
读入的内容从地址CS:
100开始存放。
读入的字节数存入寄存器BX和CS。
带address参数L命令的使用
如果带address参数,L命令将读入的文件或磁盘扇区的内容存入从address开始的内存单元。
注意L命令的两种格式,不带参数的L命令用于读入文件,带全部参数的L命令用于读入磁盘扇区。
读入指定扇区内容。
DEGUG从由参数start指定的扇区开始读入磁盘内容。
一直到读完由number指定的扇区数为止。
装入EXE文件
参数address对读入.EXE文件无效。
DEGUG在装入.EXE文件时,将按.EXE文件阔大中指定的地址存放该文件。
.EXE文件头在文件装入内存之前就与文件本身分开,所以.EXE文件在盘上的长度和在内存中的长度不同。
如果需要检查检验一个完整的.EXE文件,必须更换其扩展名。
打开十六进制(HEX)文件
所谓十六进制(HEX)文件是使用intel十六进制格式的文件,DEGUG把凡以.HEX为扩展名的文件都看作十六进制文件。
不带参数的L命令装.HEX文件的地址是由HEX文件中指定的地址。
如果L合命令使用address参数指定装入地址,DEGUG将这两个地址相加,得到确定的装入地址。
三、应用举例
假设用户输入如下命令
该命令命名了个名为的文件。
用户随后使用L命令把该文件的内容装入内存。
装毕,显示DEGUG的提示符。
假设需读入C盘从逻辑扇区15(0Fh)开始的109(6Dh)个扇区的内容,存放在从04BA:
0100开始的内存单元内,输入如下命令:
L04ba:
1002of6d
10、DEBUG:
M(移动)
一、概述
把一块内存的内容复制到一另块。
格式
Mrangeaddress
参数
range
指定被拷贝的起始地址和结束地址,或其起始地址和块长。
address
二、注意事项
叠交复制移动
所谓叠交复制移动是指执行M命令时,被复制块(源块)的一部分和新复制块(终块)的一部分相互重叠。
M命令智
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Debug 使用方法
![提示](https://static.bdocx.com/images/bang_tan.gif)