调试程序工具DEBUG.doc
文本预览下载声明
调试程序工具DEBUG
Debug是DOS、Windows都提供的实模式(8086方式)程序的调试工具。使用它可以检查和改变存储内容,调试和运行程序,还可以随时中断程序的运行,进行数据检查和修改。
Debug的进入和退出
Debug是在DOS方式下使用的程序。我们在进入Debug前,应先进入到DOS方式。用以下方法可以进入DOS。
重新启动计算机,进入DOS方式,此时进入的是实模式的DOS。
在Windows中进入DOS方式,此时进入的是虚拟8086模式的DOS。
下面是在Windows XP中进入Debug的一种方法,在其它Windows版本中类似。
选【开始】菜单中的【运行】命令,打开【运行】对话框,在文本框中输入“command”后,单击【确定】按钮。
本章中的例子默认Debug程序在驱动器C中,如果你的系统设置与此假设不同,请变更驱动器或目录。
在DOS目录下键入DEBUG的名称,就可以进入DEBUG程序。键入“DEBUG”不分大小写。DEBUG提示符是“-”,此时,你就可以输入DEBUG的命令了。
退出命令Q,输入Q并按Enter回车键就退出DEBUG运行环境返回到DOS目录下。
寄存器内容的检查和修改
可以通过寄存器命令对CPU内部的寄存器内容进行检查,并可以修改寄存器的内容。
指令格式:R 寄存器名称
指令尖括号内容是指令可选部分,如果没有输入寄存器名称,使用R指令将显示所有寄存器的内容;否则将只显示输入名称的寄存器的内容。
输入R命令并按回车键,DEBUG将显示三行信息。第一行显示了通用寄存器、指针寄存器和索引寄存器的内容。第二行显示了段寄存器的内容、指令指针的当前值以及标志寄存器位。第二行后面的几个代码“NV UP … NC”表示标志寄存器中的8位状态。标志寄存器在DEBUG中的表示方式在后面加以说明。第三行显示了程序将要执行的指令,显示了通过CS:IP发出的指令。
在刚开始进入DEBUG时,通用寄存器的初始值会设为零,标志位全部复位。虽然段寄存器在不同的系统中具有不同的内容,但是同一个系统中各个段寄存器的值都是一样的,这一点是由操作系统决定。本例中段寄存器的值是17FE。由于段寄存器的值是操作系统默认的,所以千万不要改变它。
修改寄存器内容,如图在R指令后输入AX寄存器,下一行显示AX寄存器的内容是“0000”,第三行出现冒号,在这里输入新的值后按回车键AX寄存器被新的值取代,直接按回车键寄存器的内容不变。
使用R指令不能单独调用通用寄存器的高8位和低8位寄存器,例如:-r ah 或 –r al是错误的。
对DEBUG中的程序进行编码及运行
A命令用于将汇编语言命令输入到存储器中。
命令格式:A 起始地址
起始地址可以用偏移量来表示,在这种情况下它默认为代码段的偏移量;否则,就需要指定具体的段寄存器。输入“A 100”和“A CS:100”得到的结果是一样的。在命令提示符“-”后面输入此命令时,DEBUG就会提示你开始进入汇编语言命令输入,在地址提示符下直接按回车将结束指令输入。在DEBUG环境下输入汇编语言指令操作数采用立即寻址方式时默认的是十六进制形式。
当你输入指令到偏移地址为0100的存储单元中,DEBUG将这条指令转换为机器语言,并放在0100到0102之间,然后提示你输入下一条指令,这条指令就会被存储到偏移地址0103的存储单元中。注意:不要从低于100偏移地址单元开始汇编。开始的100H(256)字节是DOS预留的,不能用于你编写的程序。
U 反汇编指令
反汇编指令显示出存储器中的机器代码以及相应的汇编语言指令。
指令格式:U 起始地址 结束地址
U 起始地址 十六进制表示的字节数
反汇编是将存储在存储器中的机器代码转换成汇编语言指令。“-U 100 10B”是第一种格式,“-U 100 LB”是第二种格式,其中“L”表示长度,“B”是字节数。反汇编显示出“17FE:0100”是代码段段地址和指令的偏移地址,“B80100”是“MOV AX,0001”的机器指令。如果输入U命令后面不带地址直接回车,DEBUG将显示从CS:IP开始的32个字节。连续输入将继续显示。
执行命令
执行命令请求DEBUG执行给出地址范围之间的所有指令。
指令格式:G =起始地址 终止地址
如果没有给出地址,DEBUG就从CS:IP开始执行指令直到到达终止点。
当只给出指令“-G”,从当前指令指针(CS:IP)指定的指令开始执行直到遇到“INT 3”终止程序指令,屏幕显示当前寄存器的值和标志位的状态。指令“-G=100 109”是从起始偏移地址为0100处开始执行直到偏移地址是0109处停止,显示当前各个寄存器的值和标志位的状态。
跟踪命令
用跟踪命令可以在程序的执行过程中同时跟踪一条或多条指令,对寄存器和数据程序功
显示全部