来自:mihu16 > 馆藏分类
配色: 字号:
debug命令详解
2017-04-20 | 阅:  转:  |  分享 
  
debug命令详解收藏本文章DEBUG是DOS中的一个外部命令,从DOS1.0起就带有此命令,因此可见此命令的重要性了。虽然此命令的功能非
常强大,可以解决许多问题,可是对许多人来说,尤其是初学者来说,却非常不易掌握。因此,现将DEBUG的命令详细介绍一番,以让大家知道
它的使用。Debug:A(汇编)直接将8086/8087/8088记忆码合并到内存。该命令从汇编语言语句创建可执行的机器码。
所有数值都是十六进制格式,必须按一到四个字符输入这些数值。在引用的操作代码(操作码)前指定前缀记忆码。a[address]参数a
ddress指定键入汇编语言指令的位置。对address使用十六进制值,并键入不以“h”字符结尾的每个值。如果不指定地址,a
将在它上次停止处开始汇编。有关将数据输入到指定字节中的信息,请单击“相关主题”列表中的DebugE(键入)。有关反汇编字节的信
息,请单击“相关主题”列表中的DebugU(反汇编)。说明使用记忆码段的替代记忆码为cs:、ds:、es:和ss:。远程
返回的记忆码是retf。字符串处理的记忆码必须明确声明字符串大小。例如,使用movsw可以移动16位的字串,使用mov
sb可以移动8位字节串。汇编跳转和调用汇编程序根据字节替换自动将短、近和远的跳转及调用汇编到目标地址。通过使用near或
far前缀可以替代这样的跳转或调用,如下例所示:-a0100:05000100:0500jmp502;a2-byte
shortjump0100:0502jmpnear505;a3-bytenearjump0100:0505j
mpfar50a;a5-bytefarjump可以将near前缀缩写为ne。区分字和字节内存位置当某个操作数可
以引用某个字内存位置或者字节内存位置时,必须用前缀wordptr或者前缀byteptr指定数据类型。可接受的缩写分别是
wo和by。以下范例显示两种格式:decwo[si]negbyteptr[128]指定操作数Debug使用包括在
中括号([])的操作数引用内存地址的习惯用法。这是因为另一方面Debug不能区分立即操作数和内存地址的操作数。以下范例显
示两种格式:movax,21;loadAXwith21hmovax,[21];loadAXwiththe;
contentsof;memorylocation21h使用伪指令使用a命令提供两个常用的伪指令:db操作码,将字
节值直接汇编到内存,dw操作码,将字值直接汇编到内存。以下是两个伪指令的范例:db1,2,3,4,"THISISANEX
AMPLE"db''THISISAQUOTATIONMARK:"''db"THISISAQUOTATIONMARK
:''"dw1000,2000,3000,"BACH"范例a命令支持所有形式的间接注册命令,如下例所示:addbx,34[bp
+2].[si-1]pop[bp+di]push[si])还支持所有操作码同义词,如下例所示:loopz100loope
100ja200jnbe200对于8087操作码,必须指定wait或fwait前缀,如下例所示:fwaitfad
dst,st(3);thislineassembles;anfwaitprefixDebug:C(比较)比较内存的
两个部分。crangeaddress参数range指定要比较的内存第一个区域的起始和结束地址,或起始地址和长度。有关有效的r
ange值的信息,请单击“相关主题”列表中的“Debug说明”。address指定要比较的第二个内存区域的起始地址。有关有效
address值的信息,请单击“相关主题”列表中的“Debug说明”。说明如果range和address内存区域相同,
Debug将不显示任何内容而直接返回到Debug提示符。如果有差异,Debug将按如下格式显示:address1byte
1byte2addess2范例以下命令具有相同效果:c100,10f300c100l10300每个命令都对100h到
10Fh的内存数据块与300h到30Fh的内存数据块进行比较。Debug响应前面的命令并显示如下信息(假定DS=
197F):197F:01004DE4197F:0300197F:01016799197F:0301197F:0102
A327197F:0302197F:010335F3197F:0303197F:010497BD197F:030
4197F:01050435197F:0305197F:01077671197F:0307197F:0108E61
1197F:0308197F:0109192C197F:0309197F:010A800A197F:030A197F
:010B367F197F:030B197F:010CBE22197F:030C197F:010D8393197
F:030D197F:010E4977197F:030E197F:010F4F8A197F:030F注意列表中缺少地址
197F:0106和197F:0306。这表明那些地址中的值是相同的。Debug:D(转储)显示一定范围内存地址的内容。d
[range]参数range指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。有关有效的range值的信息,请单击
“相关主题”列表中的“Debug说明”。如果不指定range,Debug程序将从以前d命令中所指定的地址范围的末尾开始显
示128个字节的内容。有关显示寄存器内容的信息,请单击“相关主题”列表中的DebugR(寄存器)。说明当使用d命令时,
Debug以两个部分显示内存内容:十六进制部分(每个字节的值都用十六进制格式表示)和ASCII码部分(每个字节的值都用AS
CII码字符表示)。每个非打印字符在显示的ASCII部分由句号(.)表示。每个显示行显示16字节的内容,第8字节
和第9字节之间有一个连字符。每个显示行从16字节的边界上开始。范例假定键入以下命令:dcs:10010fDebug按以
下格式显示范围中的内容:04BA:0100544F4D0053415759-4552000000000
000TOM.SAWYER......如果在没有参数的情况下键入d命令,Debug按以前范例中所描述的内容来编排显示格式
。显示的每行以比前一行的地址大16个字节(如果是显示40列的屏幕,则为8个字节)的地址开头。对于后面键入的每个不带参数
的d命令,Debug将紧接在最后显示的命令后立即显示字节内容。如果键入以下命令,Debug将从CS:100开始显示2
0h个字节的内容:dcs:100l20如果键入以下命令,Debug将显示范围从CS段的100h到115h中所有
字节的内容:dcs:100115Debug:E(键入)将数据输入到内存中指定的地址。可以按十六进制或ASCII格式键入数据。
以前存储在指定位置的任何数据全部丢失。eaddress[list]参数address指定输入数据的第一个内存位置。list指定
要输入到内存的连续字节中的数据。有关集成记忆码的信息,请单击“相关主题”列表中的DebugA(汇编)。有关显示内存部分内容的信
息,请单击“相关主题”列表中的DebugD(转储)。说明使用address参数如果在没有指定可选的list参数的值情况
下指定address的值,Debug将显示地址和内容,在下一行重复地址,并等待您的输入。此时,您可以执行下列操作之一:替换字
节值。为此,请在当前值后键入新值。如果您键入的值不是有效的十六进制值,或该值包含两个以上的数字,则Debug不会回显无效或额外
的字符。进入下一个字节。为此,请按SPACEBAR(空格键)。要更改该字节中的值,请在当前值后键入新值。如果按SPACEBAR
(空格键)时,移动超过了8位界限,Debug程序将显示新的一行并在行首显示新地址。返回到前一个字节。为此,请按HYPHEN
键(-)。可以反复按HYPHEN键(-)向后移动超过多个字节。在按HYPHEN时,Debug开始新行并显示当前地
址和字节值。停止执行e命令。为此,请按ENTER键。在任何字节位置都可以按ENTER。使用list参数如果指定li
st参数的值,随后的e命令将使用列表中的值替换现有的字节值。如果发生错误,将不更改任何字节值。List值可以是十六进制字节
或字符串。使用空格、逗号或制表符来分隔值。必须将字符串包括在单或双引号中。范例假定键入以下命令:ecs:100Debug按下面的
格式显示第一个字节的内容:04BA:0100EB.要将该值更改为41,请在插入点键入41,如下所示:04BA:0100EB
.41_可以用一个e命令键入连续的字节值。在键入新值后按SPACEBAR(空格键),而不是按ENTER键。Debug显
示下一个值。在此范例中,如果按三次SPACEBAR(空格键),Debug将显示下面的值:04BA:0100EB.4110.
00.BC._要将十六进制值BC更改为42,请在插入点键入42,如下所示:04BA:0100EB.4110.00
.BC.42_假定决定值10应该是6F。要纠正该值,请按HYPHEN键两次以返回到地址0101(值10)。Debug显示以下内容:04BA:0100EB.4110.00.BC.42-04BA:010200.-04BA:010110._在插入点键入6f更改值,如下所示:04BA:010110.6f_按ENTER停止e命令并返回到Debug提示符下。以下是字符串项的范例:eds:100"Thisisthetextexample"该字符串将从DS:100开始填充24个字节
献花(0)
+1
(本文系mihu16首藏)