启动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(分配扩充内存,ALLOCATE EM)
XD(释放分配的扩充内存,DEALLOCATE EM)
XM(扩展内存页影像,MAP EXM PAGES)
XS(显示扩充内存状态,DISPLAY EM STATUS)
二、注意事项
不指定调试文件名时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: 100 110
D CS: 100 110
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:100 10F
CS:100 1 10
DEBUG:A(汇编)
一、概述
直接汇编8086/80878088汇编语言源程序,汇编结果放内存。
本命令将汇编语言语句转换成执行的机器码,语句中所有操作数据均为16进制,由1到4个字符组成。
格式:
A[address]
参数
address
指定输入汇编语言语句的地址。地址为16进制数但实际输入时结尾不必加字符“h”,如果不指定地址,命令A将从上一次汇编结束地的地址开始。
相关命令
有关在指定地址输入数据的具体说明,参阅DEBUG E命令
有关反汇编的具体说明,参阅DEBUG U命令。
二、注意事项
使用助记符
地址段名助记符为CS:,DS:,ES:,SS:。远程返回助记符为RETF。字符串处理助记符必须根据其处理的字符串的长度选择使用。例如,移动字串(16bits)使用MOVSW,移动字节串(8bits)使用MOVSB。
转移语句和子程序调用的汇编
汇编命令将根据语句中地址字节移动自动汇编短,近,远转移或调用,生成目标地址。用户也可以使用前缀NEAR或FAR直接说明这类转移或调用。例如:
-a0100:0500
0100:0500 jmp 502 ;2字节短转移,生成2字节目标地址。
0100:0502 jmp near 505 ;3字节近转移,生成4字节目标地址。
0100:0505 jmp for 50a ;5字节远转移,生成8(段+偏移)字节目标地址。
前缀NEAR可以省略为NE。
字内存地址和字节内存地址的区分
当仅从操作数本身不能区分究竟是字内存地址还是字节内存地址是地,必须用前缀WORD PRT(字)或BYTE PTR(字节)指字其类型。两者可省略为WO和BY,例如:
dec wo[si]
neg byte ptr[128]
指定操作数
DEBUG按常规认方括号内的操作为内存地址。否则,为立即数。例如:
mov ax ,21 ;把数值21装入AX
mov ax,[21] ;把内存21H单元的内容装入AX
使用伪指令
A命令使用常用的两个伪指令:DB和DW。DB汇编字节,DW汇编字。汇编后生成的值存入内存(分别以字节和字为单位存放)。例如:
db 1,2,3,4, "this is an example"
db 'this ia a quotation mark:"
db "this is a quoutation mark:'"
dw 1000,2000,3000,"BACH"
三、应用举例
A命令支持所有各种形式的寄存器间接寻址指令,例如:
add bx, 34[pb+2].[si-1]
pop[bp+di]
push[si]
A命令支持同义操作代码,例如:
loopz 100
loope 100
ja 200
jnbe 200
使用8087操作代码时,应加前缀WAIT或FWAIT,例如:
fwait fadd st,st(3) ;this line assembles
;ar fwait prefix
DEBUG: C(比较)
一、概述
比较丙块内存的内容
格式
C range address
参数
range
指定待比较的第一块内存的起始和结束地址,或其起始地址和长度。有关本参数有效值的说明,参阅DEBUG命令。
address
指定待比较的第二块内存的起始和结束地址,或其起始地址和长度。有关本参数有效值的说明,参阅DEBUG命令。
二、注意事项
如果比较的两块内存内容相同,DEBUG不显示任何信息,只返回DEBUG提示符,如果比较的内容有差别,将以下格式显示这些差别。
address1 byte1 btye2 address2
三、应用举例
以下两条命令的执行结果相同:
cl100,10f 300
c100L10 300
两条命令都比较从100h到10Fh和从300h到30Fh的两块内存的内容。DEBUG执行这两条命令时将显示与下面相似的信息(假定DS=197F):
197F: 1000 4D E4 194F:0300
197F: 0101 67 99 197F:0301
197F: 0102 A3 27 194F:0302
197F: 0103 35 F3 194F:0303
197F: 0104 97 BD 197F:0304
197f: 0105 04 35 197F:0305
197F: 0107 76 71 197F:0307
197F: 0108 E6 11 197F:0308
197F: 0109 19 2C 197f:0309
197F: 010A 80 0A 197F:030A
197F: 010B 36 7F 197F:030B
197F: 010C BE 22 197F:030C
197F: 010D 83 93 197F:030D
197F: 010E 49 77 197F:030E
197F: 010F 4F 8A 197F:030F
注意上表中缺地址197F:0106和197F:0306,这表示两个地址存放的数值相同。
DEBUG:D(卸出)
一、概述
显示指定范围内存的内容
格式
D[range]
参数
range
指定要显示其内容的内存的起始地址和结束地址,或起始地址和长度。有关范围有效值的说明,参阅DEBUG命令。如未指定范围,将从上一次D命令显示的结束地址开始,显示128字节的内容。
相关命令
有关寄存器内容的显示,参阅DEBUG R命令。
有关反汇编的说明,参阅DEBUG U命令。
二、注意事项
D命令显示的内存内容分为两部分:十六进制值部分(字节值都显示十六进制的格式)和ASCII字符部分(显示与字节值对应的ASCII字符),无法显示的字符用圆点(.)表示每一行显示行显示16字节的内容,第8和第9字节间用短横线(-)隔开,每一显示行都从16字节边界处开始显示。
三、应用举例
假设打入如下命令:
dcs:100 10f
DEGUG将显示类似如下格式的内容:
04BA: 0100 54 4F04D000F53 41 57 59-52 00 00 00 00 00 00 TOM.SAWYERM......
如随后再打入D命令但不指定范围,DEGUG将紧接着上次显示的最后地址(110)开始显示内存内容,格式同上;每一显示行显示的起始地址都比上一行的大16字节(如显示器屏幕为40列,则大8字节)。
如输入如下命令,DEGUG将从cs:100开始,显示20H字节内容:
dcs:100 L 20 (命令中L可为小写)
如输入如下命令,DEGUG将显示CS段内从100H开始到115H为止的内容:
dcs:100 115
DEGUG: E(输入数据)
一、概述
输入数据到指定内存。
输入的数据可为16进制数,也可为ASCII字符。指定内存在输入新数据后,原先的内容丢失。
格式
E address[list]
参数
address
指定要输入数据的第一个内存单元。
list
指定要输入到内存连续单元的数据。可以是一串16进制数或字符。
相关命令
有关汇编命令的说明,参阅DEGUG A命令。
有关内存内容显示的说明,参阅DEGUG D命令。
二、注意事项
使用address参数
如果指定了地址但未指定LIST,DEGUG显示指定地址及其内容,等待用户输入。此时,用户可作如下操作:
输入新值。在显示的内存当前值键入新的值。如果键入多于两位数或是无效的16进制值,DEGUG将不显示无效值和多余字符。
按空格键跳至下一字节,一直到需要输入新值的字节为止。输入新值的方法同上,如果按空格键移动超过8字节边界,DEGUG将另起一新行并在行首显示当前地址。
按短横线回到上一字节。每按一次,回退一字节,而且启动一新的显示行显示显示当前地址及其内容。
按回车结束E命令。可在任意字节位置上按回车键结束本命令。
使用list参数
如果命令中指字了list参数的值勤,E命令将以list中的值顺序取代指定地址的的当前值。如果中途发生错误,原值不变。
list的值可以是一串16进制数或一串字符。各个值之间以空格,逗号或制表符(TAB)分隔。字符串则必须加上单引号或双引号。
三、应用举例
如输入如下命令:
ecs:100
DEGUG以如下格式显示第一个字节的内容:
04BA: 0100 EB._
键入41,该单元内容将改为41;如:
04BA:0100 EB.41_
在一个E命令下可连续输入多个字节值。如上例,在输入新值后接着按空格键,DEGUG将显示下一单元的值,用户接着可输入该单元的新值。依此类推。例如:
04BA:0100 EB.41 10.00 BC._
接着修改值BC为42,在光标处键入42,DEGUG显示如下:
04BA:0400 EB.41 10.00 BC.42_
如果要修改输入的新值,比如将10改为6F,可按短横线(-)两次,回到值为10的地址0101处。此时,DEGUG显示如下:
04BA:0100 EB.41 10.00 BC.42-
04BA:0102 00.-
04BA:0101 10._
键入6F代替原来的值10:
04BA:0101 10.6F_
按回车键结束E命令,返回到DEGUG提示符下。
输入字符串到指定内存的操作举例如下:
eds:100 "This is the text example"
该命令将从ds:100处开始填入引号内字符的ASCII值,共24字节内容。
DEGUG:F(填充)
一、概述
用指定值填充指定区域的内存。
指定值可为16进制数据或ASCII字符。填充后,指定内存原内容丢失。
格式
F RANGE LIST
参数
range
指定待填充内存的起始和结束地址,或其起始地址和长度。有关本参数有效值的说明,参阅DEGUG命令。
指定填充数据。指定值可为16进制数据或引号内的ACSII字符。
二、注意事项
使用range参数
如果range中包含的字节数多于list中的数值个数,DEGUG将重复使用list中的数值,直到range中的所有字节填满为止。
如果range内的内存单元坏或不存在,DEGUG将显示出错信息并停止F命令。
使用list参数
如果list中的数值个数多于range包含的字节数,DEGUG将忽略list中多余的值。
三、应用举例
如输入如下命令:
f01ba:100 L100 42 45 52 54 41
DEGUG将五个指定值勤(42到41)填入从04BA:1FF的内存单元。DEGUG重复使用指定的五个值,直到所有100H个单元填完为止。
DEGUG:G(执行)
一、概述
运行内存中的程序
格式
G[=address][breakpoints]
参数
=address
指定运行程序的起始地址。如不指定该地址,DEGUG将从由CS:IP指定的当前地址处开始运行程序。
breakpoints
指定临时断点地址。断点数为1到10个。
相关命令
有关执行循环,字符吕重复指令,软中断及子程序的说明,参阅DEGUG P命令。有关逐条执行指令的说明,参阅DEGUG T命令。
二、注意事项
=address参数的使用
注意本参数前面的等号(=),其作用是指导程序运行的起始地址和程序运行期间的断点地址(breakpoints)区分开来。
指定断点
程序在到达第一个断点停下,不管该断点在断点中表示什么地方。因为断点设定后,DEGUG即把每一个断点处的原指令换为中断码(0CCh)。
程序到达断点时,DEGUG将所有断点处的中断码恢复为原来的指令,显示各寄存器的当前内容和标志状态,当前地址及其存放的指令。DEGUG的这些显示信息如同执行R(寄存器)命令并指定断点时显示的信息一样。
如果程序执行时没有遇到断点,一直执行下去,DEGUG不会把断点处的中断码恢复为原来的指令。
断点设置的限制
断点必须害在存放着8086操作码(opcode)和一个字节的地址上,不能插在中间。如果设置的断点超过10个,DEGUG显示如下信息:
bp Error
对用户堆载指针的要求
用户规模指针必须有效,且应有6个字节供G命令使用。G命令使用IRET指令跳至正在调试的程序。DEGUG置用户堆栈无效或太小,操作系统可能终止。DEGUG还在旨定断点处放置一中断码(0CCh)。
重新启动程序
程序运行正常结束,MS-DOS显示如下信息:
rpogram terminated normally
此时,不要马上启动程序运行。必须使用DEGUG的N和L命令重新装入该程序后,才能保证程序正常运行。
三、应用举例
输入如下命令:
gcs:7550
MS-DOS运行现正在内存中的程序,到断点--CS段的7550地址处停下。DEGUG显示当前各寄存器的内容和标志状态,并暂停G命令的执行。
如下命令设置两个断点:
gcs:7550,cs:8000
如果用户在DEGUG遇到一个断点暂停后在输入G命令,程序将从断点后面的第一条指令开始继续运行,而不是像通常那样从起始地址开始运行。
DEGUG:H(16进制算术运算)
一、概述
对指定的两个数进行16进制算术运算。
格式
H valuel value2
参数
valuel
参数运算的第一个数,为从0到FFFFh的任意16进制数。
value2
参数运算的第二个数,为从0到FFFFh的任意16进制数。
二、注意事项
DEGUG先对两个数作加法运算,然后作减法运算,从第一个数减去第二个数。运算结果显示在同行上--首先是和,然后是差。
三、应用举例
假设输入如下命令:
h19f 10a
DEGUG执行运算并显示如下结果:
02A9 0095
DEGUG: I(读输入口)
一、概述
从指一输入口读入并显示一字节的值。
格式
I port
参数
port
指定输入口地址。该址址可以是一个16-bit的值。
相关命令
有关把数据发送至输出口的说明,参阅DEGUG O命令。
二、应用举例
假设输入口2F8的字节值为42H,那么输入如下命令:
i2f8
DEGUG将读入该字节并显示如下:
42
DEGUG: L(装入)
一、概述
把指定文件或磁盘扇区的内容装入内存。
格式
L[address]
L address drive start number
第一个格式把磁盘文件(由N命令指定)读入内存,读入字节数存BX:CX。
第二个格式绕过MS-DOS文件系统,直接从指定的磁盘扇区读入数据。
参数
address
指定存放读入数据的内存位置。如果不指定,DEGUG将从CS:IP处开始存放读入数据。(.exe和.hex文件的装入地址参阅注意事项)
drive
指定要读入某扇区内容的盘符。本参数值为数字。每个值与一盘符对应,如0=A,1=B,2=C等等。
start
指定要读入其内容的每一个扇区号(十六进制数)。
number
指定要读入其内容的连续扇数(十六进制数)。
相关命令
有关在使用L命令读入前先指定文件的说明,参阅DEGUG N命令。
有关把调试文件写入磁盘的说明,参阅DEGUG W命令。
二、注意事项
不带参数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将这两个地址相加,得到确定的装入地址。
三、应用举例
假设用户输入如下命令
nfile.com
该命令命名了个名为file.com的文件。用户随后使用L命令把该文件的内容装入内存。装毕,显示DEGUG的提示符。
假设需读入C盘从逻辑扇区15(0Fh)开始的109(6Dh)个扇区的内容,存放在从04BA:0100开始的内存单元内,输入如下命令:
L04ba:100 2 of 6d
DEBUG: M(移动)
一、概述
把一块内存的内容复制到一另块。
格式
M range address
参数
range
指定被拷贝的起始地址和结束地址,或其起始地址和块长。
address
二、注意事项
叠交复制移动
所谓叠交复制移动是指执行M命令时,被复制块(源块)的一部分和新复制块(终块)的一部分相互重叠。M命令智能地处理这类复制,不会搞乱新复制块的数据。M先复制要被覆盖的内容,即如果数据从高地址移至低地址,从低地址开始复制,如果数据从低地址至高地址,则从高地址开始复制,这样,保证了新复制块的数据在叠交复制时候保持完整,不遭破坏。
三、应用举例
假设输入如下命令:
msc:100 110 cs:500
DEBUG先把地址CS:100的内容复制到CS:510,然后是CS:10F的内容复制到CS:50F。依次进行。一直把CS:100的内容复制到CS:500为止。如需检查移动结果,可使用D命令显示从CS:500开始的内容。
DEBUG: N(命令)
一、概述
为L和W命令执行准备好文件名;为正调试的可执行文件指定所需参数。
格式
N[drive:][path]filename
为正在调试的可执行文件指定所需参数,使用如下格式:
N file-parameters
清除由前面的N命令指定的文件名和参数,使用如下格式:
N
参数
[drive:][path]filename
指定要调试文件的所在位置和文件名。
file-parameters
指定调试文件运行时所需要的参数。
相关命令
有关读入文件或磁盘扇区内容的说明,参阅DEBUG L命令。
有关把调试文件写盘的说明,参阅DEBUG W命令。
二、注意事项
N命令的两种用法
N命令的第一种用法是指定后面L和W命令所要处理的文件。如果启动DEBUG时未带文件名,在以后使用L命令装入文件前,必须先用N指定文件。文件名将按所要求的格式存入位于CS:5C的文件控制块。N的第二种用法是为调试文件指定所需要的参数。
内存区分配
如下四处内存区受命令N的影响:
内存单元 内容
------------------------------------
CS:5C File 1的文件控制块(FCB)
CS:6C File 2的文件控制块(FCB)
CS:80 N命令长度(字符数)
CS:81 N命令起始字符
N命令指定的第一个文件名放在位于CS:5C的文件控制块(FCB)中,如果指了第一个文件,第二个文件名放在位于CS:6C的FCB中。N命令行的字符(不包括N本身)个数放CS:80,字符本身则从CS:81开始排放。这些字符可以是参数和定界符等所有在MS-DOS命令行上合法使用的字符。
三、应用举例
假设启动DEBUG调试程序PROG.COM,然后为PROG.COM指定两个参数,接着运行该程序,为此,可顺序输入如下命令:
debug prog.com
nparaml param2
g
G命令运行该程序的情形和在MS-DOS提示符下输入如下命令一样:
prog paraml param2
下面的命令串中,第一条N命令指定FILE1.EXE为随后L命令要装入的文件。第二条N命令指这FILE1.EXE使用的参数。最后的G命令运行FILE1.EXE,如同在MS-DOS提示符下输入命令FILE1 FILE2.DAT FILE2.DAT一样。
nfilel.exe
1
nfile2.dat file3.dat
g
注意,在第二条N命令后,一不能使用L命令;二如使用W命令,MS-DOS将把FILE1.EXE文件存入FILE2.DAT,为避免这种情况,建议在每次即将使用命令L(装入)或W(保存)文件前,先使用N命令指定文件。
DEBUG:O(写输出口)
一、概述
发送一字节值至输出口》
格式
O port byte-value
参数
port
指定输出口地址,该地址可以是一个16-bit的值。
byte-value
指定要发送到输出口的字节值。
相关命令
有关从输入口读入数据的说明,参阅DEBUG T命令。
二、应用举例
把字节值勤4Fh发送至地址为2F8h的输出口,输入如下命令:
02f8 4f
DEBUG:P(proceed)
一、概述
执行循环、重复字符串指令,软中断或子程序;跟踪任何共它类指令的执行。
格式
P[=address][number]
参数
=address
指定要执行的第一条指令的地址。如不指定,则寄存器CS:IP所指定的当前地址为默认的执行地址。
number
指定执行指令的条数。不指定时,默认为1。
相关命令
有关运行内存中程序的说明,参阅DEBUG G命令。
有关执行单条指令的说明,参阅DEBUG T命令。
二、注意事项
控制的转移
P命令把控制转移给调试程序,该程序从指定地址开始循环,重复字符串指令,软中断或子程序,一直到它们运行结束或指字数目的指令已全部执行为止。这时,控制返回到DEBUG。
对参数address的限制
如果参数address中未能指定地址,DEBUG把调试程序CS寄存器的值作为段地址。如果忽略参数address,程序将从CS:IP所指址址开始执行。注意在参数address前须加等号(=)。如果指定地址处的指令不是循环,重复字符串指令,软中断或子程序,P的功能和跟踪命令T相同。
P命令的显示信息
P命令执行后,DEBUG显示该程序各寄存器的内容,所有标志状态以及下一条要执行的指令。
警告:不能使用P命令跟踪只读存储器(ROM)内程序的执行。
三、应用举例
假定调试程序在地址CS:143F处是一条CALL指令。如要运行CALL调用的子程序,然后再返回DEBUG,输入如下命令:
p=143f
程序返回至CALL指令的下一指令处(1422h),DEBUG显示如下格式的结果:
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=2246 ES=2246 SS=2246 CS=2246 IP=1443 NV UP EI PL NZ AC PO NC
2246:1442 7505 JNZ 144A
DEBUG:Q(退出)
一、概述
退出DEBUG,但不保存调试程序。输入Q命令后,控制返回到MS-DOS。
格式
Q
参数
本命令无参数
相关命令
有关保存调试程序的说明,参阅DEBUG W命令。
二、应用举例
需要退出DEBUG时,输入以下命令:
Q
退出DEBUG后,MS-DOS显示MS-DOS提示符。
DEBUG:R(寄存器)
一、概述
显示或修改中央处理器(CPU)各寄存器的内容。
格式
R[register-name]
显示当前所有寄存器和标志位的内容,使用如下格式内容。
R
参数
register-name
指定寄出存器名。
相关命令
有关内存内容显示的说明,参阅DEBUG D命令。
有关汇编内存字节的说明,参阅DEBUG A命令。
二、注意事项
R命令的使用
如指定寄存器名,R命令以十六进制格式显示指定寄存器的16-bit值,后跟一冒号,等待用户输入。如需修改该寄存器的值,键入新值并回车;如下不做修改,直接回车返回到DEBUG提示符下。
有效寄存器名
AX,BX,CX,DX,SP,BP,SI,DI,DS,ES,SS,CS,IP,PC和T都是有效寄存器名,其中IP和PC均被认为是指令指针。
如指定的寄存器名不在上述范围内,DEBUG显示如下信息:
br error
标志寄存器内容的显示
如需显示或修改标志寄存器内容,在R后输入F即可。DEBUG显示两字节的各标志肖前状态。如需修改标志的当前值,参照下表选择输入:
标志名
置位值
清除值
溢出(Overflow)
OV(溢出)
NV(无溢出)
方向(Direction)
DN(递增)
UP(递减)
中断(Iinterrupt)
EI(允许)
DI(禁止)
符号(Sing)
NG(负值)
PL(正值)
零(Zero)
ZR(零)
NZ(非)
辅助进位(Auxi-carry)
AC(有)
NA(无)
奇偶(Parity)
PE(偶)
PO(奇)
进位(Carry)
CY(有)
NC(无)
输入标志值的顺序任意。值与值之间无须加空格。按回车皱起这,R命令结束,未输入新值的标识留原值不变。
R命令的显示信息
如输入的某一标志值多于一个,DEBUG显示如下信息:
df error
如指定的标志不在上表列出的范围内,DEBUG显示如下信息:
bf error
上述两种情况中,凡在非规定值之后输入的值均无效。
系统默认值
启动DEBUG后,段寄存器的值指向自由内存底部,指令指针的位置为0100h,所有标志值为清除值,寄存器SP的值置为FFEEh,其余奇存器的值全部清0。
三、应用举例
输入命令如下:
r
DEBUG将显示所有寄存器和标志位的当前内容以及当前内存单元存放的指令。假定当前单元为CS:11A,将显示类似下面的内容:
AX=0E00 BX=00FF CX=0007 DX=01FF SP=039D BP=0000 SI=005C DI=0000
DS=04BA ES=04BA SS=04BA CS=04BA IP=011A NV UP DI NG NZ AC PE NC
04BA:011A CD21 INT 21
如只需显示各标志状态,输入如下命令:
rf
DEBUG按如下格式显示各标志状态:
NV UP DI NG NZ AC PE NC - _
用户接着可修改标志值,新值的顺序任意,各值之间是否加空格也任意,如:
nv up di ng nz ac pe nc - pleicy
回车后,R命令结束,显示DEBUG提示符。如果需要检查修改结果,输入R或RF命令。DEBUG将显示如下:
NV UP EI PL NZ AC PE CY - _
按回车键,回到DEBUG提示符下。
DEBUG:S(找寻)
一、概述
在指定内在范围内找寻指定的字节值或字符串
格式
S range list
参数
range list
指定找寻范围的起始地址和结束地址。有关参数range有效值的说明参阅DEBUG命令。
list
指定找寻的字节值或字符串。
二、注意事项
如果list中指它的字节值多于一个,DEBUG将在指定范围内找寻与指定的多个字节完全匹配的字节串,但仅显示这些字节中首字节地址。
三、应用举例
如需在CS:100到CS:110的范围内找寻值为41的地址,输入如下命令:
scs:100 110 41
DEBUG按如下格式显示结果:
04BA:0104
04BA:010D
-
下面的命令在CS:100到CS:1A0的范围内找寻字符串“Ph”:
scs:100 1a0 "Ph"
DEBUG:T(跟踪)
一、概述
执行一条指令,显示所有寄存器内容和标志位状态以及执行的指令。
格式:
T[=address][number]
参数
=address
指定DEBUG开始跟踪指令的起始地址。如不指定本参数,跟踪从由CS:IP指向的地址开始。有关address有效值的说明,参阅DEBUG命令。
number
指定待跟踪的指令数。该数必须是十六进制数。省略时,系统默认为1。
相关命令
有关执行循环,重复字符串指令,软中断或子程序的说明,参阅DEBUG P命令。有关执行现在内存中的程序说明,参阅DEBUG G命令。
二、注意事项
跟踪只读存储器内的指令
T命令采用8086或8088微处理器的硬件跟踪方式。所以,可使用T命令跟踪只读存储器(ROM)内指令的执行。
参数address的使用
参数address之前必须加等号(=),以便与参数number相区别。
三、应用举例
输入如下命令:
t
DEBUG将执行由CS:IP指向的那条指令,显示所有寄存器的内容和标志位的状态以及刚才执行的指令。假设CS:IP的当前值为04BA:011A,则DEBUG将显示如下类似信息:
AX=0E00 BX=00FF CX=0007 DX=01FF SP=039D BP=0000 SI=005C DI=0000
DS=04BA ES=04BA SS=04BA CS=04BA IP=011A NV UP DI NG NZ AC PE NC
04BA:011A CD21 INT 21
DEBUG:U(反汇编)
一、概述
对字节进行反汇编并显示相应的源语句,包括地址和字节值。反汇编后生成的代码和汇编程序源文件清单类似。
格式
U[range]
参数
range
指定反汇编的起始地址和结束地址,或起始地址和长度。有关参数address有效值的说明,参阅DEBUG命令。
相关参数
有关字节汇编说明,参阅DEBUG A命令。
有关内存内容显示的说明,参阅DEBUG D命令。
二、注意事项
不带参数的U命令
当不指定把汇编的结束地址或长度时,U命令默认长度为20字节。单独使用U命令时,将从前一个U命令结束处后面的地址开始反汇编。
三、应用举例
从04BA:0100处开始反汇编16(10h)个字节,输入如下命令:
u04ba:100L10
DEBUG将以下列格式显示反汇编的结果:
04BA:0100 206472 AND [si+72], AH
04BA:0103 69 DB 69
04BA:0100 206472 AND [si+72], AH
04BA:0103 69 DB 69
04BA:0104 7665 JBE 016B
04BA:0106 207370 AND [BP+DI+70],DH
04BA:0109 65 DB 65
04BA:010A 63 DB 63
04BA:010B 69 DB 69
04BA:010C 66 DB 66
04BA:010D 69 DB 69
04BA:010E 63 DB 63
04BA:010F 61 DB 61
如只需获取从04BA:0100到04BA:0108的反汇编代码,输入如下命令:
04BA:0100 206472 AND 〔SI+72〕,AH
04BA:0103 69 DB 69
04BA:0104 7665 JBE 016B
04BA:0100 207370 AND [BP+DI+70],DH
DEBUG:W(写盘)
一、概述
把调试文件或内存指定部分的内容写入磁盘文件或指定扇区。
写入磁盘的文件是由DEBUG命令启动时指定。否则是由最近的N命令指定的文件,这两种方法都会在CS:5C处建立包含指定文件名及其参数在内的文件控制块。
写文件时,写入的字节数由BX:CX的值决定并使用如下格式:
W[address]
需要绕开MS-DOS文件系统直接写指定扇区时,使用如下格式:
W address drive start number
警告:因为直接写指定扇是绕开MS-DOS文件系统进行的,一不小心就可能破坏磁盘的文件结构,后果严重。一定要慎重使用。
参数
address
指定内存中将要写入磁盘文件的内容的起始地址。如不指定,以CS:100处为起始地址。有关address有效值的说明,参阅DEBUG命令。
drive
指定写入盘的盘符。本参数值为数值0(=A盘),1(=B盘),2(=C盘),等等。start指定写入的第一个扇区号(十六进制数)。
number
指定写入扇区的个数。
相关命令
有关执行W命令时文件名指定的说明,参阅DEBUG N命令。
有关读入磁盘文件内容或扇区内容的说明,参阅DEBUG L命令。
二、注意事项
无参数执行W命令前BX:CX值的设置
如果前面执行过G,T,P或R命令,那么,无参数执行W命令前应先恢复寄存器BX:CX原来的值。
把修复过的文件写入磁盘。
如果文件已经修改过,但文件名,长度或起始地址未改变,DEBUG仍能正确地把文件写回其原在磁盘中的位置。
W命令使用的限制
对.EXE和.HEX文件不能使用W使命。
三、应用举例
假设要把从CS:100开始的内在内容写入B盘从37H号逻辑扇区开始的26H个扇区中,输入如下命令:
wcs:100 1 37 26
写盘操作完成,DEBUG将显示自己的提示符。
DEBUG:XA(分配扩充内存)
一、概述
分配指定数目的扩充内存页。
使用扩充内存前,必须先行安装符合Lotus/intel/microsoft扩充内存规范(LIM EMS)4.0版的扩充内存设备驱动程序。
格式
XA[count]
count
指定需要分配的每页16K字节的扩充内存页的数目。
相关命令
有关配合扩充内存工作的其他DEBUG命令的说明,参阅DEBUG XD,XM,和XS命令。
二、注意事项
如果要求分配8页扩充内存,输入如下命令:
xa8
如果该命令执行成功,DEBUG显示如下信息:
Handle created=0003
DEBUG:XD(释放分配的扩充内存)
一、概述
释放分配给扩充内存的控制把。
使用扩充内存前,必须先行安装符合Lotus/intel/microsoft扩充内存规范(LIM EMS)4.0版的扩充内存设备驱动程序。
格式
XD[handle]
参数
handle
指定需要解除分配的控制把。
相关使命
有关配合扩充内存工作的其他DEBUG命令的说明,参阅DEBUG XA,XM和XS命令。
二、应用举例
释放已分配的控制把0003,输入如下命令:
xd 0003
如果该命令执行成功,DEBUG显示如下信息:
Handle 0003 deallocated
DEBUG:XM(影像扩充内存页)
一、概述
将属于指定控制把的扩充内存逻辑页映像到扩充内存物理页。
使用扩充内存前,必须先安装符合Lotus/intel/microsoft扩充内存规范(LIM EMS)4.0版的扩充内存设备驱动程序。
格式
XM〔1page〕[ppage][handle]
参数
1page
指定要映到物理页上去的扩充内存逻辑页号。
ppage
指定1page(扩充内存逻辑页号)将要映像到其上的物理页号。
handle
指定控制把号。
相关命令
有关配合扩充内存工作的其他DEBUG命令的说明,参阅DEBUG XA,XD和XS命令。
二、应用举例
把控制把0003的逻辑页5映像到物理页2,输入如下命令:
xm 5 2 0003
如果该命令执行成功,DEBUG将显示如下信息:
Logical page 05 mapped to physical page 02
DEBUG:XS(显示扩充内存状态)
一、概述
将属于指定控制把的扩充内存逻辑页映像到扩充内存物理页。
使用扩充内存前,必须先安装符合Lotus/intel/microsoft扩充内存规范(LIM EMS)4.0版的扩充内存设备驱动程序。
格式
XS
参数
本命令无参数
相关命令
有关配合扩充内存工作的其他DEBUG命令的说明,参阅DEBUG XA,XD,和XM命令。
二、注意事项
DEBUG显示扩充内存状态信息的格式如下:
handle xx has xx pages allocated
physical page xx = frame segment xx
xx of a total xx EMS pages have been allocated
xx of a total xx EMS handles have been allocated
三、应用举例
显示有关扩充内存状态的信息,输入如下命令:
DEBUG将显示类似如下信息:
handle 0000 has 0000 pages allocated
handle 0001 has 0002 pages allocated
physical page 00=frame segment c000
physical page 01=frame segment c4000
physical page 02=frame segment c800
physical page 03=frame segment cc00
2 of a total 80 EMS pages have been allocated
2 of a total FF EMS handles have been allocated