当前位置:
文档之家› 微机原理 debug指令详解
微机原理 debug指令详解
微机原理debug指令详解
一、DEBUG概述
DEBUG是在DOS状态下面供程序员使用的程序调试工具。它可以用来检查内存中任何地址中的内容以及修改特定地址中的内容。DEBUG还可以用于逐指令执行某个程序,追踪程序的执行过程,比较一条指令执行前后数值变化情况,读写文件与磁盘扇区。此外,DEBUG还可以用于读写端口中的数值。
参数说明:[地址]指定存放键入汇编语言指令的内存单元的位置。
★C命令
格式:C[源地址范围][目的地址]
功能:比较两内存区域中的内容是否相同。若不同则按字节显示其地址和内容,若相同则不显示任何内容。
参数说明:[源地址范围]指定要比较的内存第一个区域的起始和结束地址,或起始地址和长度。[目的地址]指定要比较的第二个内存区域的起始地址。
格式:E[地址] [字节串]或E[地址]
功能:从指定的地址开始修改内存值。参数说明:[地址]指定存放[字节串]第一个内存的位置,[字节串]是要放入内存单元中的数据。
★F命令
格式:F[地址范围] [字节或字节串]
功能:将要填写的字节或字节串填入由地址范围指定的存储器中。
参数说明:[地址范围]指定要填充内存区域的起始和结束地址,或起始地址和长度。[字节或字节串]指定要输入的数据,可以由十六进制数或引号包括起来的字符串组成。
功能:定义DEBUG使用的文件。
参数说明:[盘号: ] [路径] [文件名] [扩展名]指定文件所在的盘符,路径,文件名和扩展名。
★O命令
格式:O[端口地址] [数据]
功ቤተ መጻሕፍቲ ባይዱ:发送数据(字节)到指定的输出端口。
参数说明:[端口地址]指定要写入数据的端口地址,[数据]指定要向[端口地址]中写入的字节值。
注意:在D命令中若不指定段寄存器,默认规定为DS。
★E命令使用说明:当使用E命令时,有两种使用格式: 1、用E命令中包含的字节串替换从指定的地址开始的多个字节的内容;2、E命令后不跟字节串,则允许按顺序方式显示和修改内存值,按下空格键显示下一字节内容,若想修改,直接输入相应值;按下减号键显示上一字节内容,若想修改,直接输入相应值。3、停止执行e命令。按ENTER键。在任何字节位置都可以按ENTER。
0AF6:0101 C0 00 1000:0301
0AF6:0102 89 00 1000:0302
0AF6:0103 D8 00 1000:0303
0AF6:0104 65 00 1000:0304
0AF6:0105 66 00 1000:0305
★D命令使用
说明:当使用d命令时,Debug分两个部分显示内存单元内容:左边显示内存单元中存放的十六进制数;右边显示左边的十六进制所表示的ASCII字符,所有不可打印字符用句号(.)表示。每行显示16个字节的内容,在第八和第九个字节之间有一个连字符“–“。
★L命令
格式:L[地址][盘号:][逻辑扇区号][扇区数]
功能:将一个文件或盘的绝对扇区装入存储器。
参数说明:[地址]指定要在其中加载文件或扇区内容的内存空间的起始位置。[盘号:]指定包含读取指定扇区的磁盘的驱动器。该值是数值型,表示为:0 = A, 1 = B, 2 = C,……等。[逻辑扇区号]指定要加载其内容的第一个扇区的十六进制数。[扇区数]指定要加载其内容的连续扇区的十六进制数。
格式:S[地址范围] [字符串]
功能:在指定的地址范围内查找给定的字符串。
参数说明:[地址范围]指定要搜索范围的开始和结束地址。[字符串]指定要搜索的字节值或字符串。字符串应包括在引号中。
★T命令
格式:T[=地址] [指令条数]
功能:逐条跟踪程序的执行,每条指令执行后都将显示各寄存器的内容。
参数说明:[=地址]指定第一条要执行指令的位置。如果不指定地址,则默认地址是在CS:IP寄存器中指定的当前地址,[指令条数]指定在将控制返回给Debug之前要执行的指令数,默认值为1。
DEBUG输入数据时有两种方法:提示方法和非提示方法。在提示方法下,输入要求输入数据的命令,后跟保存数据的地址。执行后可以看到该地址中已有的内容及一个冒号提示符。此时可以在提示符下输入一个新的值或者按下回车键或CTRL+C回到“—”提示符。在非提示方法下,输入保持数据的内存地址以及要输入的数据。DEBUG的启动:进入DOS状态下,键入DEBUG,按ENTER键,如:C:\>DEBUG,则屏幕显示:-
★H命令
格式:H[数值][数值]
功能:分别显示两个十六进制数相加的和以及第一个数减去第二个数的差。
参数说明:[数值]表示从0到FFFFh范围内的任何十六进制数字。
★I命令
格式:I[端口地址]
功能:从指定的端口输入并显示(用十六进制)指定端口中的数据(字节)。参数说明:[端口地址]指定要读取数据的端口地址。
★P命令
格式:P[=地址] [数据]
功能:执行一个子程序调用指令,循环指令,中断指令或一个重复字符串指令,停止在下一条指令上。
参数说明:[=地址]指定第一条要执行指令的位置。如果不指定地址,则默认地址是在CS:IP寄存器中指定的当前地址,[数据]指定在将控制返回给Debug之前要执行的指令数,默认值为1。
0100:0100 dec word ptr [100]
0100:0102 dec wo ptr [100]
0100:0105 dec byte ptr [100] 2.在DEBUG下,应注意区分立即操作数和内存地址的操作数,使用包括在中括号([ ])中的操作数表示内存地址。3.在DEBUG下,能够使用的伪指令仅有DB和DW两个,分别用于定义字节和字操作数,此时定义的操作数被存放在该定义指令所在的内存空间中。如下列所示(注意内存空间的变换,why?):-a 0100:0100
★D命令
格式:D[地址]或D[起始地址][目的地址]
功能:以内存映象方式显示内存中的数据。参数说明:指定要显示内容的内存单元的起始地址和结束地址,或起始地址和长度。如果不指定[地址],Debug将从以前d命令中所指定的地址范围的末尾开始显示128个字节的内容;第一次从DS:100处开始显示。
★E命令
★M命令
格式:M[地址范围][起始地址]
功能:把地址范围内的存储器单元的内容移到起始地址的指定地址中
参数说明:[地址范围]指定要复制内容的内存区域的起始和结束地址,或起始地址和长度。[起始地址]指定要将range内容复制到该位置的起始地址。
★N命令
格式:N[盘号: ] [路径] [文件名] [扩展名]
★G命令
格式:G[=起始地址] [[断点]……]
功能:执行正在调试的程序,当达到断点时停止执行,并且显示寄存器标志和下一条要执行的命令。参数说明:[=起始地址]指定当前在内存中要开始执行的指令所在的内存单元的地址。如果不指定[=起始地址],DEBUG将从CS:IP寄存器中的当前地址开始执行程序。[[断点]……]指定可以设置为g命令的部分的1到10个临时断点。
从键盘键入下面命令:-d cs:10010fDebug按以下格式显示地址范围中的内容(假定CS=0AF6):
0AF6:0100 77 61 6E 67 78 69 616F-696A6B FF 0E 00 01 FF wangxiaoijk…..键入以下命令,Debug将从CS:100开始显示20h个字节的内容:-d cs:100 l20键入以下命令,Debug将显示范围从DS段的100h到115h中所有字节的内容:-d 100 115
0100:0100 DB ‘ABCDEFG’
0100:0107
★C命令使用说明:如果[源地址范围]和[目的地址]中内存单元的数据相同,Debug将不显示任何内容而直接返回到Debug提示符。如果有差异,Debug将按如下格式显示:[源地址]源地址中内容目的地址中内容[目的地址]
如下列所示:
-C CS:100 105 DS:300;(假定CS=0AF6;DS=1000)0AF6:0100 88 00 1000:0300
0100:0100 jmp 102
0100:0102 jmp near 105
0100:0105 jmp far10a2.汇编语言指令所涉及到的操作数可以是字操作数也可以是字节操作数,在语句不能判别操作数的类型时,可以使用前缀word ptr或者前缀byte ptr指定操作数的类型。缩写分别是:wo和by。如下列所示:-a0100:0100
注意:
1.若地址部分只输入偏移量,则E命令认为段包括在DS寄存器中。
2. [字节串]的值可以是十六进制字节或字符串。使用空格、逗号或制表符来分隔值。必须将字符串包括在单或双引号中。
3.使用E命令后,内存单元中原来的数据将丢失,或者说被新输入的数据覆盖。从键盘键入下面命令:-E 100 Debug按下面的格式显示第一个字节的内容(假定DS=0AF6):0AF6:0100 EB.要将该值更改为61,请在插入点键入(使用符号”_”表示) 61,如下所示:0AF6:0100 AB.61_此时,若按下空格键,将显示下一个内存单元中的内容: 0AF6:0100 AB.61 EF._此时,又可以在插入点键入新的内容,改写当前显示的内存内容,若不需要改写当前内存单元的内容,可以直接按下空格键,将显示下一个内存单元的内容,如此,一直到按ENTER停止e命令并返回到Debug提示符下。若使用减号键,操作和按下空格键一样,区别在于将显示上一个内存单元的内容。
★U命令
格式:U[起始地址]或者[地址范围]
功能:将内存中的内容转换为汇编语句。
参数说明:[起始地址]或者[地址范围]指定要反汇编代码的起始地址和结束地址,或起始地址和长度。
★W命令
格式:W[地址] [盘符:] [起始扇区] [扇区数]
功能:将内存中的数据写入磁盘中。
参数说明:[地址]指定要写到磁盘文件的文件或部分文件的起始内存地址。如果不指定address,Debug程序将从CS:100开始。[盘符:]指定包含目标盘的驱动器。该值是数值型:0 = A, 1 = B, 2 = C,等等。[起始扇区]指定要写入第一个扇区的十六进制数。[扇区数]指定要写入的扇区数。