找回密码
 立即加入
搜索

查看: 3667|回复: 26

DEBUG命令详解

[复制链接]
没有明天 发表于 2005-1-15 23:30:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转闽南师范大学。

您需要 登录 才可以下载或查看,没有账号?立即加入

×
<b>Debug:A(汇编)</b>. m! B" \& x2 S' J& ^

3 ^1 a; r& l' S/ k& f1 _) E直接将 8086/8087/8088 记忆码合并到内存。 . w( b: P' b# p: M. l
该命令从汇编语言语句创建可执行的机器码。所有数值都是十六进制格式,必须按一到四个字符输入这些数值。在引用的操作代码(操作码)前指定前缀记忆码。 6 n7 v( J0 ?4 o2 n" Y" J0 G/ e+ H$ L
a [address]
* c" b1 y- K" T: V- o* [参数
' H, X2 e* {; z, d( ~# o8 G; Zaddress
% F0 }) H, Q6 h6 P指定键入汇编语言指令的位置。对 address 使用十六进制值,并键入不以“h”字符结尾的每个值。如果不指定地址,a 将在它上次停止处开始汇编。
# S9 w% k# g( {. [/ M5 w8 r, `有关将数据输入到指定字节中的信息,请参看Debug E(键入)。
* \( v4 v* E1 n! t! z有关反汇编字节的信息,请参看Debug U(反汇编) 2 v$ ?" c( M1 n# y- d- e! g4 q
说明 5 l3 c# }( R8 `" t6 y) S
使用记忆码
, k6 g$ O: k$ n* b2 V6 O段的替代记忆码为 cs:、ds:、es: 和 ss:。远程返回的记忆码是 retf。字符串处理的记忆码必须明确声明字符串大小。例如,使用 movsw 可以移动 16 位的字串,使用 movsb 可以移动 8 位字节串。 8 i* O% H2 V3 P& J: W/ ]5 ^
汇编跳转和调用
7 u1 o" s. u2 r" d9 M0 t1 y汇编程序根据字节替换自动将短、近和远的跳转及调用汇编到目标地址。通过使用 near 或 far 前缀可以替代这样的跳转或调用,如下例所示: ' m* b, a) K7 D, S6 o
-a0100:0500
/ Q9 {) b5 f; l/ N& g0100:0500 jmp 502 ; a 2-byte short jump
, i8 o2 C! Q' L% F7 s) c0100:0502 jmp near 505 ; a 3-byte near jump
) d  X$ ~. Z, H( P& _* b0100:0505 jmp far <st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="50" UnitName="a">50a</st1:chmetcnv> ; a 5-byte far jump 6 i* |* S& a2 Q
可以将 near 前缀缩写为 ne。
# N" ^8 M# P1 f3 d/ x# d- {区分字和字节内存位置
% w1 s  D# a; u: K当某个操作数可以引用某个字内存位置或者字节内存位置时,必须用前缀 word ptr 或者前缀 byte ptr 指定数据类型。可接受的缩写分别是 wo 和 by。以下范例显示两种格式: % s+ w* b/ C& |- m8 E
dec wo [si] 3 q. Z+ E7 z  [1 E) [5 `
neg byte ptr [128]
4 h! b+ y( d6 T. g. L0 e, l: C指定操作数 ; J0 G' ^# l9 t
Debug 使用包括在中括号 ([ ]) 的操作数引用内存地址的习惯用法。这是因为另一方面 Debug 不能区分立即操作数和内存地址的操作数。以下范例显示两种格式:
2 j8 }$ M8 Z6 J# N: Hmov ax,21 ; load AX with 21h 5 c" ~/ z$ i5 k# H. ]
mov ax,[21] ; load AX with the
/ C6 p1 p- v0 L* o; contents of
. T/ ]3 f9 h3 ^4 h; memory location 21h 6 Q$ Y" _# \8 ^' d7 b! _
使用伪指令 , ^# I- `, f% M5 K* z& ]/ Q6 P
使用 a 命令提供两个常用的伪指令:db 操作码,将字节值直接汇编到内存,dw 操作码,将字值直接汇编到内存。以下是两个伪指令的范例: 7 Z5 B  Y9 a) b% ^! \
db 1,2,3,4,"THIS IS AN EXAMPLE" # ^! ^& ~4 M# r: t7 R: `' l
db 'THIS IS A QUOTATION MARK:"'
" B; a7 a0 `. |: H! ?" Udb "THIS IS A QUOTATION MARK:'"
/ V) r8 d- y( V: ]0 tdw 1000,2000,3000,"BACH" & t. d) [+ h; U
范例   g0 B* `3 R* F7 L" }3 O( T
a 命令支持所有形式的间接注册命令,如下例所示: ! n/ ]: }, u$ C3 V5 s- j% f  a
add bx,34[bp+2].[si-1] 5 Z) \9 ?) C% t, b
pop [bp+di] 6 W1 s% O; o. z  W/ X$ n. T& |3 c9 T
push [si] )
+ l3 \5 n5 u, I6 ~9 w. r还支持所有操作码同义词,如下例所示:
4 L( D; u7 |& \3 h' B2 f, Kloopz 100 2 }9 }6 {* W8 F7 i  \: O
loope 100
+ r0 A/ m/ c8 j/ L4 Dja 200
# b8 P! N4 ?9 R1 b7 w( @jnbe 200 + |6 d$ |$ e8 Z; O
对于 8087 操作码,必须指定 wait 或 fwait 前缀,如下例所示: ; w  e% U; b, d$ U$ @3 k
fwait fadd st,st(3) ; this line assembles 4 s! i$ P! h3 ~( W0 z* F2 L7 B# B; p
; an fwait prefix
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
 楼主| 没有明天 发表于 2005-1-15 23:30:27 | 显示全部楼层
<b>Debug:C(比较)</b>
. s+ e( _5 W; {% c0 D/ S; R# t/ ?5 q
比较内存的两个部分。
/ V$ I2 `; h. j& j, X4 R- Y% d/ P. Fc range address
( w$ |/ u% Q7 f$ o' o" |& A2 V: k参数   m* C: v& R2 g# ]; H
range + c2 p3 o& T: T( }2 c
指定要比较的内存第一个区域的起始和结束地址,或起始地址和长度。
$ p! Z3 F$ X6 Zaddress 0 d) B% t. l. E3 ]& ]
指定要比较的第二个内存区域的起始地址。有关有效 address 值的信息,请参看“Debug 说明”。
9 |; }3 O7 H7 W! `2 `0 y$ w说明
& c. `# m# o! u2 e5 S$ A- {如果 range 和 address 内存区域相同,Debug 将不显示任何内容而直接返回到 Debug 提示符。如果有差异,Debug 将按如下格式显示: 0 C4 q! y$ q. ^! L
address1 byte1 byte2 addess2
7 ?' z3 u' V* @" m  r范例 . l# ^# [% ?$ F( O4 `7 L: L
以下命令具有相同效果: % n1 @* b0 [8 u  U$ W
c100,<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"10\" UnitName=\"F\">10f</st1:chmetcnv> <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"300\" UnitName=\"C\">300 </st1:chmetcnv>
6 j* _9 U" m+ _c<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"100\" UnitName=\"l\">100l</st1:chmetcnv>10 300 " Y8 ]' q) o5 q) p
每个命令都对 100h 到 10Fh 的内存数据块与 300h 到 30Fh 的内存数据块进行比较。
8 b& Q$ N9 N! dDebug 响应前面的命令并显示如下信息(假定 DS = <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>):
# r. O7 W/ N, n$ w* T<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:0100 4D E4 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:0300
* B# N# C. f3 Y* b3 r* D<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:0101 67 99 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:0301
2 B6 `/ I, e/ _: G# s' W<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"True\" SourceValue=\"102\" UnitName=\"a\">0102 A</st1:chmetcnv>3 27 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:0302
+ L2 ^( V8 [/ o' X3 i<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:0103 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"True\" SourceValue=\"35\" UnitName=\"F\">35 F</st1:chmetcnv>3 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:0303 ( e* ]7 ?- q& v/ C- a
<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:0104 97 BD <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:0304 . f! Z/ ]% r2 f
<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:0105 04 35 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:0305 7 \0 t+ a3 R" b. |* Q
<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:0107 76 71 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:0307 3 e# P- ?3 a0 d3 y2 D. x: _
<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:0108 E6 11 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:0308 2 V0 h% R$ ~; F( e2 r
<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:0109 19 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"2\" UnitName=\"C\">2C</st1:chmetcnv> <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:0309
( Y8 K8 j' T: p2 p<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"10\" UnitName=\"a\">010A</st1:chmetcnv> 80 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"0\" UnitName=\"a\">0A</st1:chmetcnv> <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"30\" UnitName=\"a\">030A</st1:chmetcnv>
) D6 m, J8 V5 X1 W2 k$ {<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:010B 36 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"7\" UnitName=\"F\">7F</st1:chmetcnv> <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:030B
# N9 d* y! Q1 S. e9 h8 m4 X# d<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"10\" UnitName=\"C\">010C</st1:chmetcnv> BE 22 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"30\" UnitName=\"C\">030C</st1:chmetcnv> 8 p1 k3 d1 {; C
<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:010D 83 93 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:030D
" T. R( o4 M( g* Q: R# f( _<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:010E 49 77 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:030E ' v. {# R. ~' W. h# n% H2 y
<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"10\" UnitName=\"F\">010F</st1:chmetcnv> <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"4\" UnitName=\"F\">4F</st1:chmetcnv> <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"8\" UnitName=\"a\">8A</st1:chmetcnv> <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"30\" UnitName=\"F\">030F</st1:chmetcnv> ; `) p" Q  E8 r
注意列表中缺少地址 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:0106 和 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"197\" UnitName=\"F\">197F</st1:chmetcnv>:0306。这表明那些地址中的值是相同的。
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:30:40 | 显示全部楼层
<b>Debug(转储)</b>
  a" e! @8 K' C8 f$ [
0 K5 ]& {! U7 Z' N' U3 h显示一定范围内存地址的内容。
( f( H5 v6 q  `0 b4 k& wd [range]
! k2 q" e9 S' T+ t参数 : t) i# [, b* t( n; g
range
% p! X) Z1 H, T8 g! d, _指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。如果不指定 range,Debug 程序将从以前 d 命令中所指定的地址范围的末尾开始显示 128 个字节的内容。 # D- K. N3 [' k
有关显示寄存器内容的信息,请参看Debug R(寄存器)。 3 I: F1 U  y9 F2 j: X% v
说明
4 G$ j; `' Z( Y* L0 E) [" ]3 \当使用 d 命令时,Debug 以两个部分显示内存内容:十六进制部分(每个字节的值都用十六进制格式表示)和 ASCII 码部分(每个字节的值都用 ASCII 码字符表示)。每个非打印字符在显示的 ASCII 部分由句号 (.) 表示。每个显示行显示 16 字节的内容,第 8 字节和第 9 字节之间有一个连字符。每个显示行从 16 字节的边界上开始。 5 v# m$ r( q( `8 ^% ~- ^
范例 # Q' T. k" z2 o. _% L$ {
假定键入以下命令:
! J/ h9 A3 G4 A2 H+ L) Jdcs:100 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"10\" UnitName=\"F\">10f</st1:chmetcnv>
! n6 w. t% n, J: X7 n0 l" ODebug 按以下格式显示范围中的内容: + @7 r2 d7 s4 [1 t9 f! q
04BA:0100 54 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"4\" UnitName=\"F\">4F</st1:chmetcnv> 4D 00 53 41 57 59-45 52 00 00 00 00 00 00 TOM.SAWYER...... ; v4 p% }' ?+ k' @: V4 |
如果在没有参数的情况下键入 d 命令,Debug 按以前范例中所描述的内容来编排显示格式。显示的每行以比前一行的地址大 16 个字节(如果是显示 40 列的屏幕,则为 8 个字节)的地址开头。 ' u2 c+ |3 t  y9 T7 q2 @! O% ~
对于后面键入的每个不带参数的 d 命令,Debug 将紧接在最后显示的命令后立即显示字节内容。 9 s7 W4 c& f0 w" B( w0 |+ n9 H: t
如果键入以下命令,Debug 将从 CS:100 开始显示 20h 个字节的内容:
7 N/ Y6 g& ~+ s% E# ~% M6 y  Idcs:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"True\" SourceValue=\"100\" UnitName=\"l\">100 l</st1:chmetcnv> 20
9 C  O9 R( k; t: Z如果键入以下命令,Debug 将显示范围从 CS 段的 100h 到 115h 中所有字节的内容:
. b* Z3 c0 @/ A  u& g# l2 jdcs:100 115 <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:30:58 | 显示全部楼层
<b>Debug:E(键入)</b> * Q3 {7 q* ?, u4 g/ l6 _. A7 K

' @. x$ P) N8 Q7 ]( C将数据输入到内存中指定的地址。
  c! }# l6 t+ z9 a可以按十六进制或 ASCII 格式键入数据。以前存储在指定位置的任何数据全部丢失。 , r4 I- B; Z6 _  j. M7 F5 b6 y) V/ e+ m
e address

    7 g2 x+ {! O9 O7 \0 N7 u参数
    2 L- @4 ]; t+ T3 P4 caddress 3 d3 y* y* a( n* V6 S' }
    指定输入数据的第一个内存位置。
      q( j- W$ i9 W6 V! W( ?/ ulist
    , }" }1 W* P0 Y) G) [% g指定要输入到内存的连续字节中的数据。 ! r; P: g/ M' }. a0 t! b+ o) Z
    有关集成记忆码的信息,请参看Debug A(汇编)。 $ d$ W1 Q; S& H- M8 S+ G4 C
    有关显示内存部分内容的信息,请参看Debug D (转储)。
    1 }! h& I2 }1 ~1 ~, e说明 0 W3 k; o0 X8 H7 P+ x. x
    使用 address 参数 - ~  a  o/ U. ~* p. E
    如果在没有指定可选的 list 参数的值情况下指定 address 的值,Debug 将显示地址和内容,在下一行重复地址,并等待您的输入。此时,您可以执行下列操作之一: . J9 i& A9 B3 m, w& b2 X
    替换字节值。为此,请在当前值后键入新值。如果您键入的值不是有效的十六进制值,或该值包含两个以上的数字,则 Debug 不会回显无效或额外的字符。 ) J% B: i5 x  e3 i& O
    进入下一个字节。为此,请按 SPACEBAR(空格键)。要更改该字节中的值,请在当前值后键入新值。如果按 SPACEBAR(空格键)时,移动超过了 8 位界限,Debug 程序将显示新的一行并在行首显示新地址。
    - q1 v( d: I9 I# V0 l/ ?返回到前一个字节。为此,请按 HYPHEN 键 (-)。可以反复按 HYPHEN 键 (-) 向后移动超过多个字节。在按 HYPHEN 时,Debug 开始新行并显示当前地址和字节值。
    - ~8 l& |1 x' D: _3 I9 ?& S停止执行 e 命令。为此,请按 ENTER 键。在任何字节位置都可以按 ENTER。
    * L+ D) v4 F4 W0 K4 c5 n+ x使用 list 参数
    ) T" R6 W: L, [" ]& e0 D如果指定 list 参数的值,随后的 e 命令将使用列表中的值替换现有的字节值。如果发生错误,将不更改任何字节值。 ' H2 V. M3 Q8 Z, j5 ]
    List 值可以是十六进制字节或字符串。使用空格、逗号或制表符来分隔值。必须将字符串包括在单或双引号中。
    8 o0 a# U7 @: s范例 + V. ?( U. Z' _% g9 X
    假定键入以下命令: / S! D7 m" Y% {' T$ Q4 ^
    ecs:100   V3 L- t- t* M
    Debug 按下面的格式显示第一个字节的内容:
    : P: j) ~8 j! _# k04BA:0100 EB.
    " B3 C' D$ ?- x1 F1 v要将该值更改为 41,请在插入点键入 41,如下所示: + ^5 }, F9 N& l
    04BA:0100 EB.41_ ! K6 I6 `3 r1 D, T- J; U6 s) G" l
    可以用一个 e 命令键入连续的字节值。在键入新值后按 SPACEBAR(空格键),而不是按 ENTER 键。Debug 显示下一个值。在此范例中,如果按三次 SPACEBAR(空格键),Debug 将显示下面的值: 8 W, N/ y* x0 `2 W2 d. v
    04BA:0100 EB.41 10. 00. BC._
    & k/ U" K! C, b1 [& c) D6 I3 |要将十六进制值 BC 更改为 42,请在插入点键入 42,如下所示:
    5 K0 H) Z0 j6 u% @$ y04BA:0100 EB.41 10. 00. BC.42_
    5 D* W1 w9 ]" n假定决定值 10 应该是 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"6\" UnitName=\"F\">6F</st1:chmetcnv>。要纠正该值,请按 HYPHEN 键两次以返回到地址 0101(值 10)。Debug 显示以下内容: & w' {& P" J4 h# S, C* c) H
    04BA:0100 EB.41 10. 00. BC.42- 3 r' i6 x5 M- k8 L  u8 l
    04BA:0102 00.-
      q  P* a) V" I+ K3 f  |04BA:0101 10._ 3 [% h! l- R: q1 g
    在插入点键入 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"6\" UnitName=\"F\">6f</st1:chmetcnv> 更改值,如下所示:
    8 A  F, S% y0 J& p- \2 U04BA:0101 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"10.6\" UnitName=\"F\">10.6f</st1:chmetcnv>_ ! v2 `) I1 k: m" |3 A
    按 ENTER 停止 e 命令并返回到 Debug 提示符下。
    ! [/ T* R& n6 G# G3 t" c) X; r以下是字符串项的范例: 5 k. L6 ^7 v6 _  i+ |2 u% _" |
    eds:100 \"This is the text example\"
    - l, K; x6 H; e( H0 m  I该字符串将从 DS:100 开始填充 24 个字节 <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:31:14 | 显示全部楼层
<b>Debug:F(填充)</b>) U8 q. l! I, E. Z$ O& K

( P- B- G1 t8 F3 h& t使用指定的值填充指定内存区域中的地址。 2 O6 ~# o( D- `( V
可以指定十六进制或 ASCII 格式表示的数据。任何以前存储在指定位置的数据将会丢失。 6 s+ ]% Y, g! y2 W3 j* R
f range list ) t- ?% S. C+ w( l! A
参数 ! [5 h+ g  |) k! y+ n/ q
range 8 Q4 x7 b) S8 X3 c2 r
指定要填充内存区域的起始和结束地址,或起始地址和长度。关于有效的 range 值的信息,请参看“Debug 说明”。 # V% V/ o/ E( G0 A
list
+ C" v* u0 H1 {( `" q指定要输入的数据。List 可以由十六进制数或引号包括起来的字符串组成。 2 K+ K  t! ^" F6 v4 e6 j8 K- c
说明
( |; g2 C0 v: |使用 range 参数
! W! g# _# A8 u如果 range 包含的字节数比 list 中的数值大,Debug 将在 list 中反复指派值,直到 range 中的所有字节全部填充。
8 n7 c7 X' O% H$ l# ?- D# {如果在 range 中的任何内存损坏或不存在,Debug 将显示错误消息并停止 f 命令。 : J$ z2 f0 Q! F$ l
使用 list 参数
! a8 P! o; g2 t/ p6 G8 ]如果 list 包含的数值多于 range 中的字节数,Debug 将忽略 list 中额外的值。 & s! j0 Y/ z  K9 P. B0 @7 L' ?
范例
9 L5 i, t$ J9 g+ z4 L假定键入以下命令:
* Z7 t2 [$ L& k6 y; o& Xf04ba:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"100\" UnitName=\"l\">100l</st1:chmetcnv>100 42 45 52 54 41
6 H. V5 [( P0 l) e9 ?, t8 X作为响应,Debug 使用指定的值填充从 04BA:100 到 04BA:1FF 的内存位置。Debug 重复这五个值直到 100h 个字节全部填满为止。 <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:31:25 | 显示全部楼层
<b>Debug:G(转向)</b>
* _2 m3 r+ X: E7 n/ f) W4 F( n. F. s$ @$ B; f. ]+ M  M( Q
运行当前在内存中的程序。
: L0 D; }6 a* M' L9 o0 p  ig [=address] [breakpoints] 2 R( x- r& y9 Q& b$ h
参数
5 Q! \3 Z5 a1 g9 U* U3 l4 x=address : f" P  `! |6 M! h1 I6 {4 F( }
指定当前在内存中要开始执行的程序地址。如果不指定 address,Windows 2000 将从 CS:IP 寄存器中的当前地址开始执行程序。
/ E+ [8 p3 e% |" {breakpoints
7 j6 k# O1 y" c$ {指定可以设置为 g 命令的部分的 1 到 10 个临时断点。
6 H4 O) S" y6 J; x" ?* E3 ~! S有关执行循环、重复的字符串指令、软件中断或子程序的信息,请参看Debug P(执行)。
& n& _' q6 Z6 O有关执行指令的信息,请参看Debug T(跟踪) <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:31:36 | 显示全部楼层
<b>Debug:H</b><b>(十六进制)</b>
& I0 f3 r9 k; ]3 r0 h  j
2 w( Q0 C0 d: u- O, l* C# ^/ |对指定的两个参数执行十六进制运算。
  J; a# r$ U+ |; {- Th value1 value2
7 ~4 I# ]0 A4 c6 o  Z参数
" r& k7 W* c7 Zvalue1
/ {. ~; f- Y0 m5 ^. w- R代表从 0 到 FFFFh 范围内的任何十六进制数字。
& p2 o( S7 T* r: rvalue2
* V' o/ O- J5 `0 s1 R7 ~代表从 0 到 FFFFh 范围内第二个十六进制数字。 $ s7 I7 Z2 s: D- ]+ N1 ^
说明
" d% k: |- Y5 o; w6 sDebug 首先将指定的两个参数相加,然后从第一个参数中减去第二个参数。这些计算的结果显示在一行中:先计算和,然后计算差。 # c8 `) ^' C, T) v
范例   h- C  s+ ?5 \  R+ D! q& i  A
假定键入以下命令: # {! w+ p8 h$ J2 \2 s# y2 Z+ V
h<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"19\" UnitName=\"F\">19f</st1:chmetcnv> <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"10\" UnitName=\"a\">10a</st1:chmetcnv>
' X+ _: p2 W) Y/ S# n$ JDebug 执行运算并显示以下结果。
! V9 c- X# i6 ~<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"2\" UnitName=\"a\">02A</st1:chmetcnv>9 0095 <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:31:48 | 显示全部楼层
<b>Debug:I(输入)</b>0 ]9 R3 N: V; h2 T

8 ]& ]8 O$ C. x1 m# Y& k从指定的端口读取并显示一个字节值。 , A* D, {; N6 F+ Q
i port
/ I8 c: G( @8 O4 t* p: l& k, V参数
- U* t  a6 I0 L, R1 n4 g+ \* ?) }port 6 b5 ?8 p4 Q( r( s
按地址指定输入端口。地址可以是 16 位的值。 " ~8 L% Q  e( f$ ^
有关将字节值发送到输出端口的信息,请参看Debug O(输出)。 $ @: ~  h8 Z8 _) E  y1 X) ^1 R
范例
* l. D& S( h' H! @& `假定键入以下命令: 0 G& T! _0 Q$ I5 e* H
i<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"2\" UnitName=\"F\">2f</st1:chmetcnv>8
4 D$ P/ D/ ?. c! s4 p同时假定端口的字节值是 42h。Debug 读取该字节,并将其值显示如下:
# f' n! r0 T: _% q$ e42 <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:32:03 | 显示全部楼层
<b>Debug(加载)</b>0 {& k9 d( m$ n8 w: u
! `7 M2 b- L1 r+ q& K1 n
将某个文件或特定磁盘扇区的内容加载到内存。 7 j! O* Z1 k% ]# P: n
要从磁盘文件加载 BX:CX 寄存器中指定的字节数内容,请使用以下语法: + n: U* N9 O' T- f  o
l [address] % O2 J: I8 I$ [5 {
要略过 Windows 2000 文件系统并直接加载特定的扇区,请使用以下语法: 3 N$ ]* Z* d; h  G' h$ {
l address drive start number , X! ^+ K- y- G) C, l% A& d. Q- z6 v# B
参数 6 N0 k( Q4 ?) {6 e
address 8 ~" y6 S$ D. `/ f8 V3 a3 R  v% \' q& K
指定要在其中加载文件或扇区内容的内存位置。如果不指定 address,Debug 将使用 CS 寄存器中的当前地址。 5 H/ I2 P1 s$ i0 T, g/ G" b
drive : p6 k' m  \3 h# P6 @! G
指定包含读取指定扇区的磁盘的驱动器。该值是数值型:0 = A, 1 = B, 2 = C 等。 6 i5 h: F+ R7 |. R
start 8 \4 o" U4 X' o% M& p9 c1 o3 e
指定要加载其内容的第一个扇区的十六进制数。 / t. r" ^2 ]+ N
number
- B' ]/ {5 L( B: J指定要加载其内容的连续扇区的十六进制数。只有要加载特定扇区的内容而不是加载 debug 命令行或最近的 Debug n(名称)命令中指定的文件时,才能使用 drive、start 和 number 参数。
% q, C$ m2 Z) y8 ~; t有关指定用于 l 命令的文件的信息,请参看Debug n(名称)。
: e' p$ p, P6 b' G7 D+ E有关写入调试到磁盘的文件的信息,请参看Debug w(写入)。 9 C: H7 o0 W1 `* X
注意 8 T8 Y2 u3 ~+ _6 e
使用不带参数的 l 命令
3 N$ N- H+ ]5 c0 d# I5 ?1 v) s当使用不带参数的 l 命令时,在 debug 命令行上指定的文件将加载到内存中,从地址 CS:100 开始。Debug 同时将 BX 和 CX 寄存器设置为加载的字节数。如果不在 debug 命令行指定文件,所装入的文件将是最近使用 n 命令经常指定的文件。 # g! q" @; G! N  f8 k5 A3 D8 N
使用具有 address 参数的 1 命令
0 E8 k" Y* |' t4 T  w如果使用带 address 参数的 l 命令,Debug 将从内存位置 address 开始加载文件或指定扇区的内容。
% J6 E3 H5 S7 _使用带全部参数的 l 命令
+ }# N% l& F; M6 [如果使用带所有参数的 l 命令,Debug 将加载指定磁盘扇区的内容而不是加载文件。
% o! Z( g/ d' S8 S9 I# G5 m加载特定扇区的内容 , f) ~" Z# l8 Y
指定范围内的每个扇区均从 drive 读取。Debug 从 start 开始加载,直到在 number 中指定的扇区数中的内容全部被加载。 ; [# N( D; D- s: t; v3 x8 q* C
加载 .exe 文件
4 `) d+ r9 W; T1 vDebug 忽略 .exe 文件的地址 address 参数。如果指定 .exe 文件,Debug 将文件重新定位到 .exe 文件的标题中指定的加载地址。在 .exe 文件被加载到内存前,标题自身从 .exe 文件脱离,因此磁盘上的 .exe 文件大小与内存中的不同。如果要检查整个 .exe 文件,请使用不同的扩展名重命名文件。
7 U; D+ w3 d3 A6 K$ v打开十六进制文件
2 L/ m7 ?) Q& W% C' \Debug 将具有 .hex 扩展名的文件认为十六进制格式文件。键入不带参数的 l 命令,可以加载从十六进制文件中指定的地址处开始的十六进制文件。如果键入的 l 命令包含 address 参数,Debug 将把指定的地址加到在十六进制文件中找到的地址上,以确定起始地址。 # \6 C2 ]) @4 }4 E7 F/ _
范例
1 t$ h  X0 G; Y$ y- k5 s假定启动 Debug 并键入以下命令: % U$ M% t0 I3 H2 f
nfile.com , E2 A- K0 F  C* X/ I5 ~& R
现在可以键入 l 命令以加载 File.com。Debug 将加载文件并显示 Debug 提示符。 9 A, J* t7 e' ~: M" w# |9 [9 y: f
假定需要从驱动器 C 将起始逻辑扇区为 15 (0Fh) 的 109 (6Dh) 个扇区的内容加载到起始地址为 04BA:0100 的内存中。为此,请键入以下命令: ( F  I! g; o2 P, m
l04ba:100 2 <st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"0\" UnitName=\"F\">0f</st1:chmetcnv> 6d <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 没有明天 发表于 2005-1-15 23:32:17 | 显示全部楼层
<b>Debug:M(移动)</b>$ F: R: M9 Z$ P

% U; ^5 e- ^& m3 x$ s, k2 g将一个内存块中的内容复制到另一个内存块中。
$ V4 W' ~2 x- O. Nm range address 0 l: R3 S$ Y1 |* y8 _+ O$ \
参数 ( |+ n2 y7 a7 y& e
range 5 s1 m6 D/ b+ k0 ?" @6 ^% y2 l
指定要复制内容的内存区域的起始和结束地址,或起始地址和长度。
2 L2 T! f5 o0 F2 F! j: C- Aaddress
4 T  S& r$ U$ H# ]指定要将 range 内容复制到该位置的起始地址。 3 ^1 H, O. \. u* @* G4 x
说明
0 ]/ z) H$ a* h+ W0 b! Q复制操作对现有数据的影响 " P  N7 y6 A: H4 y( B) I
如果新数据没有写入正在被复制的数据块中的地址,则源数据将保持不变。但是,如果目标块已经包含数据(就象它在覆盖副本操作中一样),则将改写该数据。(覆盖复制操作是指那些目标数据块部分内容覆盖原数据块部分内容的操作。)
5 Z5 }; D2 M: e5 J& N4 p: z4 S1 A; @执行覆盖复制操作 " L: h7 Q# ]0 y2 ]
m 命令执行目标地址的覆盖复制操作,而不丢失数据。将改写的地址内容首先复制。因此,如果将较高位地址的数据复制到较低位地址,则复制操作从原块的最低位地址开始并向最高位地址进行。反之,如果要将数据从低地址复制到高地址,复制操作从原块的最高地址开始,向最低地址进行。
& Q& R: l4 z- Y! D9 C  G+ _/ y范例 ( A3 H/ \2 J- M: \' P
假定键入以下命令:
; f% w9 g1 b* K2 G/ r0 ~8 E$ E0 mmcs:100 110 cs:500 ' o/ {! @6 z$ {9 t; G$ y
Debug 首先将 CS:110 地址中的内容复制到地址 CS:510 中,然后将 CS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"10\" UnitName=\"F\">10F</st1:chmetcnv> 地址中的内容复制到 CS:<st1:chmetcnv w:st=\"on\" TCSC=\"0\" NumberType=\"1\" Negative=\"False\" HasSpace=\"False\" SourceValue=\"50\" UnitName=\"F\">50F</st1:chmetcnv> 中,如此操作直至将 CS:100 地址中的内容复制到地址 CS:500 中。要查看结果,请使用 Debug d(转储)命令,并使用 m 命令指定目标地址 <BR line-break\"><BR line-break\">
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

手机版|龙江曦月 ( 闽ICP备05009150号-1 )闽公安网备35060202000316

GMT+8, 2025-5-26 00:02 , Processed in 0.066848 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表