![]() |
#2
菜鸟上路2007-04-29 14:22
做个更详细的补充: fill F range list go G [=address] [addresses] hex H value1 value2 input I port load L [address] [drive] [firstsector] [number] move M range address name N [pathname] [arglist] output O port byte proceed P [=address] [number] quit Q register R [register] search S range list trace T [=address] [value] unassemble U [range] write W [address] [drive] [firstsector] [number] allocate expanded memory XA [#pages] deallocate expanded memory XD [handle] map expanded memory pages XM [Lpage] [Ppage] [handle] display expanded memory status XS 2、 显示和修改寄存器的内容的命令R的用法:-R[积存器名| F] -R ; 这可显示所有寄存器的内容,包括标志寄存器的内容,以及当前CS:IP处的一条指令的机器码和汇编指令,还有涉及到的存储单元内容。如: -R AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=119D ES=119D CS=119D IP=0100 NV UP EI PL NZ NA PO NC 119D:0100 B83412 MOV AX,1234 除PSW外其余寄存器均显示为16进制数据,PSW各标志位的置位/复位(1/0)分别为: OF: OV/NV(Overflow/No Overflow) DF: DN/UP(Down/Up) IF: EI/DI(Enable Interrupt/Disable Interrupt) SF: NG/PL(Negative/Positive) ZF: ZR/NZ(Zero/Not Zero) AF: AC/NA(Auxiliary Carry/No Auxiliary Carry) PF: PE/PO(Parity Even/Parity Odd) CF: CY/NC(Carry/No Carry) -R 寄存器名或标志F ; 修改指定寄存器或标志位的内容,如: -R BX BX 0369 : ; 若不修改,可按ENTER键,否则在冒号后输入要修改的内容如059F回车,则BX的内容有0369修改为059F。 -RF NV UP EI PL NZ NA PO -CY ZR ; 则NC改为CY,NZ改ZR(无序) 内存数据内命令主要有以下三个D、E、F。 3、 显示内存单元的内容命令格式: -D[[段地址:]起始偏移 [终止偏移]] ; 显示指定范围的内存单元内容,如: -D 0BB4:0100 2E F6 06 56 91 40 74 0F-26 F7 47 02 20 00 74 07 ...V.@t.&.G. .t. 0BB4:0110 26 80 7E 00 00 74 22 26-F7 07 10 00 34 00 A3 0B &.~..t"&....4... 0BB4:0120 75 09 26 80 7E 00 00 75-0D EB 0E 3C 00 75 07 26 u.&.~..u...<.u.& 0BB4:0130 80 7E 00 3A 74 03 F9 EB-06 2E 89 36 59 91 F8 5E .~.:t......6Y..^ 0BB4:0140 5A 5D 58 C3 50 51 52 56-53 56 E8 AA 00 5E 2E C7 Z]X.PQRVSV...^.. 0BB4:0150 06 08 92 00 00 2E C7 06-0A 92 00 00 2E C7 06 0C ................ 0BB4:0160 92 00 00 E8 AD 00 72 18-2E A3 08 92 0A DB 74 1A ......r.......t. 0BB4:0170 E8 A0 00 72 6E 2E A3 0A-92 0A DB 74 0D E8 93 00 ...rn......t.... (默认从当前段及偏移地址开始,显示内存单元的128个字节的内容,每行16个字节。显示出内容的格式为:内存起始段地址:偏移地址,16个字节的16进制数据,对应ASCII字符) 4、 修改内存单元的内容: -E[段地址:]起始偏移 [修改内容列表],如: -E 0100 “ABCD” 或 –E 0100 41 42 43 44 将0100H起始偏移单元的内容修改为41H、42H、43H、44H。 -E 100 ; 省略内容列表,边显示边修改 136C:0100 3C.41 3E.42 75.43 70.44 5、 填充内容列表: -F[段地址:]起始偏移 终止偏移 填充内容列表,如: -F 0200 0300 “AB” ; 将偏移地址从0200H到0300H单元的内容都填充为ABAB......AB 内存程序类命令主要有以下5个:A、U、T、P、G。这类指令地址断位一定要准确,否则可能将一条指令拆开造成程序乱套。 6、 编写/修改汇编语句: -A[[段地址:]起始偏移],如: -A100 0BB4:0100 MOV AX,829F 0BB4:0103 MOV BX,2C78 0BB4:0106 ADD AX,BX 0BB4:0108 HLT 0BB4:0109 7、 反汇编命令: -U[[段地址:]起始偏移 [终止偏移]] ; 将指定地址范围的机器码反汇编成汇编指令。如: -U100 0BB4:0100 B89F82 MOV AX,829F 0BB4:0103 BB782C MOV BX,2C78 0BB4:0106 01D8 ADD AX,BX 0BB4:0108 F4 HLT 0BB4:0109 F747022000 TEST WORD PTR [BX+02],0020 0BB4:010E 7407 JZ 0117 0BB4:0110 26 ES: 0BB4:0111 807E0000 CMP BYTE PTR [BP+00],00 0BB4:0115 7422 JZ 0139 0BB4:0117 26 ES: 0BB4:0118 F7071000 TEST WORD PTR [BX],0010 0BB4:011C 3400 XOR AL,00 0BB4:011E A30B75 MOV [750B],AX (未指定终止偏移共显示13行,段地址:偏移地址 机器码 汇编指令) 8、 单步跟踪进入命令: -T[=[段地址:]起始偏移] [指令条数] ; 默认为一条指令,该命令可从指定地址起执行指定条数指令后停下来,每条指令执行后均会显示寄存器内容和状态值。如: -R ; 显示当前寄存器、标志位及当前指令 AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0BB4 ES=0BB4 SS=0BB4 CS=0BB4 IP=0100 NV UP EI PL NZ NA PO NC 0BB4:0100 B89F82 MOV AX,829F -T ; 执行当前一条指令MOV AX,829F,即将829FH送AX,标志位不变 AX=829F BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0BB4 ES=0BB4 SS=0BB4 CS=0BB4 IP=0103 NV UP EI PL NZ NA PO NC 0BB4:0103 BB782C MOV BX,2C78 -T ; 执行当前一条指令MOV BX,2C78,即将2C78H送BX,标志位不变 AX=829F BX=2C78 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0BB4 ES=0BB4 SS=0BB4 CS=0BB4 IP=0106 NV UP EI PL NZ NA PO NC 0BB4:0106 01D8 ADD AX,BX -T ; 执行当前一条指令ADD AX,BX,即将AX加BX送AX,标志位相应改变 AX=AF17 BX=2C78 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0BB4 ES=0BB4 SS=0BB4 CS=0BB4 IP=0108 NV UP EI NG NZ AC PE NC 0BB4:0108 F4 HLT 9、单步跟踪跳过命令: -P[=[段地址:]起始偏移] [指令条数] ; 默认为一条指令,该命令可从指定地址起执行指定条数指令后停下来,每条指令执行后均会显示寄存器内容和状态值。与上一条T命令相比最主要的不同是遇到CALL及INT指令时是否进入子程序内部,T会进入,P不会进入,当成一条指令一次完毕。所以在调试程序时,若子程序需要调试则用T进入,否则用P跳过以节省时间。 10、连续运行命令: -G[=[段地址:]起始偏移] [偏移2 [偏移3 […]]] 起始偏移规定了运行的起始偏移地址,后面的若干偏移均为断点地址。如: -G=100 108 ; 从100H处连续执行到108H处,不包括108H处指令 AX=AF17 BX=2C78 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0BB4 ES=0BB4 SS=0BB4 CS=0BB4 IP=0108 NV UP EI NG NZ AC PE NC 0BB4:0108 F4 HLT 以下三个命令M、C、S既可用于内存数据处理也可用于内存程序处理。注意:内存中的内容既可看成数据也可看成程序,程序是一种特殊的数据而已。程序是由指令构成,指令包含若干个字节的数据。 |
1、如何调用DEBUG程序
语法格式:DEBUG [驱动器名:][路径][文件名]
如有文件名,则将指定的文件调入内存。
如命令中没有指定文件名,则DEBUG可以与正在内存中的内容打交道。DEBUG程序调入后,出现提示符“_”,说明现在系统在DEBUG程序的管理下,所有DEBUG命令只有在出现提示符后才有效。
2、DEBUG对寄存器和标志位的初始化
指令指针寄存器(IP)置为0100H。
AX、BX、CX、DX、BP、SI、DI置为0。若DEBUG调入时指定了文件名,则BX:CX中包含以字节表示的文件长度。
标志清零。
3、有关DEBUG命令的一些共同信息
所有命令都是一个字母,后面跟一个或多个参数,数据是十六进制数;
命令和参数大、小写等价;
命令和参数之间可以用定界符,两个相邻的十六进制数之间必须使用定界符;
按Ctrl+Break可以中止一个命令的执行;
DEBUG可以检查语法错误。
4、显示内存单元内容的命令
格式:D[地址] 或 D[范围]
功能:检查指定范围的存储单元的内容,分两种方式显示。
例:d 2000:0100 d d100 des:0 d1000:0100 02ff
5、修改存储单元内容的命令
用命令中给定的内容表去代替指定范围的内存单元的内容。
格式:E 地址 内容表
例:e ds:100 f3’abc’8d
e 100 30 31 32 33 34 35 36 37
d 100
逐个单元连续修改。
格式:E 地址
E2000:100
填写命令
格式:F 范围 内容表
范围:由起始地址和结束地址组成。
例:f ds:0 8 ‘abc’
检查和修改寄存器内容的命令
格式1:R
功能:显示所有寄存器的内容和全部标志位的状态。
格式2:R 寄存器名
功能:显示和修改一个指定寄存器的内容。
格式3:RF
功能:显示和修改所有标志位的状态。
6、汇编命令A
格式:A[地址]
功能:将用户输入的汇编语言的语句汇编成机器码,存放在指定地址开始的存储单元中。若没有指定地址,则接着上一个汇编命令的最后一个单元开始存放;若前面没有用过汇编命令,则从(CS):100H单元开始存放。
注:Debug不能确定某些操作数涉及到的是字单元还是字节单元,必须用前缀来说明数据类型。
7、跟踪命令T
格式:T[=地址][n]
功能:从指定地址开始(若没有指定地址则从现行的CS:IP处)执行n条指令后停下来,显示每条指令执行完后的所有寄存器和标志位的状态。
8.反汇编命令U
① U [地址];从指定地址开始反汇编32个字节的机器指令;省略地址时,则接着上一个U命令的最后一个单元开始;若第一次使用U命令省略地址,则从当前CS:IP开始(通常是CS:100)。
② U 范围;对指定范围的单元进行反汇编。
-U
-U100
-U100L10
9.运行程序命令G
① G;从CS:IP指向的指令开始执行程序,直到程序结束或遇到INT 3。
② G=地址;从指定地址开始执行程序,直到程序结束或遇到INT 3。
③ G 断点;从CS:IP指向的指令开始执行程序,直到遇到断点。
④G=地址 断点
-G ;从CS:IP指向的指令开始执行程序。
-G=100 ;从指定地址开始执行程序。 -G=100 120