Debug使用方法

  • 格式:doc
  • 大小:105.50 KB
  • 文档页数:21

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(分配扩充内存,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 1、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

2、 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,这表示两个地址存放的数值相同。

3、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

4、DEGUG: E(输入数据) 一、概述 输入数据到指定内存。 输入的数据可为16进制数,也可为ASCII字符。指定内存在输入新数据后,原先的内容丢失。