debug的使用方法和简单的例子
DEBUG的使用及调试方法
DEBUG的使用及调试方法调试(debugging)是软件开发过程中一项重要且必不可少的工作。
它是指通过对软件系统进行错误检测、诊断和修正,以确保软件正常运行并满足预期功能。
调试是一个迭代的过程,需要程序员使用一系列的调试工具、技巧和方法来定位和解决问题。
下面我将介绍一些常用的调试工具和技巧,以帮助开发者更高效地进行调试。
1. 打印日志:在代码中插入打印语句,用于输出变量的值、函数的执行信息等。
在调试中通常使用print语句或者日志库(如Python的logging模块)来打印相关信息。
这种方法简单易用,适用于小规模的调试。
2.断点调试:现代集成开发环境(IDE)通常都支持断点调试。
通过在其中一行代码设置断点,程序执行到该行时会停止,然后可以逐步执行代码、检查变量的值,甚至修改变量的值。
IDE还提供了查看变量、调用堆栈、监视表达式等功能,可以帮助开发者更直观地了解程序的执行过程。
3. 单元测试:单元测试是一种对软件组件进行测试的方法,可以自动化地检测代码中的错误和异常情况。
通过编写各种情况的测试用例,开发者可以快速定位问题所在,并修复错误。
常见的单元测试框架有JUnit (Java)和unittest(Python)等。
4. 追踪调试:追踪调试是一种通过记录程序执行的相关信息来分析问题的调试方法。
在追踪调试中,开发者可以记录程序的执行轨迹、函数的调用栈等信息,并根据这些信息来定位问题。
常见的追踪调试工具有DTrace(UNIX/LINUX)、Traceview(Android)等。
5. 内存调试:内存泄漏是一个常见的问题,特别是在C/C++语言中。
内存调试工具可以帮助开发者检测和修复内存泄漏、内存访问错误等问题。
常见的内存调试工具有Valgrind(UNIX/LINUX)、Dr. Memory(Windows)等。
6. 远程调试:当软件运行在远程服务器或者其他设备上时,开发者可以通过远程调试的方式来诊断问题。
DEBUG的详细用法(自己测试)
将机器指令程序送到起始地址为200H单元
-E 200 B2, 65, B4, 02, CD, 21, CD, 20
执行机器指令程序
-G=200
e
Program terminated normally
示例二:显示修改寄存器内容
5.读写磁盘
-N [d:][PATH]文件名.扩展名 指定想要读写的磁盘文件
-W 内存地址 将指定内存块写入文件
-L [内存地址] 将文件调如内存
修改寄存器
-R AX
AX 0000
:1234
-R
AX=1234 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B76 ES=0B76 SS=0B76 CS=0B76 IP=0100 NV UP EI PL NZ NA PO NC
0B76:1006 CD20 INT 20
示例四:执行程序
单步执行
-T=0B76:1000
AX=0234 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000
符号标志SF(Sign flag) NG(1) PL(0)
零标志ZF(Zero flag) ZR(1) NZ(0)
2010-02-24 20:01 DEBUG详细用法DEBUG详细用法
DEBUG命令一览
1.读写寄存器
-R 显示所有寄存器内容
-R 寄存器名 显示和修改指定寄存器内容
示例一:DEBUG环境下建立和汇编程序
输入并汇编程序
-A 100
实验一、DEBUG的使用方法
实验一、DEBUG的使用DEBUG是为汇编语言设计的一种调试工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
一、DEBUG程序的调用在Windows XP中启动DEBUG程序,可单击“开始”按钮,依次选择“所有程序”、“附件”、“命令提示符”,在DOS的提示符下,键入DEBUG并按回车键。
或者单击“开始”按钮,选择“运行”,在打开的“运行”对话框中输入“DEBUG”并按回车键。
在DEBUG程序调入后,将出现提示符-,此时就可用DEBUG命令来调试程序。
二、DEBUG的主要命令1、显示存储单元的命令D(DUMP),格式为:_D[address]或_D[range]例如,按指定范围显示存储单元内容的方法为:-d100 12018E4:0100 c7 06 04 02 38 01 c7 06-06 02 00 02 c7 06 08 02 G...8.G.....G... 18E4:0110 02 02 bb 04 02 e8 02 00-CD 20 50 51 56 57 8B 37 ..;..h..M PQVW.718E4:0120 8B其中0100至0120是DEBUG显示的单元内容,左边用十六进制表示每个字节,右边用ASCII字符表示每个字节,·表示不可显示的字符。
这里没有指定段地址,D命令自动显示DS段的内容。
如果只指定首地址,则显示从首地址开始的80个字节的内容。
如果完全没有指定地址,则显示上一个D命令显示的最后一个单元后的内容。
2、修改存储单元内容的命令有两种。
·输入命令E,有两种格式如下:第一种格式可以用给定的内容表来替代指定范围的存储单元内容。
命令格式为:-E address [list]例如,-E DS:100 F3 'XYZ'8D其中F3,'X','Y','Z'和8D各占一个字节,该命令可以用这五个字节来替代存储单元DS:0100到0104的原先的内容。
DEBUG的使用方法
DEBUG程序的使用一、在DOS的提示符下,可如下键入Debug启动调试程序:DEBUG [路径\文件名] [参数1] [参数2]Debug后可以不带文件名,仅运行Debug程序;需要时,再用N和L命令调入被调试程序。
命令中可以带有被调试程序的文件名,则运行Debug的同时,还将指定的程序调入主存;参数1/2是被调试程序所需要的参数。
在Debug程序调入后,根据有无被调试程序及其类型相应设置寄存器组的内容,发出Debug的提示符“-”,此时就可用Debug命令来调试程序。
运行Debug程序时,如果不带被调试程序,则所有段寄存器值相等,都指向当前可用的主存段;除SP之外的通用寄存器都设置为0,而SP指示当前堆栈顶在这个段的尾部;IP=0100h;状态标志都是清0状态。
运行Debug程序时,如果带入的被调试程序扩展名不是.EXE,则BX.CX 包含被调试文件大小的字节数(BX为高16位),其他同不带被调试程序的情况。
运行Debug程序时,如果带入的被调试程序扩展名是.EXE,则需要重新定位。
此时,CS : IP和SS : SP根据被调试程序确定,分别指向代码段和堆栈段。
DS=ES指向当前可用的主存段,BX.CX包含被调试文件大小的字节数(BX为高16位),其他通用寄存器为0,状态标志都是清0状态。
二、DEBUG命令的格式Debug的命令都是一个字母,后跟一个或多个参数:字母[参数]命令的使用中注意:①字母不分大小写;②只使用16进制数,没有后缀字母;③分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数间可无分隔符;④每个命令只有按了回车键后才有效,可以用Ctrl+Break中止命令的执行;⑤命令如果不符合Debug的规则,则将以“error”提示,并用“^”指示错误位置。
许多命令的参数是主存逻辑地址,形式是“段基地址: 偏移地址”。
其中,段基地址可以是段寄存器或数值;偏移地址是数值。
如果不输入段地址,则采用默认值,可以是缺省段寄存器值。
debug常见命令使用说明
五、DEBUG调试程序DEBUG.EXE程序是专门为分析、研制和开发汇编语言程序而设计的一种调试工具,具有跟踪程序执行、观察中间运行结果、显示和修改寄存器或存储单元内容等多种功能。
它能使程序设计人员或用户触及到机器内部,因此可以说它是80X86CPU的心灵窗口,也是我们学习汇编语言必须掌握的调试工具。
1)DEBUG程序使用在DOS提示符下键入命令:C>DEBUG [盘符:][路径][文件名.EXE][参数1][参数2]这时屏幕上出现DEBUG的提示符“-”,表示系统在DEBUG管理之下,此时可以用DEBUG 进行程序调试。
若所有选项省略,仅把DEBUG装入内存,可对当前内存中的内容进行调试,或者再用N和L命令,从指定盘上装入要调试的程序;若命令行中有文件名,则DOS把DEBUG 程序调入内存后,再由DEBUG将指定的文件名装入内存。
2)DEBUG的常用命令(1)汇编命令A格式:A[起始地址]功能:将输入源程序的指令汇编成目标代码并从指定地址单元开始存放。
若缺省起始地址,则从当前CS:100地址开始存放。
A命令按行汇编,主要是用于小段程序的汇编或对目标程序的修改。
(2)反汇编命令U格式1:U[起始地址]格式2:U[起始地址][结束地址|字节数]功能:格式1从指定起始地址处开始将32个字节的目标代码转换成汇编指令形式,缺省起始地址,则从当前地址CS:IP开始。
格式2将指定范围的内存单元中的目标代码转换成汇编指令。
(3)显示、修改寄存器命令R格式:R[寄存器名]功能:若给出寄存器名,则显示该寄存器的内容并可进行修改。
缺省寄存器名,则按以下格式显示所有寄存器的内容及当前值(不能修改)。
AX=0000 BX=0004 CX=0020 DX=0000 SP=0080 BP=0000 SI=0000DI=0000 DS=3000 ES=23A0 CS=138E IP=0000NV UP DI PL NZ NA PO NC138E:0000 MOV AX,1234-R AX ;输入命令AX 0014 ;显示AX的内容:;供修改,不修改按回车。
实验一 Debug命令的使用.
1560:0100 mov ah,9
1560:0102 mov dx,109
1560:0105 int 21h ;显示字符串HELLO
1560:0107 int 20h
1560:0109 db "hello$"
1560:010F ;回车结束
—G ;运行程序
hello
提示:在DEBUG环境下输入程序段时要省掉立即数后面的字符“H”
1、MOV指令的调试:(先不做
程序段:MOV AL, 55H
MOV AH, AL
MOV BX, 1000H
MOV BYTE PTR[BX], 66H(将66H放到以寄存器间接寻址的字节单元中,-d查看
MOV WORD PTR[BX+2], 77H (将77H放到以寄存器间接寻址的字单元中, -d查看
应用:常用于在调试过程中检查变量的值。
(5单步执行命令T,格式为:
- T [=地址]
功能:从指定地址执行一条指令后停下来,显示寄存器内容和状态值。若未指定地址,则执行当前指令的下一条指令。
(6反汇编命令U ,格式为:
-U [地址]或-U范围
功能:从制定地址开始,反汇编32个字节,或对指定范围内的主存内容进行反汇编。若没有指定地址,则接着上一个U命令的最后一个单元开始;若还没有使用过U命令,则从当前CS:IP开始。例如:
1D命令(显示:-d, -d 0af9:0100 , -d 0af9:0100 0107,
-d ds :0100 0107 , -d 0100 0107,
-d 0100 L 8
2E命令(修改:-e 0af9 ; 0100 41 ‘a’, -e 0100 ‘ABCD’
debug使用教程
实验一调试工具的使用方法训练一、实验目的1.熟悉调试工具DEBUG的使用方法。
2.理解汇编指令、存储单元和寄存器等有关概念。
3.能够对简单的汇编语言程序进行调试。
二、实验设备PC机一台。
三、实验内容及步骤DEBUG是DOS操作系统为汇编语言程序设计者和系统管理员提供的一个通用调试工具,利用DEBUG可以读写、传送、比较、查找和显示存储器单元内容,设置程序起始执行地址或断点,执行程序或分段执行程序,跟踪程序执行,显示处理器状态,汇编或反汇编程序等。
用DEBUG编程简单、方便和直观,可以直接查看程序执行情况,便于熟悉和理解指令,掌握基本编程技巧。
DEBUG只使用十六进制表示数据(十六进制数后不加“H”),屏幕的显示数据形式如下:1400:0100 24 65 6E 64 73 0D 0A 20 - 20 63 6F 64 65 20 20 24 *ends..code * 1400:0110 73 65 67 6D 65 6E 74 0D - 0A 20 20 20 20 20 20 24 segment.. * …………1400:0170 24 61 78 2c 30 0D 0A 09 - 20 20 20 20 70 75 73 68 *ax,0 push屏幕每行显示内容分为三部分,一行共显示十六个字节单元的内容。
第一部分是本行所显示的16个字节数据在存储器中的起始存放地址;第二部分是以十六进制显示的16个字节数据;第三部分是将本行所显示字节数据看作ASCII码时显示的字符,若某字节数据对应不可显示的ASCII码,则显示一个“.”字符代替该字节数据的显示字符。
DEBUG只有十几条单字母命令,功能强且易掌握,常用DEBUG命令如下:1)DEBUG的进入和退出进入DEBUG时,键入如下命令:H:\> DEBUG-“-”是DEBUG的命令提示符,表明已进入DEBUG状态。
在“-”提示符之后,可以键入DEBUG命令。
《Debug常用命令的使用方法》
一、熟悉和掌握如下Debug常用命令的使用方法:R,D,E,A,U,T,P,G,QR 显示和修改寄存器的内容D 显示寄存器单元的内容E 显示和修改存储单元的内容A 汇编命令U 反汇编命令T 执行一条或多条指令P 逐条执行指令G 设置断点并启动运行被调试程序Q 结束并推出DEBUG程序二、熟悉和掌握在Debug中运用MOV、AND、OR、XOR、NOT指令进行二进制数实验题目一: 已知 a = 00111000B, b= 11000111B, 试求(1) a AND b(2) a OR b(3) a XOR b(4) NOT a实验内容: a AND b-A18AE:0100 MOV AL,3818AE:0102 MOV BL,C718AE:0104 AND AL,BL18AE:0106实验步骤:-RAX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=18AE ES=18AE SS=18AE CS=18AE IP=0100 NV UP EI PL NZ NA PO NC 18AE:0100 B038 MOV AL,38-PAX=0038 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=18AE ES=18AE SS=18AE CS=18AE IP=0102 NV UP EI PL NZ NA PO NC 18AE:0102 B3C7 MOV BL,C7-PAX=0038 BX=00C7 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=18AE ES=18AE SS=18AE CS=18AE IP=0104 NV UP EI PL NZ NA PO NC 18AE:0104 20D8 AND AL,BL-PAX=0000 BX=00C7 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=18AE ES=18AE SS=18AE CS=18AE IP=0106 NV UP EI PL ZR NA PE NC 18AE:0106 0000 ADD [BX+SI],AL DS:00C7=0D实验小结:最终结果AL=0000即a AND b=0000三、熟悉和掌握在Debug中运用MOV、ADD、SUB、DAA、DAA指令进行二进制数(补码)、BCD数的加减运算,并注意观察记录标志位的变化情况。
实验一 DEBUG的使用
源程序:MOV AL,30H
MOV BL,26H
ADD AL,BL
PUSH AX
POP DX
MOV AH,02H
INT常用指令练习
1、传送指令
1)用A命令在内存100H处键入下列内容:
0AF4:0108 int 21
0AF4:010Amov dl,43
0AF4:010Cint 21
0AF4:010E int 20
0AF4:0110
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0AF4 ES=0AF4 SS=0AF4 CS=0AF4 IP=0100 NV UP EI PL NZ NA PO NC
:0206 CD20 INT 20H ;结束
步骤:a.用E命令将目标代码写入内存CS:0200H~0207H
—E DS:200 B2,33,B4,02,CD,21,CD,20
b.用G命令从200H开始执行。
—G=CS:200
屏幕显示:
3
Program terminated normally.
—
c.用U命令反汇编
(2)用键盘,将AX,BX,CX,DX及DS,ES清0。
2.简单程序的执行:
(1)用E命令输入一段程序并执行,其源程序,目标代码及地址分配如下:
CS:0200 B233 MOV DL,33H ;将十六进制数‘33’存入DL中
:0202 B402 MOV AH,02H ;DOS2号功能调用
:0204 CD21 INT 21H ;屏幕显示DL内容
Debug使用说明
附录DEBUG调试程序的应用1.直接启动DEBUG程序如在C盘的根目录下,启动的方法是:C:\>DEBUG_这时屏幕上会出现“_”提示符,等待键入DEBUG命令。
2.启动DEBUG程序的同时装入被调试文件命令格式如下:C:\>DEBUG [d:][PA TH]filename[.EXT][d:][PATH]是被调试文件所在盘及其路径,filename是被调试文件的文件名,[.EXT]是被调试文件的扩展名。
例如:BCDSUM.EXE可执行文件在A盘,用DEBUG对其进行调试的操作命令如下。
C:\>DEBUG A:\BCDSUN.EXE↙DOS在调用DEBUG程序后,再由DEBUG把被调试文件装入内存,当被调试文件的扩展名为COM时,装入偏移量为100H的位置,当扩展名为EXE时,装入偏移量为0的位置,并建立程序段前缀PSP,为CPU寄存器设置初始值。
3.退出DEBUG在DEBUG命令提示符“_”下键入Q命令,即可结束DEBUG的运行,返回DOS操作系统。
4.在DEBUG环境下建立和汇编程序在DEBUG环境下用户可以直接建立汇编语言源程序,并可以进行编辑修改,还可以进行汇编。
比如,在DEBUG下运行如下程序:MOV DL,33H ;字符3的ASCII码送DLMOV AH,2 ;使用DOS的2号功能调用INT 21H ;进入功能调用,输出‘3’INT 20H ;BIOS中断服务,程序正常结束。
该程序运行结果是在显示器上输出一个字符‘3’。
如果要输出其它字符,请改变程序中‘33H’为相应字符的ASCII码。
其中涉及DOS和BIOS功能调用。
因为我们是在DOS的支持下运行汇编语言程序,所以一般情况下,不能轻易使用输入/输出指令直接通过端口输入/输出,而必须使用DOS内部提供的子程序完成输入/输出。
DOS功能调用就是为诸如此类的目的设置的。
DOS功能调用要求在进入INT 21H调用前,首先将功能调用号送AH寄存器,并根据功能调用号准备初始数据。
DEBUG命令详解
DEBUG调试程序的使用一、DEBUG的启动在DOS系统提示符下,运行DEBUG命令即可启动。
命令格式:DEBUG [文件名全称]功能:启动DEBUG调试程序,并把指定名字的文件装载入内存,以供调试。
说明:启动DEBUG,实际就是让计算机执行DEBUG.EXE这个调试程序。
若该程序不在当前目录下,需要在命令中指定该程序所在的位置路径(包括其所在磁盘和文件夹)。
文件名全称指定要调试的文件名及其所在的位置路径。
若指定该选项,则在启动DEBUG时把该文件装载入内存,以供调试,该文件一般是EXE文件或COM文件。
若不指定该选项,则只启动DEBUG,不装载文件。
二、DEBUG常用命令1、D——显示内存单元内容的命令格式:D[开始地址[结束地址]]说明:①若“开始地址”和“结束地址”都指定,则显示指定地址范围内的内存单元的内容;若只指定“开始地址”,省略“结束地址”,则显示从“开始地址”开始的80H个字节的内容;若“开始地址”和“结束地址”都省略,则显示从上次显示的末字节单元的下一个字节开始的80H个字节的内容。
②“开始地址”可包含段地址,若省略段地址,则默认使用DS的值作段地址。
2、E——输入内容(修改内存单元内容)命令格式:E开始地址[数据表列]说明:①若指定数据表列,则用数据表列中的数据存入从指定地址开始的内存单元中;若省略数据表列,则先显示指定开始地址的内存单元的内容,等待你修改。
若需要修改,输入其内容,按空格键显示、修改下一个内存单元内容;若不需要修改,直接按空格键显示、修改下一个内存单元内容,修改完成后按回车键。
②“开始地址”可包含段地址,若省略段地址,则默认使用DS的值作段地址。
3、F——填充内容(修改内存单元内容)命令格式:F开始地址结束地址数据表列说明:①用数据表列中的数据存入由开始地址和结束地址指定范围内的内存单元。
若数据表列中的数据少于指定地址范围的内存单元数,则循环使用表列中的数据存入内存单元,若数据表列中的数据多于指定地址范围的内存单元数,则多余的数据被忽略。
debug主要命令详解
debug主要命令详解DEBUG是为汇编语言设计的一种高度工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
一、DEBUG程序的调用在DOS的提示符下,可键入命令:C:\DEBUG [D:][PATH][FILENAME[.EXT]][PARM1][PARM2]其中,文件名是被调试文件的名字。
如用户键入文件,则DEBUG将指定的文件装入存储器中,用户可对其进行调试。
如果未键入文件名,则用户可以用当前存储器的内容工作,或者用DEBUG命令N和L把需要的文件装入存储器后再进行调试。
命令中的D指定驱动器PATH为路径,PARM1和PARM2则为运行被调试文件时所需要的命令参数。
在DEBUG程序调入后,将出现提示符,此时就可用DEBUG命令来调试程序。
二、DEBUG的主要命令1、显示存储单元的命令D(DUMP),格式为:_D[address]或_D[range]例如,按指定范围显示存储单元内容的方法为:-d100 12018E4:0100 c7 06 04 02 38 01 c7 06-06 02 00 02 c7 06 08 02 G...8.G.....G...18E$:0110 02 02 bb 04 02 e8 02 00-CD 20 50 51 56 57 8B 37 ..;..h..M PQVW.718E4:0120 8B其中0100至0120是DEBUG显示的单元内容,左边用十六进制表示每个字节,右边用ASCII字符表示每个字节,·表示不可显示的字符。
这里没有指定段地址,D命令自动显示DS段的内容。
如果只指定首地址,则显示从首地址开始的80个字节的内容。
如果完全没有指定地址,则显示上一个D命令显示的最后一个单元后的内容。
2、修改存储单元内容的命令有两种。
·输入命令E(ENTER),有两种格式如下:第一种格式可以用给定的内容表来替代指定范围的存储单元内容。
debug指令详解
debug指令详解一、DEBUG概述DEBUG是在DOS状态下面供程序员使用的程序调试工具。
它可以用来检查内存中任何地址中的内容以及修改特定地址中的内容。
DEBUG还可以用于逐指令执行某个程序,追踪程序的执行过程,比较一条指令执行前后数值变化情况,读写文件与磁盘扇区。
此外,DEBUG还可以用于读写端口中的数值。
在DEBUG状态下,所有数据都作为字节序列,可以用DEBUG把任何类型的文件读入内存中。
DEBUG能够处理的数据为两种: 十六进制数和ASCⅡ码,使用两位数表示十六进制数据(0~9,A~F)。
在DEBUG中涉及内存中的数据时,要指定数据所在的内存单元的地址,地址的输入格式是: [段地址]: [位移]。
如果没有输入地址,DEBUG将假定为当前内存段,从位于地址100H的字节开始。
前100H字节保留给程序段前缀使用(称PSP结构,包含程序执行的各种信息),该区域用于建立DOS与程序之间的联系。
在DEBUG中,使用四位十六进制数表示地址(0~9,A~F)。
DEBUG输入数据时有两种方法: 提示方法和非提示方法。
在提示方法下,输入要求输入数据的命令,后跟保存数据的地址。
执行后可以看到该地址中已有的内容及一个冒号提示符。
此时可以在提示符下输入一个新的值或者按下回车键或CTRL+C回到“—”提示符。
在非提示方法下,输入保持数据的内存地址以及要输入的数据。
DEBUG的启动:进入DOS 状态下,键入DEBUG ,按ENTER键,如: C:\>DEBUG ,则屏幕显示:-符号“-”是进入DEBUG的提示符,在该提示符下可键入任意DEBUG命令。
DEBUG的退出:在DEBUG的提示符后输入Q命令,按ENTER键,则退出DEBUG返回DOS。
DEBUG的使用:在DEBUG的提示符后输入DEBUG命令,按ENTER键。
二、DEBUG 命令详解★A命令格式:A[地址]功能:将指令直接汇编成机器码输入到内存中。
DEBUG命令的功能及使用
实验一DEBUG命令的功能及使用DEBUG的主要命令功能与格式1. 汇编命令A格式:A [[<段寄存器名>/<段地址>:] <段内偏移>]上式等价于:(1)A <段寄存器名>:<段内偏移>(2)A <段地址>:<段内偏移>(3)A <段内偏移>(4)A功能:键入该命令后显示段地址和段内偏移并等待用户从键盘逐条键入汇编命令,逐条汇编成代码指令,顺序存放到段地址和段内偏移所指定的内存区域,直到显示下一地址时用户直接键入回车键返回到提示符“-”。
注:其中(1)用指定段寄存器的内容作段地址,(3)用CS的内容作段地址,(4)以CS:100作地址。
以后命令中提及的各种‘地址’形式,均指(1)、(2)、(3)中A后的地址形式。
2. 显示内存命令D格式:D [<地址>/<范围>]上式等价于:(1)D <地址>(2)D <范围>(3)D功能:以两种形式显示指定范围的内存内容。
一种形式为十六进制内容,一种形式为以相应字节的内容作为ASCII码的字符,对不可见字符以‘.’代替。
注:其中(1)以CS为段寄存器。
(3)显示CS:100起始的一片内容。
3. 修改内存命令E格式:E <地址> [<单元内容表>]上式等价于:(1)E <地址>(2)E <地址> <单元内容表>其中<单元内容表>是以逗号分隔的十六进制数,或用’或”括起来的字符串,或者是二者的组合。
功能:(1)不断显示地址,可连续键入修改内容,直至新地址出现后键入回车Enter为止。
(2)将<单元内容表>逐一写入由<地址>开始的一片单元。
4. 填充内存命令F格式:F <范围> <单元内容表>功能:将单元内容表中的值逐个填入指定范围,单元内容表中内容用完后重复使用。
Debug 的使用方法 及个别汇编指令的含义
Debug-PC之开山老祖Debug 原意是杀虫子。
这里是机器调试工具。
其实,Debug的由来,还有一则趣闻,在早期美国的一计算机房中,科学家正在紧张的工作。
同时,许多台大型的计算机也在不停的运行着。
大概是由于,机器过热,引来许的小虫子,以至于,计算机无法正常运行。
科学们,只好停下来,捉虫子...虫子捉完了,计算机运行也正常了,后来,这个名词就沿用至今了....虽然,现在好的软件越来越多了,但是有些,我们只需动手,用Debug就可解决,且快而好!接下来,我们就一起学习Debug在各方面的运用吧!(在杀毒、加解密、系统...)下面我和大家一起学习一些,Debug 的用法,虽然,现在好的软件越来越多了,但是有些,我们只需动手,用Debug就可解决,且快而好!Debug常用命令集名称解释格式a (Assemble) 逐行汇编a [address]c (Compare) 比较两内存块c range addressd (Dump) 内存16进制显示d [address]或d [range]e (Enter) 修改内存字节e address [list]f (fin) 预置一段内存f range listg (Go) 执行程序g [=address][address...]h (Hexavithmetic) 制算术运算h value valuei (Input) 从指定端口地址输入i pataddressl (Load) 读盘l [address [driver seetor]]m (Move) 内存块传送m range addressn (Name) 置文件名n filespec [filespec...]o (Output) 从指定端口地址输出o portadress byteq (Quit) 结束qr (Register) 显示和修改寄存器r [register name]s (Search) 查找字节串s range listt (Trace) 跟踪执行t [=address] [value]u (Unassemble) 反汇编u [address ]或rangew (Write) 存盘w [address[driver sector secnum]]? 联机帮助?debug小汇编a命令debug小汇编a命令是一个很有用的功能,许多的小程序都要他来做。
实验二 DEBUG使用方法
实验二DEBUG使用方法一、实验目的1.熟悉DEBUG提供的调试环境。
2.学习使用Debug的常用命令,汇编、运行小段程序。
3.学习8088/8086的寻址方式、指令功能。
观察计算机执行简单程序的工作过程。
二、实验内容与操作指导Debug子命令的功能与使用格式见上章的列表介绍。
下面通过8个程序小段实例,学习其用法。
(一)由DOS进入DEBUG调试环境1.点击”开始”→程序→附件→命令提示符→DEBUG ↵将调试程序装入内存注意:当机器控制权由DOS成功地转移给调试程序后,将显示“—”号,它是debug的状态提示符,表示可以接受调试子命令了。
2. —R↵显示CPU中各寄存器当前初始内容。
请记录于下列各项,后面实验将用到。
AX= BX= CX= DX= BP= SI= DI=DS= ES= SS= SP= CS= IP=(1)此时,调试工作区的4个段值相同,指向同一起点。
表明共用一个64KB空间。
(2)SS:SP指向堆栈顶单元。
SP为FFFE或FFEE,正好是本段的最高可用地址。
表明堆栈自动使用最高地址,栈区由底往上(低址方向)生长。
(3)CS:IP为约定的调试工作区地点(IP=0100),可由此装入待调试程序代码,或汇编键入的程序小段。
工作区由(低址)往下使用。
(4)Debug用符号给出寄存器中8个标志位的当前状态。
其含义如下表所示。
(5)当运行程序至断点处停下时,或单步多步跟踪执行指令时,Debug均显示各寄存器的当时内容,便于及时观察结果。
(二)汇编运行小段程序1.1求和运算给程序1.1人工直接给寄存器赋初值(1) 给AX、BX赋值—RAX ↵AX 显示AX当前内容:FDAA 键入被加数—RBX ↵BX 显示BX当前内容:FBCE 键入加数(2) 汇编小段程序。
注意:每行指令后用回车结束,机器即进行汇编,出错将有提示。
调试状态下操作数的输入和显示均为HEX十六进制,故不必加后缀H。
—ACS:100 ↵:0100 ADD AX,BX ;求和:0102 MOV CX,AX ;转存和数:0104 INT 20 ;结束程序(软中断调用):0106 ↵;结束汇编—R ↵查看各寄存器内容。
debug命令的基本使用
Debug的基本使用1.使用r命令查看或修改CPU寄存器的内容。
(1)使用r的命令查看:(2)使用r来改变寄存器中的内容:例如修改AX的值,就需输入“r ax”后按Enter键,在出现的“:”后面输入要写入的数据,并按Enter,再用r查看,修改成功,如图1所示。
图1用r来修改Ip的值,如图2所示。
2.用d来查看内存的内容。
(1)直接输入d,debug将输出3部分内容,如图3所示。
图3(2)可以使用“d 段地址:偏移地址”的格式,例如想查看内存10000H处的内容。
(3)在使用“d 段地址:偏移地址”之后,接着使用d命令,可列出后续的内容,如图5所示。
图5(4)使用d命令查看范围,格式为“d 段地址:起始偏移地址结尾偏移地址”。
例如要查看1000:0到1000:9中的内容,如图6所示。
图63.用e来改写内存中的内容。
(1)将内存1000:0-1000:9中的内容分别改为0、1、2、3、4、5、6、7、8、9,其格式为“e 起始地址数据数据数据。
”,如图7所示。
图7(2)用提问的方法改写内存的内容。
以1000:10为起始地址进行改写,其步骤为:输入“e 1000:10”,并按Enter,在显示光标后面输入想要修改的内容,如果想停止输入,就按Enter,继续就按空格键。
(在显示光标后面直接按空格键,则表示不对当前内存单元进行改写)(3)用e向内存中写入字符。
(4)用e命令向内存中写入字符串。
(5)用e命令向内存中写入机器码,用u命令查看内存中机器码的含义,用t命令执行内存中的机器码。
例如要从内存1000:0单元开始写入机器码:b80100b9020001c8,其方法如图8所示。
图8用u将从1000:0开始的内存单元中的内容翻译为汇编指令并显示出来。
(见图9)使用t命令可以执行CS:IP指向的指令。
(图10)图10执行T命令后,cpu执行CS:IP指向的指令,则1000:0处的指令b8 01 00(mov ax,0001)得到执行。
DEBUG的使用方法
DEBUG程序的使用一、在DOS的提示符下,可如下键入Debug启动调试程序:DEBUG [路径\文件名][参数1] [参数2]Debug后可以不带文件名,仅运行Debug程序;需要时,再用N和L命令调入被调试程序.命令中可以带有被调试程序的文件名,则运行Debug的同时,还将指定的程序调入主存;参数1/2是被调试程序所需要的参数。
在Debug程序调入后,根据有无被调试程序及其类型相应设置寄存器组的内容,发出Debug的提示符“-”,此时就可用Debug命令来调试程序。
•运行Debug程序时,如果不带被调试程序,则所有段寄存器值相等,都指向当前可用的主存段;除SP之外的通用寄存器都设置为0,而SP指示当前堆栈顶在这个段的尾部;IP=0100h;状态标志都是清0状态。
•运行Debug程序时,如果带入的被调试程序扩展名不是.EXE,则BX。
CX包含被调试文件大小的字节数(BX为高16位),其他同不带被调试程序的情况。
•运行Debug程序时,如果带入的被调试程序扩展名是。
EXE,则需要重新定位。
此时,CS : IP和SS : SP根据被调试程序确定,分别指向代码段和堆栈段。
DS=ES指向当前可用的主存段,BX.CX包含被调试文件大小的字节数(BX为高16位),其他通用寄存器为0,状态标志都是清0状态。
二、DEBUG命令的格式Debug的命令都是一个字母,后跟一个或多个参数:字母 [参数]命令的使用中注意:①字母不分大小写;②只使用16进制数,没有后缀字母;③分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数间可无分隔符;④每个命令只有按了回车键后才有效,可以用Ctrl+Break中止命令的执行;⑤命令如果不符合Debug的规则,则将以“error"提示,并用“^"指示错误位置.许多命令的参数是主存逻辑地址,形式是“段基地址 : 偏移地址”。
其中,段基地址可以是段寄存器或数值;偏移地址是数值.如果不输入段地址,则采用默认值,可以是缺省段寄存器值.如果没有提供偏移地址,则通常就是当前偏移地址。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Debug调试工具的常用功能
R(Register):查看,改变CPU寄存器的内容
D(Dump):查看内存中的内容
E(Enter):改写内存中的内容
U(Unassemble):将内存中的机器指令翻译成汇编指令
T(Trace):执行一条机器指令
A(Assemble):一会变指令的格式在内存中写入一条机器指令
启动debug:
Windows系统中debug一般在C:\WINDOWS\system32文件加下,由于系统指定了搜索路径,所以在任何一个路径都可以运行:cmd中输入debug。
使用a命令以汇编语言向从1000:0开始的内存单元中写入几条指令
-a 1000:0
1000:0000 mov ax,1
1000:0003 mov bx,2
1000:0006 mov cx,3
1000:0009 add ax,bx
1000:000B add ax,cx
1000:000D add ax,ax
1000:000F
-
d命令查看内存的内容
-d 1000:0 f
1000:0000 B8 01 00 BB 02 00 B9 03-00 01 D8 01 C8 01 C0 00 ................
r命令查看寄存器的内容
-r
AX=0001 BX=0000 CX=0002 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0B7E ES=0B7E SS=0B7E CS=0B30 IP=1010 NV UP EI PL NZ NA PO NC
0B30:1010 58 POP AX
改变寄存器的内容
-rcs
CS 0B30
:1000
-rip
IP 1010
:0
t命令执行CS:IP指向的指令
-t
AX=0001 BX=0000 CX=0002 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0B7E ES=0B7E SS=0B7E CS=1000 IP=0003 NV UP EI PL NZ NA PO NC 1000:0003 BB0200 MOV BX,0002
e命令改写内存中的内容
-e 1000:0 b8 01 00 b9 02 00 01 c8
u命令将从1000:0开始的内存单元中的内容翻译为汇编指令
-u 1000:0
1000:0000 B80100 MOV AX,0001
1000:0003 B90200 MOV CX,0002
1000:0006 01C8 ADD AX,CX
1000:0008 0001 ADD [BX+DI],AL
1000:000A D801 FADD DWORD PTR [BX+DI] 1000:000C C8 DB C8
1000:000D 01C0 ADD AX,AX
1000:000F 0019 ADD [BX+DI],BL
1000:0011 0102 ADD [BP+SI],AX
1000:0013 0304 ADD AX,[SI]
1000:0015 050607 ADD AX,0706
1000:0018 0809 OR [BX+DI],CL
1000:001A 0A00 OR AL,[BX+SI]
1000:001C 0000 ADD [BX+SI],AL
1000:001E 0000 ADD [BX+SI],AL。