DEBUG指令的一些总结和调试方法
- 格式:doc
- 大小:26.00 KB
- 文档页数:3
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指令详解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命令详解1、显示命令D① D [地址]② D [范围]如不指定范围,一次显示8行×16个字节。
-D ;默认段寄存器为DS,当前偏移地址-D DS:100 / -D CS:200-D 200:100-D 200;200为偏移地址,默认段寄存器DS-D DS:100 110/ -D 100 L 102.修改命令E① E 地址;从指定地址开始,修改(或连续修改)存储单元内容。
DEBUG首先显示指定单元内容,如要修改,可输入新数据;空格键显示下一个单元内容并可修改,减号键显示上一个单元内容并可修改;如不修改,可直接按空格键或减号键;回车键结束命令。
② E 地址数据表;从指定的地址开始用数据表给定的数据修改存储单元。
-E DS:100 F3 ‘AB’ 8D。
3.添充命令FF 范围数据表;将数据表写入指定范围的存储单元;数据个数多,忽略多出的数据,个数少,则重复使用数据表。
-F DS:0 L5 01,02,03,04,05-F DS:0 L5 01 02 03 04 05(空格分隔)-F DS:0 L5 FF ;5个字节重复使用FF4.显示修改寄存器命令RR;★显示所有寄存器和标志位状态;★显示当前CS:IP指向的指令。
显示标志时使用的符号:标志标志=1 标志=0OF OV NVDF DN UPIF EI DISF NG PLZF ZR NZAF AC NAPF PE POCF CY NC5.汇编命令AA [地址];从指定的地址开始输入符号指令;如省略地址,则接着上一个A命令的最后一个单元开始;若第一次使用A命令省略地址,则从当前CS:IP 开始(通常是CS:100)。
注释:①在DEBUG下编写简单程序即使用A命令。
②每条指令后要按回车。
③不输入指令按回车,或按Ctrl+C结束汇编。
④支持所有8086符号硬指令,伪指令只支持DB、DW,不支持各类符号名。
6.反汇编命令U① U [地址];从指定地址开始反汇编32个字节的机器指令;省略地址时,则接着上一个U命令的最后一个单元开始;若第一次使用U命令省略地址,则从当前CS:IP开始(通常是CS:100)。
五、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的使用及调试方法1、实验目的和要求:掌握DEBUG下的主要命令如:U、T、D、E、R、A、G、Q命令等。
掌握调试方法,理解CS:IP的作用,要求能在DEBUG下编写简单程序。
2. DEBUG的功能DEBUG是专门为汇编语言设计的调试工具,它通过单步、设置断点等方式,为使用者提供了非常有效的调试手段。
在DEBUG下所有输入的数据都是十六进制,所以不需要后面加H。
并且不区分大、小写字母。
3. DEBUG的调用在DOS下有两种方式调用DEBUG:(1)把执行(调试)文件装入存储器中,格式为:C>DEBUG 文件名.EXE(2)先调用DEBUG,然后用N、L命令把执行(调试)文件装入存储器。
格式为:C>DEBUG-N 文件名.EXE-L4. DEBUG的主要命令(1) U(反汇编):将机器指令进行反汇编,默认的寄存器是CS:IP,从指定地址开始反汇编32个字节,它的格式是:-U[ START-ADDR]-U[ START—ADDR END—ADDR]-U 100 ;汇编开始于CS:100-U 100 150 ;反汇编从100H 到150H的内容。
⑵T(跟踪):以单步方式执行程序。
-T ;执行一条指令。
-T 10 ;执行下面10H(16)条指令。
-T=3 2 ;从指定IP=0003开始,执行下面2条指令.(3)A (把符号指令汇编成机器码):-A 100 ;从指定地址100H开始汇编,结果写入内存。
-A ;不指定地址,则从上次A命令开始汇编。
在A命令下不能使用字段名,A命令只识别指令和DB、DW的伪指令。
⑷G (运行可执行程序):-G 200 ;从程序当前地址执行到200H结束-G ;从程序当前位置执行到程序结束-G =200 260 ;从指定(200H)或当前地址开始执行,遇到断点(260H)停止,显示寄存器和标志寄存器的内容。
⑸E(检查修改内存单元内容):默认寄存器是DS,格式是:-E[ ADDRESS] [表]-E 105 13 3A 21 ;从DS:105H开始输入3个字节的内容-E CS:211 21 2A ;从CS:211H开始输入2个字节的内容-E 110 ‘anything’;输入从DS:110H开始的字符串-E 12C ;检查修改DS:12C的内容该操作等待从键盘的输入一个或多个十六进制值的字节,字节之间用空格隔开。
DEBUG命令使用解析及范例大全启动Debug,它是可用于测试和调试MS-DOS 可执行文件的程序。
Debug [[drive:][path] filename [parameters]]参数[drive:][path] filename指定要测试的可执行文件的位置和名称。
parameters指定要测试的可执行文件所需要的任何命令行信息。
说明使用Debug 命令但不指定要测试的文件如果使用没有位置和文件名的Debug 命令,然后键入所有的Debug 命令以响应Debug 提示符,连字符(-)。
Debug 命令以下是Debug 命令列表:? 显示Debug 命令列表。
a 汇编8086/8087/8088 记忆码。
c 比较内存的两个部分。
d 显示部分内存的内容。
e 从指定地址开始,将数据输入到内存。
f 使用指定值填充一段内存。
g 运行在内存中的可执行文件。
h 执行十六进制运算。
i 显示来自特定端口的 1 字节值。
l 将文件或磁盘扇区内容加载到内存。
m 复制内存块中的内容/n 为l 或w 命令指定文件,或者指定正在测试的文件的参数。
o 向输出端口发送 1 个字节的值。
p 执行循环、重复的字符串指令、软件中断或子例程。
q 停止Debug 会话。
r 显示或改变一个或多个寄存器。
s 在部分内存中搜索一个或多个字节值的模式。
t 执行一条指令,然后显示所有寄存器的内容、所有标志的状态和Debug 下一步要执行的指令的解码形式。
u 反汇编字节并显示相应的原语句。
w 将被测试文件写入磁盘。
xa 分配扩展内存。
xd 释放扩展内存。
xm 映射扩展内存页。
xs 显示扩展内存的状态。
分隔命令参数所有Debug 命令都接受参数,除了q 命令之外。
可以用逗号或空格分隔参数,但是只有在两个十六进制值之间才需要这些分隔符。
因此,以下命令等价:dcs:100 110d cs:100 110d,cs:100,110指定有效地址项Debug 命令中的address 参数指定内存位置。
一、DEBUG的主要命令A命令功能: 将助记符指令转换为机器指令码存储在指定的内存单元,即汇编过程格式1: Axxxx:0100 助记符指令1(ENTER)xxxx:xxxx 助记符指令2(ENTER)……xxxx:xxxx ENTER结束功能: 逐次将助记符指令对应的指令码存入从CS: 0100h起的连续的内存单元格式2:A 起始地址start-addrxxxx:0100 助记符指令1(ENTER)xxxx:xxxx 助记符指令2(ENTER)……xxxx:xxxx ENTER结束功能: 逐次将助记符指令对应的指令码存入从CS: star-addr起的连续的内存单元注: 指令中可以包含数据定义伪指令DB/DW等语句D命令功能: 查看指定内存单元的内容格式1: D [起始地址start-addr [L长度length]]功能: 显示从起始地址start-addr开始的length个字节,省略start-addr时从DS:0100h开始,省略长度length时默认值为80H(128)注: start-addr可以为偏移地址, 此时其默认的段基址为DS;也可以显式地按段地址:偏移地址格式指明完整的逻辑地址, 段地址不一定是段寄存器, 还可以是任意16位地址格式2: D[起始地址start-addr 终结地址end-addr]功能: 显示从起始地址start-addr开始到结束地址end-addr之间的字节注: start-addr和end-addr同时为偏移地址时默认的段基址为DS;start-addr采用段地址:偏移地址格式指明时, end-addr可以不必再指明段地址, 直接以偏移地址形式给出(start-addr和end-addr的段地址始终相同);当start-addr和end-addr的偏移地址相同时只显示该存储单元的字节.E命令功能: 修改指定内存单元的内容格式1: E 起始地址start-addr 字节数据1 字节数据2 … 字节数据n功能: 逐次用后面的字节数据修改从起始地址起的连续内存单元的内容格式2: E 起始地址start-addr(按ENTER)起始地址该内存单元的原值.待输入新值/空格键功能:在提示情况下逐个修改从起始地址start-addr开始的字节数据的值, 输入空格表示不做修改, 直至输入ENTER键结束G命令功能: 执行正在调试的汇编程序至指定的断点格式: G [start-addr] break-addr1[, break-addr2, …]功能:star-addr是指令码的起始偏移地址, break-addr是断点处的偏移地址, 段地址均为CS, 可以指定多个断点位置P命令功能: 执行INT, CALL, LOOP及重复串指令(REP等)直至下一条指令格式: P [start-addr] [n]功能:star-addr是待执行指令码的起始偏移地址, n是往下执行指令的条数Q命令功能: 退出debug格式: QR命令功能:显示和修改寄存器的内容格式1:R;显示所有寄存器的内容格式2: R 寄存器名;显示指定寄存器的值, 再按ENTER后键入数值可修改该寄存器的值格式3:R F;显示标志寄存器中各标志位的值标志位符号的意义如下:标志位符号意义标志位1标志位0OF 溢出(是/否) OV NVDF 方向(减/增) DN UPIF 中断(允许/关闭)EI DISF 符号(负/正) NG PLZF 零(是/否) ZR NZAF 辅助进位(是/否)AC NAPF 奇偶(偶/奇) PE POCF 进位(是/否) CY NCT命令功能: 以单步方式执行指定的指令代码格式1: T功能: 以单步方式执行从CS:IP开始的1条指令格式2: T 指令条数n功能: 以单步方式执行从CS:IP开始开始的n条指令U命令功能: 将内存单元的机器指令码转换为助记符指令,即反汇编过程格式1: U 起始地址start-addr功能: 将从start-addr开始的32个字节的指令码转换为助记符格式2: U 起始地址start-addr终结地址end-addr功能: 将从start-addr开始至终结地址end-addr之间的指令码转换为助记符二、DEBUG的相关说明1.debug默认所有的数值都是16进制的,且无需在最后添加后缀h;2.debug不区分字母的大小写;3.快捷键: F1键--逐个重复前一条命令的字符,F3键--重复前面整条命令;4.在dos系统中文件名的最大长度为8个字符,扩展名的最大长度为3个字符.在给asm文件命名时若超过8个字符,虽然可以编译生成obj文件但在连接时却生成不了exe文件,从而引发一些错误.注意文件名不要超过8个字符;5.对于32位指令,debug并不显示其助记符,而是会以DB开头显示,这与数据定义伪指令不同;6.在[EA](EA为常数)作操作数时(如MOV 寄存器,[EA]和MOV [EA],寄存器),若不在[EA]前加段前缀, 则debug会将其视为常数EA而非偏移地址,此时必须显式指明段前缀.三、用DEBUG调试程序1.顺序指令的调试调试程序的指令格式路径>debug filename.exe接着可用R指令查看各寄存器的值, 说明如下:1)CX的值为整个程序的指令码的字节总数;2)CS:IP指向第一条指令, (CS)=(DS)+10h, (IP)=0000h, 这是因为程序在内存中的起始地址是DS:0000h,但前256个字节单元用于PSP,所以从(CS+10h): 0000h才是程序的指令码.用U命令可以查看程序的助记符指令下面以程序test.asm为例说明, 其源代码如下:.model small.databuff db 2 dup(?).codestart:mov ax,@datamov ds,axmov ax,100mov bl,3div blmov buff,almov buff+1,ahmov ah,4chint 21hend start可知数据段的段基址为1450h, 而buff内存的偏移地址为0008h, 从144F:00~144F:16都是源程序的机器码, 共计17个字节再接着可用T命令单步调试每单步执行一条指令, 都会显示执行指令后的寄存器的内容注意IP的变化代表了上一条指令的机器码长度下面执行3条指令, 如下所示:可以看到进行除法运算后AL=21h=33(商), AH=1h(余数), 同时提示下一条指令为: MOV [0008H], AL这里偏移量0008h就是buff的偏移量, 同时右下角显示了该内存单元的当前内容为14h上面在执行完商和余数的MOV指令后, 用D指令查看buff及其后一个单元的内容, 分别是商21h及余数1h, 程序执行完全正确.最后在单步执行INT 21H指令时要用P指令, 此时会显示程序正常结束字样!2.循环结构的调试以testloop.asm为例:.model small.databuff dw ?.codestart:mov ax,@datamov ds,axmov cx,9mov ax,2again:add ax,axloop againmov buff,axmov ah,4chint 21hend start对循环结构的调试方法是:只需调试2~3次循环即可确定循环逻辑是否正确,接着可让程序直接执行到循环结束,然后再单步调试.让程序执行到某个断点位置: G命令断点偏移地址让程序执行到循环结束: 在调试LOOP指令时使用P命令。
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命令的功能及使用功能:1.单步执行:DEBUG命令可以逐条执行程序的指令,并在每个指令被执行后停止程序的执行。
这使得开发人员能够逐步查看程序的执行过程,以便找到潜在的错误和问题。
2.查看和修改内存:DEBUG命令允许开发人员查看程序运行时的内存状态,并且提供了一些命令来读取和修改内存中的数据。
这对于调试内存泄漏、内存溢出和指针问题非常有用。
3.断点:DEBUG命令可以在程序的特定位置设置断点,一旦程序执行到这个位置,就会自动停止执行。
这使得开发人员可以在关键点查看程序的状态,以便分析问题。
4.寄存器查看和修改:DEBUG命令允许开发人员查看和修改程序运行时的寄存器值。
这对于理解程序如何处理数据以及跟踪特定变量的值非常有用。
5. 注册表和文件系统访问:DEBUG命令可以访问Windows注册表和文件系统,以检查和修改系统的配置和状态。
这对于调试与注册表和文件系统相关的问题非常有用。
使用:1.运行DEBUG命令:在命令行窗口中输入"DEBUG"命令,然后按下回车键即可运行DEBUG命令。
DEBUG命令会显示一个提示符,表示它已经准备好接受命令。
2.设置断点:使用"t"命令可以在程序中设置断点。
例如,要在程序的第10行设置一个断点,可以输入"t10"命令。
3.单步执行:使用"p"命令可以逐步执行程序的指令。
每次执行一条指令后,DEBUG命令会显示当前指令的汇编代码和程序计数器的值,并等待用户输入下一个命令。
4.查看内存:使用"d"命令可以查看指定内存地址的内容。
例如,输入"d1000"命令可以查看地址为1000的内存单元的内容。
5.修改内存:使用"e"命令可以修改指定内存地址的内容。
例如,输入"e100090"命令可以将地址为1000的内存单元的内容修改为90。
DEBUG调试命令介绍1.主要调试命令:(1)反汇编命令U:将存储器中的二进制数据翻译成较有意义的助记符形式,以帮助理解,如图1.5所示。
一般常用以下三种格式:a)-U↙:从当前IP处开始,对连续约32字节内容反汇编。
如对TEST.EXE,刚装入DEBUG时的IP=0000,则在输入U命令后有如下显示:-U↙13C2:0000 B402 MOV AH,0213C2:0002 B241 MOV DL,4113C2:0004 CD21 INT 2113C2:0006 B44C MOV AH,4C13C2:0008 CD21 INT 2113C2:000A 8B4606 MOV AX,[BP+06]………………13C2:0020 8B07 MOV AX,[BX]-图1.5 反汇编命令的执行结果在上例中,13C2:0000表示CS:IP的内容(其中CS的值是动态值);B402代表该处存放的二进制数据,亦即指令MOV AH,02H的机器代码;当连续约32字节的数据反汇编完后,重新回到DEBUG提示符“-”下,如果再键入U命令,则将继续对后面的内存区反汇编。
特别应该注意的是,由于反汇编命令针对内存区的二进制数据,而被调试程序仅占内存区的某一部分,故反汇编出来的内容并非全是被调试程序的代码,如上例中13C2:000A单元以后的部分,显然不是TEST.EXE的内容。
另外还需注意,DEBUG默认使用十六进制。
b)–U 0123↙:从指定的IP=0123处开始,对连续约32字节内容反汇编。
c)–U 0123 0143↙:从指定的IP=0123处开始反汇编,直至指定的0143处结束。
(2)显示寄存器命令R:显示或修改寄存器的内容,如图1.6所示。
一般常用以下形式:a)-R↙:显示所有寄存器当前的内容及当前将执行的指令。
如对TEST.EXE,在程序运行之前,键入R命令:-R↙AX=0000 BX=0000 CX=000A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=13B2 ES=13B2 SS=13C2 CS=13C2 IP=0000 NV UP EI PL NZ NA PO NC13C2:0000 B402 MOV AH,02-图1.6 显示寄存器命令执行结果在显示寄存器内容时,状态标志寄存器F表示成各个分离的标志位,其意义如下表1.1所示:表1.1 标志寄存器的标志为含义b)-R AX↙:显示指定的AX寄存器当前的内容,并等待键入新值;如果不作修改,可直接回车。
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 程序在 PC-DOS 的提示符 A>下,可打入如下命令;A>DEBUG[d:][Path[filename[.ext]][Parm1]][Parm2]其中,DEBUG 是调试程序的文件名,后面是要调试的程序的文件标识符。
若在命令中规定了文件标识符,则在 DOS 把 DEBUG 程序调入内存后,DEBUG 程序把要调试的程序(根据文件标识符)调入内存,若在命令中没有规定文件标识符,则 DEBUG 程序或者与正在内存中的内容打交道,或可以用 Name 和 Load 命令,从盘上输入要调试的程序。
命令行中的[Parm1(参数1)][Parm2(参数2)],我们在后面结合具体的命令加以介绍。
在 DEBUG 程序调入后,发出提示符“-”,说明现在系统在 DEBUG 程序的管理之下。
所有的 DEBUG 命令,也只有在出现提示符后才有效。
二、 DEBUG 程序对寄存器和标志位的初始化在 DEBUG 程序启动后,它把各个寄存器和标志位,置成以下状态:1、段寄存器(CS,DS,ES和SS)置于自由存储空间的底部,也就是 DEBUG 程序结束以后的第一个段。
2、指令指针(IP)置为‘0100’。
3、堆栈指针置到段的结尾处,或者是装入程序的临时底部,取决于哪一个更低。
4、余下的寄存器(AX,BX,CX,DX,BP,SI和DI)置为0。
然后,若调用 DEBUG 时包含一个要调试的程序的文件标识符,则 CX 中包含以字节表示的文字长度。
若文件大于 64K ,则文件长度包含在 BX 和CX 中(高的部分在 BX 中)。
5、标志位都置为清除状态。
6、default 的磁盘缓冲区置于码段的X“80”。
注:若由 DEBUG 调入的程序,具有扩展名 .EXE,则 DEBUG 必须进行再分配,把段寄存器,堆栈指针,指令指针置为文件中所规定的值。
三、有关 DEBUG 命令的一些共同信息1、DEBUG 命令都是一个字母,后面跟有一个或多个参数。
DEBUG命令及汇编指令调试微机原理与接口技术研究性学习[通信1101] | [汪广超] | [11211018][指导教师:戴胜华]2013/9/19目录1 DEBUG命令调试 (2)1.1 R命令的使用 (2)1.2 D命令的使用 (3)1.3 H命令的使用 (4)1.4 C命令的使用 (5)1.5 E命令的使用 (6)1.6 F命令的使用 (6)1.7 M命令的使用 (7)1.8 A、T命令功能介绍 (7)2汇编语言常用指令调试 (8)2.1 数据传送指令MOV (8)2.2 数据交换指令XCHG (10)2.3 堆栈操作指令PUSH/POP (11)2.4 有效地址传送指令LEA (12)2.5 I/O数据传送指令 (13)2.6 加法指令 (14)2.6 减法指令 (16)2.8 乘法指令 (18)2.9 除法指令 (19)2.10 逻辑运算指令 (20)2.11 位移指令 (22)2.12 无条件转移指令 (23)3小结 (24)1 DEBUG命令调试当DEBUG启动成功后,将显示连接符“-”,这时,可输入各种DEBUG命令。
DEBUG中所有命令及其含义如DEBUG各命令功能说明表所示,在提示符“-”下输入以下命令:?,执行结果如下图所示。
关于使用命令的几点说明:在提示符“-”下才能输入命令,在按“回车”键后,该命令才开始执行;命令是单个字母,命令和参数的大小写可混合输入;当命令出现语法错误时,将在出错位置显示“^ Error”。
DEBUG命令很多且复杂,这里不再对所有命令一个一个调试,下面将举例介绍我通过学习摸索出来的几个命令的常用用法。
1.1 R命令的使用R命令作用:显示或改变一个或多个寄存器。
在提示符“-”下输入以下命令:r,DEBUG将会显示当前所有寄存器和标志位的状态。
标志位寄存器状态位解读方法如下表格。
接下来再输入命令rbx,在提示符“:“后输入100。
该命令的作用是将寄存器BX的值设置为100,DEBUG默认使用的是十六进制,这里的100相当于十进制的256。
DEBUG的使用及调试方法在软件开发过程中,调试是非常重要的一环。
调试是指通过排除软件中的错误或故障,确定程序的正确性和可靠性的过程。
在调试过程中,开发者需要使用各种工具和技术来定位和解决问题,其中DEBUG是一种常用的调试工具。
1.打印调试信息:在代码中添加打印语句,将关键信息输出到控制台或日志文件中。
这个方法简单直接,可以帮助开发者快速定位问题。
然而,过多的打印语句会对程序的性能造成影响,并且需要手动添加和移除。
2.使用断点:断点是调试器提供的一种功能,可以在代码中设置一个断点,当程序执行到断点时,会暂停执行。
开发者可以在断点处检查变量的值,观察程序的执行流程。
调试器还提供了单步执行、继续执行等功能,可以逐行调试程序。
使用断点可以直观地观察程序的执行过程,快速找到错误。
3.日志记录:使用日志记录可以在代码中记录程序的执行过程和状态,以便后续分析。
使用日志记录可以避免过多的打印语句,同时日志记录可以输出到文件中,便于离线分析。
常见的日志记录框架有log4j、logback等,它们提供了丰富的配置选项,可以方便地控制日志的输出级别和格式。
4.调试工具:调试工具是一种集成了多种调试功能的软件,可以帮助开发者更方便地进行调试。
常见的调试工具有Eclipse、Visual Studio等。
调试工具提供了丰富的调试功能,包括断点设置、变量查看、堆栈跟踪等,可以大大提高调试的效率。
5.远程调试:在分布式系统中,可能需要在远程机器上调试程序。
远程调试是一种通过网络连接到目标机器,对程序进行调试的方法。
远程调试需要在目标机器上开启调试端口,并在调试工具中配置远程调试参数。
远程调试可以在开发者的本地环境中进行调试,避免了在目标机器上进行调试的麻烦。
6.单元测试:单元测试是一种通过编写测试代码来验证程序的正确性的方法。
单元测试可以模拟程序的输入和输出,隔离程序中的错误。
在测试过程中,可以使用断言语句来判断程序的输出是否符合预期。
汇编_DEBUG的使用汇编语言是一种低级语言,它与机器语言非常接近,每一个汇编语言的指令几乎都对应着一条机器指令。
因此,了解并掌握汇编语言对于理解计算机内部工作原理以及进行底层编程是非常有帮助的。
下面,我将详细介绍DEBUG的使用方法和功能。
1.DEBUG的启动和退出:在DOS命令行下输入DEBUG命令,即可启动DEBUG。
DEBUG启动后,会显示一个短横线"-”,表示等待执行命令。
在DEBUG中输入"q"命令,即可退出DEBUG。
2.DEBUG的命令格式和常用命令:-a:将键盘输入的ASCII码写入指定地址-d:显示内存中的指定地址的内容-e:修改内存中的指定地址的内容-g:从指定地址开始执行程序-r:查看和修改寄存器的值-t:查看和修改标志寄存器的值-u:以汇编代码的格式显示内存中的指令-w:将内存中的内容写入指定文件-n:加载并执行指定文件-i:打印当前的执行指令-f:在段间切换3.DEBUG的常用调试操作:- 通过“d”命令查看内存中的指令和数据内容,可以使用不同的参数来控制显示格式,如"d 100"表示从100H地址处开始显示,"d cs:100"表示从CS:100H地址处开始显示。
-通过“e”命令修改内存中的指令和数据内容。
- 通过“r”命令查看和修改寄存器的值,如"r ax"表示查看和修改AX寄存器的值。
-通过“u”命令以汇编代码的格式显示内存中的指令。
-通过“g”命令从指定地址开始执行程序。
-通过“n”命令加载并执行指定的二进制文件。
4.示例:下面给出一个使用DEBUG调试的示例过程:-启动DEBUG,进入DEBUG命令行界面。
-使用“n”命令加载一个二进制文件。
-使用“d”命令查看内存中的指令和数据,以及寄存器的值。
-使用“e”命令修改内存中的指令和数据。
-使用“g”命令执行程序。
-使用“r”命令查看和修改寄存器的值。
调试程序DEBUG命令说明
DEBUG是常用的汇编语言级调试工具,为汇编语言程序员提供了分析指令、跟踪程序的有效手段
如何进入Debug程序?
答:在命令提示符下输入“debug”回车即可
懂得汇编的朋友,相信看懂下面命令是没多大问题的。
常用命令:
-A 汇编格式:A 起始地址
例如:输入“A”,回车,然后输入“MOV AX,10”回车。
再按一次回车,则退出汇编状态。
-U 反汇编格式:U 起始地址结束地址
例如:接上面,输入“U”,回车,即可看到结果。
以下不再举例,类似上面,有待自己研究,这样记得更牢。
谢谢!
-T 单步执行格式:T 起始地址运行指令数
-G 断点执行格式:G 起始地址断点地址结束地址
-D 数据显示格式: D 起始地址结束地址
-R 显示修改寄存器
格式:R 寄存器名
-P 单步执行,不进入中断
格式:T 起始地址运行指令数
-F 连续填入内存内容
格式:起始地址结束地址要填入的数值系列
-E 单个修改内存内容
格式: E 地址填入内容
-Q 退出debug状态
格式: Q 回车
状态标志位的值如下图:
不常用命令:
-M 内存搬家指令:
格式:M 起始地址结束地址目的地址-H 16进制加法:
格式:H 操作数1 操作数2
结果显示:加法结果减法结果。
DEBUG使用方法为了解决问题和改进程序,我们经常需要在代码中进行调试。
调试是指通过检查代码的执行过程,找出可能的错误和问题,并修复它们。
在本文中,我们将介绍一些常见的调试技术和工具,帮助您进行有效的调试。
1.打印输出:打印输出是调试的最基本方法之一、通过在代码中插入打印语句,我们可以跟踪代码的执行流程和变量的值。
例如,在关键位置添加`print`语句来输出变量的值,以便了解其当前状态。
这种方法对于追踪代码执行路径和确定错误发生的地点非常有用。
但是,它不适用于大型程序或复杂的问题,因为太多的输出可能会让您迷失在信息中。
2.断点调试:断点调试是一种先进的调试技术,可以暂停程序的执行,以便我们可以检查和修改程序的状态。
通过在代码中设置断点,我们可以在程序执行到该点时暂停执行,并查看变量的值、执行的路径等信息。
在现代集成开发环境(IDE)中,我们可以通过单击代码行号或调试菜单来设置断点。
一旦程序执行到断点位置,调试器将暂停执行,我们可以检查变量的值并逐行执行代码,以便找出问题。
3.单步调试:与断点调试相似,单步调试也允许我们逐行执行代码并检查变量的值。
单步调试是一种逐行执行代码的方法,让我们可以了解代码执行的顺序和路径。
在单步调试中,我们可以逐行执行代码,并在每一步之后检查变量的值和程序状态。
这对于发现代码执行的异常路径、循环错误和边界条件非常有用。
4.调试器:调试器是一种针对软件调试的工具,它可以帮助我们通过提供图形界面和功能来检查程序的状态、执行流程和变量的值。
调试器通常集成在IDE中,提供了单步执行、设置断点、查看变量和堆栈跟踪等功能。
使用调试器,我们可以直观地了解程序的状态,并快速找到问题所在。
5.注释和重构:注释是一种记录代码用途和解释的方法,可以帮助我们理解程序的目的和逻辑。
通过添加注释,我们可以提高代码的可读性,并减少问题的发生。
在调试过程中,我们可以使用注释来解释代码块的用途、关键数据结构和预期输出,以便更好地理解问题。
DEBUG指令的一些总结和调试方法.txt男人应该感谢20多岁陪在自己身边的女人。
因为20岁是男人人生的最低谷,没钱,没事业;而20岁,却是女人一生中最灿烂的季节。
只要锄头舞得好,哪有墙角挖不到? DEBUG指令的一些总结和调试方法
首先如入一下门,debug都是从这些东东来的
1。
主要的命令及格式,这些命令是debug最基本的命令,如何灵活使用就看你自己的硬件知识了,不过我会举一些具体粒子的
A(Assemble):汇编语句 A[address]
C(Compare):比较内存 C range address
D(Dump):显示内存 D[address]或D[range]
E(Enter):改变内存 E address[list]
F(Fill):填充内存 F range list
G(Go):执行程序 G[=address[address[address...]]
H(Hexarithmetic):十六进制运算命令 H[address[drive|sector|sector]]
I(Input):输入 I portaddress
L(Load):装入内存 L[address[drive|sector|sector]]
M(Move):传送内存 M range address
N(Name):定义文件和参数 N[d:][path]filename[.ext]
O(Output):输出字节 O portaddress byte
P(Proceed):在下条指令前停止 P[=address][value]
Q(Quit):结束DEBUG程序 Q
R(Hexarithmetic):显示寄存器/标志位 R[registername]
S(Search):捡索字符 S range list
T(Trace):执行并显示(跟踪) T[=address][value]
U(Unassemble):反汇编指令 U[address]或U[range]
W(Write):把文件或数据写盘 W[address[drive|sector|sector]]
开始介绍一些具体应用,有些不光给出debug命令,还会列举其他方法
2。
上次我写T40评测用的D命令,用来察看主板的生产日期或者版本与生产厂
D ffff:05 察看日起
D fe00:0e 察看版本
3。
不知道bios密码怎么办?
a debug法,清除bios密码
o 70 10
o 71 10
g
g
重启
不过这一招太狠读了,还有
b debug法二,前提是进入系统
o70 21
o70 20
p
c 万能密码法,适用于较老的机型。
对Awar
d BIOS,试试下面的密码:AWARD--SR,j62,HLT,SER, SKY_FOX,BIOSTAR,ALFAROME,lkwpeter,j256,AWARD?SW,LKWPETER,Syxz,aLLy,589589 ,58972 1,awkward,
COMCAT等。
对AMI BIOS,试试下面的密码:AMI,BIOS,PASWORD,HEWITTRAND,AMI?SW,AMI--SW,
LKWPETER,A.M.I.等。
4。
保存硬盘的引导扇区和文件分配表
这是保存C盘的引导程序,其余的类推!
L 100 2 0 1 ;0代表A,1代表B,2代表C盘, 0就是0扇区。
N c: ;保存到
R CX ;CX寄存器用来表示写文件的大小。
:200
W
Q
5。
恢复硬盘的引导扇区和文件分配表
恢复C盘的引导扇区程序
n c:
l 100
r cx
:200
w 100 2 0 1 ;其中0为A盘,1为B盘,2为C盘。
依此类推!
q
6。
LCD亮点或暗点检查
用F填充命令
f b800:00 f9f 20 40 (40代表红)
f b800:00 f9f 20 10 (10代表兰)
依此类推,还有20代表绿,30代表紫红,70代表灰白等
7。
方便的调试程序。
例如,将一段小写字符改为大写
s ... 用DEBUG的“-S”功能检索到那个字符
e ... E改变内存命令修改字符的ASCII码(小写改大写是-20(16进制),大写改小写反之)在例如,
如果是批量修改一个段地址下相临偏移地址的字符串,就用“-F”填充命令。
海例如,其实A指令就是一条编译指令
8。
检查路由器配置及工作状态,在超级权限模式下
debug 命令可以实时显示路由器的工作情况,缺省状态下,debug信息只能在与console端口连接的
终端上显示。
当然最简单还是ping或者telnet了。
9。
要显示扩展内存信息,可以键入以下命令:
xs
Debug 显示与以下类似的信息:
Handle 0000 has 0000 pages allocated
Handle 0001 has 0002 pages allocated
Physical page 00 = Frame segment C000
Physical page 01 = Frame segment C400
Physical page 02 = Frame segment C800
Physical page 03 = Frame segment CC00
2 of a total 80 EMS pages have been allocated
2 of a total FF EMS handles have been allocated 10。
对指定的两个参数执行十六进制运算。
h value1 value2。