




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、调试程序DEBUG.EXE解析1、debug是什么?DEBUG.EXE是DOS提供的可用于调试可执行程序的一个工具软件,也是可用于汇编语言程序设计的一种调试工具。DEBUG也是软件开发的重要调试工具,这是因为DEBUG除了可运行汇编语言程序外,还可直接用来检查和修改内存单元,装入、存储及启动运行程序,检查及修改寄存器。也就是说DEBUG可深入到计算机的基本级上,可使用户更紧密的与计算机中真正进行的工作相联系。2、如何启动debug命令来调试程序?启动DEBUG的一般命令如下: DEBUG 路径文件名参数1参数2其中:文件名指定被调试的文件,包括文件名和后缀,参数表是被调试文件运行时所需要的参数
2、。被调试的文件可以是系统中的任何文件,但通常它们的后缀为EXE或COM。当DEBUG启动成功后,将显示连接符“-”,这时,可输入各种命令。注意: 运行Debug程序时,如果不带被调试程序,则所有段寄存器值相等,都指向当前可用的主存段;除SP之外的通用寄存器都设置为0,而SP指示当前堆栈顶在这个段的尾部;IP=0100h;状态标志都是清0状态。 运行Debug程序时,如果带入的被调试程序扩展名是.EXE,则需要重新定位。此时,CS:IP和SS:SP根据被调试程序确定,分别指向代码段和堆栈段。DS=ES指向当前可用的主存段,BX.CX包含被调试文件大小的字节数(BX为高16位),其他通用寄存器为0
3、,状态标志都是清0状态。标志名称溢出OF方向DF中断IF负号SF零ZF辅助进位AF奇偶PF进位CF置位状态1OVDNEINGZRACPECY复位状态0NVUPDIPLNZNAPONC表1 DEBUG中标志位的符号表示3、DEBUG的命令及其参数 (一)DEBUG的命令Debug的命令都是一个字母,后跟一个或多个参数: 字母参数。命令的使用中注意:(1) 字母不分大小写; (2) 只使用16进制数,并且不加尾缀“H”;(3) 分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数间可无分隔符。因此下列这些命令是等价的: dcs:100 110 d cs:100 110 d,cs:100,110
4、(4) 只有在按ENTER键之后,输入的命令才有效。可以用Ctrl+Break中止命令的执行;(5)如果遇到语法出错,那么就显示“error”字样, 如: d cs:100 cs:110 error错误原因是,命令D要求第二个地址中只包含16进制的偏移值。(6)不能使用符号常量和符号地址。 (7)不能使用绝大部分伪指令,但两个最常用的伪指令DB和DW能被使用,用于直接把字节和字数据置人相应存储单元。如: DB 1,2,3,4,“ABCD” DW 1234,5678 (8)可以使用属性操作符“PTR”对DEBUG不能明确类型的操作数进行说明。如:INC BYTE PTR BX。 (9)DEBUG
5、的A命令汇编程序能根据转移目标地址的距离自动地汇编出短、近或远的转移或调用指令。当然,这也能由“SHORT”、“NEAR PTR”或FAR PTR”对转移目标地址进行说明来实现。 (10)远返回指令的助记符在DEBUG中为RETF。 (11)指令前缀助记符必须在相关的指令之前输入,也可以分别放在不同的行。 (12)串操作指令只能用其字节型或字型的助记符形式,如:MOVSB、CMPSW等。 (13)可以使用段超越前缀助记符CS:、DS:、ES:和SS:。如: DS: MOV AL,BP(二)DEBUG的命令参数许多命令的参数是主存逻辑地址,形式是“段地址:偏移地址”。其中,段地址可以是段寄存器或
6、数值;偏移地址是数值。如果不输入段地址,则采用默认值,可以是缺省段寄存器值。如果没有提供偏移地址,则通常就是当前偏移地址。例如:1000:0,ds:10,cs:30等;对主存操作的命令还支持地址范围这种参数,从哪个地址开始,到哪个地址结束。它有二种表示方式:地址 地址前者表示起始地址,要用“段值:偏移量”来表达,后者表示终止地址,只用“偏移量”来表示; 例如:200:50 100段值为200,偏移量从50到100的内存区域,地址 长度前者表示起始地址,要用“段值:偏移量”来表达,后者表示该区域的大小,用字母L开头的数值来表示。 例如:200:50 L100段值为200,偏移量从50开始的100
7、个字节区域。4、DEBUG命令的使用DEBUG的命令共有19条,这里具体介绍常用的几条,其余的请同学们课后自行消化。(1)装人命令(Load) 用途:把文件或特定磁盘扇区的内容加载到内存。说明:用单个Load命令可装入的最大扇区数是80H。如果出现读盘错,则DEBUG显示出错信息。 装入命令有两种形式: 形式1用于在没有参数或只用一个地址参数时,装入文件。L地址 ;形式1:装入由N命令指定的文件当使用不带参数的 L 命令时,在 debug 命令行上指定的文件将加载到内存中,从地址 CS:100 开始。Debug 同时将 BX 和 CX 寄存器设置为加载的字节数。如果不在 debug 命令行指定
8、文件,所装入的文件将是最近使用 n 命令指定的文件。如果使用带 address 参数的 L命令,Debug 将从内存位置 address 开始加载文件或指定扇区的内容。 形式2L地址驱动器扇区号扇区数用于从指定的驱动器中的盘上装人数据,并把数据存放在存储器中指定的address开始的单元中。 例如: L 4BA:100 1 OF 6D从驱动器B的盘上装人数据,并把数据存放在以4BA:100开始的内存中。从相对扇区0FH(15),即该软盘的第16扇区开始,传送6DH(109)个连续扇区的数据。其中,0表示A盘,1表示B盘,2表示C盘,。(2)命名命令(Name)格式:Ndrive:path fi
9、lename用途:把一个或两个可以包含路径的文件全名存入Debug中,以便在其后用L或W命令把文件装入或存盘。 说明:如果在无文件说明时启动DEBUG,在用L命令装入文件之前,必须使用Name命令。如果现在使用 w(写入)命令,Windows将使用名称 File2.dat 保存正在调试的文件 File1.exe。为避免出现此结果,应该总是在 l 或 w 命令之前使用 n 命令。 (3)退出命令(Quit) 格式:Q ;用途:结束DEBUG程序。 说明:Q命令不保存内存中正工作的文件,需要时可用Write命令保存文件。(4)汇编命令(Assemble) 用途:键人汇编指令,并把它们汇编成机器代码
10、,相继存放在从指定地址开始的存储区中。 格式:A地址;从指定地址开始汇编指令说明:输入给本命令的所有数字都是十六进制的。将输人的指令从指定的地址address开始装入内存的连续单元。如果不指定地址,则把语句装人CS:0100确定的区域中;如果已用过A命令,那么就在前一个A命令所装入的最后一条指令的后继单元中,接着输入指令。进行汇编的步骤如下:输入汇编命令A地址,按回车。Debug提示地址,等待你输入新指令; 输入汇编指令,按回车; 如上继续输入汇编指令,直到输入所有指令; 不输入内容就按回车,结束汇编,返回Debug的提示符状态。 DEBUG对不可用语句的响应是显示信息: error 并显示当
11、前的装人地址。A命令支持标准的8086(和8087浮点)指令系统以及汇编语言语句格式,但要注意以下一些规则:所有输入的数值都是16进制数; 段超越指令需要在相应指令前,单独一行输入; 段间(远)返回的助记符要使用RETF; A命令也支持最常用的两个伪指令DB和DW。(5)寄存器命令(Register) 用途:寄存器命令有三种功能: 显示单个寄存器的十六进制内容,并带有修改这些内容的选择。 显示全部寄存器、标志位、以及将被执行的下条指令。 显示8个标志位状态,并带有修改它们之中任一个或全部的选择。 格式:R 寄存器名 使用说明:显示和修改指定寄存器 有效寄存器是:AX、BX、CX、DX、SP、B
12、P、SI、DI、DS、ES、SS、CS和IP。例如,为了显示AX寄存器的内容,可输入:R AXAX F1E4 :_系统显示如下: 现在可以采用下列两个操作中的某一个: a按ENTER键保留未修改的内容。 b输入14字符的十六进制值来修改AX寄存器的内容,例如FFFH, AX F1F4 :FFF_现在按ENTER键把AX寄存器内容改变成0FFFH。 显示所有的寄存器和标志位 为了显示所有寄存器的内容和标志位(还有下条要执行的指令),输入: R则系统可能显示如下: AX=0E00 BX=00FF CX=0007 DX=01FF SP=039D BP=0000 SI=005C DI=0000 DS=
13、04BA ES=04BA SS=04BA CS=04BA IP=011A NV UP DI NG NZ AC PE NC 04BA:01lA CD21 1NT 21头4行显示寄存器十六进制内容和8个标志位状态。最后一行指出下一条要执行的指令地址和它的16进制机器码以及反汇编形式,这是当前CS:IP指向的指令。 显示标志位 有8个标志位,每位用2个字母表示是置“1”状态还是清除状态,详细说明见下表: 标志位的符号表示 标志位 名 称 Set(置位) clear(清除) 溢出(是否) 方向(减增) 中断(允许禁止)符号(负正) 零 (是否) 辅助进位(是否) 奇偶(偶奇) 进位(是否) O V D
14、 N E I N G Z R A C P E C Y N V U P D I P L N Z N A P O N C为了显示所有的标志位,输人命令: R F如果所有标志位处于置1状态,就显示: OV DN EI NGZR AC PE CY现在可以进行下面两个操作之中的某一个: a按ENTER键保留未修改的标志位状态。 b修改任一个或全部标志位状态。为了修改标志位,应输入它的相反码。可以按任何顺序,带或不带分隔的空格来输入此相反码。例如,为了修改第一、第三、第五和第七标志位,输入: 0V DN EI NG ZR AC PE CY 上面是按倒过来的顺序输入标志码的。按ENTER键则按所指定的要求修
15、改各标志位。(6)跟踪命令(Trace) 格式:T=地址 ;逐条指令跟踪T=地址数值;多条指令跟踪用途:从CS:IP或者=address(如果指定的话)单元中的指令开始单步执行一条或多条指 令。这里的=号必须输入。可以用value指定跟踪多条指令。每条指令执行后,显示所有寄存 器的内容、标志位的状态以及下一条要执行的指令。 例如,输入命令: T 如果IP寄存器内容为011A,而该地址指向的指令是MOV AH,0EH,这可能显示: AX=0E00 BX=00FF CX=0007 DX=01FF SP=039D BP=0000 SI=005C D1=0000 DS=04BA ES=04BA SS=
16、04BA CS=04BA IP=011C NV UP DI NG NZ NC PE NC 04BA:01lC CD21 INT 21这是执行011A中指令之后显示的结果,并且指出下条要执行的指令是04BA:011C单元中的INT 21。T命令逐条指令执行程序,遇到子程序(CALL)或中断调用(INTn)指令也不例外,也会进入到子程序或中断服务程序当中执行。(7)继续命令P(Proceed)类似T命令,逐条执行指令、显示结果。但是当遇到子程序调用、中断功能调用和循环指令等时,不在子程序、中断服务程序或循环体中单步执行,而是直接执行完成子程序、中断服务程序或循环体,然后显示结果。当不需要调试子程序
17、、中断服务程序或循环程序段时,要应用P命令,而不是T命令。P=地址数值 (8)反汇编命令(Unassemble) 反汇编命令有两种选择形式:U地址;从指定地址开始,反汇编32个字节, 如果不指定地址,则U命令认为起始地址是原先U命令反汇编过的最后指令的下一个单元。因此,连续地输入无参数的U命令能够对连续的内存单元进行反汇编,并产生连续的反汇编的显示。如果原先没有输入U命令,则起始单元是由DEBUG初始化在代码中的段内偏移值01OOH。U范围;对指定范围的主存内容进行反汇编, 不管系统显示格式如何,把指定地址范围内的所有指令都进行反汇编。(9)执行命令(GO) 用途:执行正在调试的程序。当达到所
18、指定的断点地址处时,就停止执行,并显示寄存器、标志位以及下一条要执行的指令。 格式:G=地址断点地址1,断点地址2,.,断点地址10 说明:如果不采用=address参数(必须输入=号),就从CS和IP寄存器内容决定的地址开始执行程序。如果指定=address,则程序就从CS:address处开始执行。断点可以没有,但最多只能有10个。程序正常结束,将显示“Programterminatednormally”。 执行命令(GO)有两种形式供选用: 形式1在无断点时,利用此形式执行正在调试的程序。 例如:G=address如果不采用=address时,在发出G命令之前,务必要把CS:IP值设置正
19、确。 形式2完成与形式1相同的功能,此外还允许在指定的地址上设置断点。 例如: G=address address address此形式使执行停在指定的单元上,因此可以检查系统程序环境。可以按任一种顺序指定十个断点。DEBUG程序在断点地址上用个中断码CCH置换该指令码。在执行时,无论到达哪个断点都停止执行,显示寄存器和标志位,并把所有断点地址的内容都恢复成它们原来的指令码。 例如:G 102 1EF 208从当前的指令开始执行,当前指令的地址是CS:IP的当前值。没有使用=address参数。指定了三个断点,假设到达第二个断点,指令执行到CS:1EF单元之前停止执行,恢复原来的指令码,取消所
20、有三个断点,产生显示并结束GO命令。(10)显示内存命令(Dump) 用途:显示存储器的内容。格式:D 地址;显示当前或指定开始地址的主存内容。例如:D CS:10D 范围;显示指定范围的主存内容.例如:D CS:100 10C 说明:用两个部分来显示内存内容: 十六进制部分。每个字节的值都用十六进制格式表示. 每个显示行显示 16 字节的内容,第 8 字节和第 9 字节之间有一个连字符。每个显示行从 16 字节的边界上开始。ASCII部分。每个字节的值都用 ASCII 码字符表示。每个非打印字符在显示的 ASCII 部分由句号 (.) 表示。(11)修改内存命令(Enter) E(Enter
21、)命令用于修改主存内容,它有两种格式:E地址 ;格式1,修改指定地址的内容 E地址数据表;格式2,用数据表的数据修改指定地址的内容格式1是逐个单元相继修改的方法。例如,键入“e ds:100”,Debug显示原来内容,用户可以直接输入新数据,然后按空格键显示下一个单元的内容,或者按“”键显示上一个单元的内容;不需要修改可以直接按空格或“”键;这样,用户可以不断修改相继单元的内容,直到用回车键结束该命令为止。 格式2可以一次修改多个单元,例如: -e ds:100 F3XYZ8D ;用F3/X/Y/Z/8D这5个数据替代DS:0100 0104的原来内容 5、DEBUG下的上机编程及程序调试方法
22、和操作实例 例21 在DEBUG下运行如下程序 MOV DL,33H ;字符3的ASCII码送DL MOV AH,2 ;使用DOS的2号功能调用 INT 21H ;进行功能调用,输出字符3 INT 20H ;正常结束程序中断调用 该程序运行结果是在显示器上输出一个字符3。如果要输出其它字符,可改变程序中 “33H”为相应字符的ASCII码。该程序涉及DOS功能调用,因为我们是在DOS的支持下运行 汇编语言程序,所以一般情况下,我们要使用DOS内部提供的中断服务程序完成输入输出及其它有关操作。 该程序上机操作如下: 进入DEBUG 设A驱动器上有DEBUG.COM程序。 ADEBUG 屏幕显示
23、_ 在该提示符下可键人任意DEBUG命令。下面用a命令送程序。 送程序并汇编 _ a 100 1D11:0100 MOV DL,33 1D11:0102 MOV AH,2 1D11:0104 INT 21 IDll:0106 INT 20 1D11:0108 至此程序已送完,并汇编成了机器指令。 运行程序 _ g 3 program terminated normally _ 如果想看一下机器指令是什么样子的话,方法之一是可以用反汇编命令u,作如下操作。 反汇编 _u100,107 1Dll:0100 B233 MOV DL,33 1Dll:0102 B402 MOV AH,02 1D1l:0
24、104 CD21 INT 21 1D11:0106 CD20 INT 20 送机器指令程序 e 200 B2,33,B4,02,CD,21,CD,20 执行机器指令程序 -g=200 3 Program terminated normally 退出DEBUG返回DOS _q A 例22 进入DEBUG送程序,用R命令显示状态,再用T命令单条执行。 进入DEBUG用A命令输入并汇编源程序 Cdebug _a100 0D4C:0100 mov ah,3 0D4C:0102 mov al,2 0D4C:0104 add a1,ah 0D4C:0106 int 20 0D4C:0108 用R命令显示寄
25、存器状态 _r AX=0000 BX=0000 CX=0000 DX=0000 SP=CFDE BP=0000 SI=0000 DI=0000 DS=0D4C ES=0D4C SS=0D4C CS=0D4C IP=0100 NV UP DI PL NZ NA PO NC 0D4C:0100 B403 M0V AH,03 _用T命令单条执行 _t AX=0300 BX=0000 CX=0000 DX=0000 SP=CFDE BP=0000 SI=0000 DI=0000 DS=0D4C ES=0D4C SS=0D4C CS=0D4C IP=0102 NV UP DI PL NZ NA PO N
26、C 0D4C:0102 B002 MOV Al,02 _t AX=0302 BX=0000 CX=0000 DX=0000 SP=CFDE BP=0000 SI=0000 DI=0000 DS=0D4C ES=0D4C SS=0D4C CS=0D4C IP=0104 NV UP DI PL NZ NA PO NC 0D4C:0104 00E0 ADD AL,AH _t (结果在AL中) AX=0305 BX=0000 CX=0000 DX=0000 SP=CFDE BP=0000 SI=0000 DI=0000 DS=0D4C ES=0D4C SS=0D4C CS=0D4C IP=0106 N
27、V UP DI PL NZ NA PE NC 0D4C:0106 CD20 INT 20 _g Program terminated normally 退出 _q C6、其余的命令下面的命令请同学们自己消化:(12)输出命令(Output)格式:O 端口地址字节数据 用途:把字节发送到指定的端口。 例如:为了把字节值4F发送到输出端口2F8,输人: 0 2F8 4F (13)比较命令(Compare) 用途:比较存储器中两个数据块的内容。 格式:C 范围 起始地址说明:对由“范围”指定的区域与“起始地址”指定的同大小区域进行比较,显示不相同的单元。参数 范围:指定要比较的内存第一个区域的起始和结束地址,或起始地址和长度。 起始地址:指定要比较的第二个内存区域的起始地址。(14)填写命令(Fill) 用途:用清单中的值填写范围内的存储单元。 格式:F范围数据表 说明:如果清单中包含的字节数小于地址范围,则重复地使用该清单,直到把所指定范围内的存储器单元填满为止。如果清单中包含的字节数大于地址范围,就忽略不计超过的部分。 例如: F 4BA:1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学生美术作品评价标准计划
- 从同行学习借鉴提升自我竞争力计划
- 社团组织文化培养计划
- 如何选择适合自己的理财产品计划
- 班级课外活动的丰富与多样化计划
- 加强仓库安全管理的个人思考计划
- 社区服务社团公益活动计划
- 2025年广州货运上岗资格证模拟考试
- 苏教版三上第8课《蒲公英》第二课时教学设计
- 2025年广东货运从业资格证考试题目大全
- 2024年高考语文阅读之李娟散文专练全国解析版
- 国开2024《人文英语4》边学边练参考答案
- 校本课程建设方案
- 《城市轨道交通信号基础设备》课件-第二章 信号机
- Premiere视频编辑案例教程(微课版)(第2版)(PremierePro2020) 课件 第1、2章 初识 Premiere Pro 2020、视频剪辑
- 口腔平滑肌瘤的手术治疗与预后
- 重点群体人员本年度实际工作时间表
- XX镇卫生院基本公共卫生服务项目实施方案(2024年)
- 2024年学校家校关系纠纷应急处置预案
- 机房建设工程方案
- 麦肯锡的《问题分析与解决技巧》课件
评论
0/150
提交评论