1DEBUG命令的功能及使用
debug指令详解

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 的使用实验目的:1.学习使用.学习使用DEBUG DEBUG DEBUG程序的各种命令。
程序的各种命令。
程序的各种命令。
2.掌握.掌握8088/868088/868088/86指令系统指令系统指令系统---------算数指令。
算数指令。
算数指令。
3.掌握用.掌握用DEBUG DEBUG DEBUG调试自编程序的方法。
调试自编程序的方法。
调试自编程序的方法。
4.掌握.掌握8088/8086 CPU 8088/8086 CPU 寄存器的用途和存储器组织及它们之间的关系。
寄存器的用途和存储器组织及它们之间的关系。
寄存器的用途和存储器组织及它们之间的关系。
5.掌握内存操作数及寻址方法。
.掌握内存操作数及寻址方法。
6.掌握汇编语言伪操作.掌握汇编语言伪操作:BYTE PTR,WORD PTR :BYTE PTR,WORD PTR。
内容及步骤:一、一、DEBUG DEBUG 命令使用命令使用: :1、 敲 DEBUG 进入进入进入 DEBUG DEBUG 环境,显示提示符环境,显示提示符环境,显示提示符 '_ ' '_ '。
2、 用命令用命令 D100 10F D100 10F 观察内存中的观察内存中的161616进制码及屏幕右边的进制码及屏幕右边的进制码及屏幕右边的ASCII ASCII ASCII字符。
字符。
字符。
3、 用命令用命令 E100 30 31 32 E100 30 31 32 ………… 3F 3F 将30H 30H~~3FH 3FH写入地址为写入地址为写入地址为100H 100H 100H开始的内存单元中,开始的内存单元中,再用再用D D 命令观察结果,看键入的命令观察结果,看键入的161616进制数是什么字符的进制数是什么字符的进制数是什么字符的ASCII ASCII ASCII码码?4、 用命令用命令 F100 10F 'A' F100 10F 'A' 将'A''A'的的ASCII ASCII码填入内存,用码填入内存,用码填入内存,用D D 命令查看结果。
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使用方法简介

2.3 DEBUG使用方法简介:DEBUG是DOS命令,必须在DOS环境下运行。
由于目前都使用WINDOWS操作系统,应设法进入实地址模式的DOS环境,才能可靠地运行DEBUG。
一般可用DOS启动盘启动系统,或在WINDOWS-98系统退出时选择“切换到MSDOS”操作,进入到实地址模式的DOS环境。
由于DEBUG是DOS外部命令,因此,须把DEBUG.EXE文件拷贝到当前目录下来运行DEBUG,DOS启动盘中应事先拷贝有DEBUG.EXE文件,在WINDOWS98系统中,“C:\WINDOWS\COMMAND\”目录下有DEBUG.EXE文件。
后面的操作,假设DEBUG.EXE文件都已事先拷贝到当前目录下。
在WINDOWS操作系统中(包括WINDOWS98、2K、XP等),系统提供了V86模式的“命令提示符”窗口,在此窗口中也能运行DEBUG,但DEBUG的某些功能会受到WINDOWS系统的限制。
1.启动与退出DEBUG:启动DEBUG,在DOS提示符下输入:DEBUG[回车]屏幕显示“-”,表示已启动了DEBUG。
“-”是DEBUG子命令等待状态,后面所有的DEBUG操作(包括运行调试自编的汇编语言程序)都是在此“-”提示符下所进行的DEBUG 子命令执行。
退出DEBUG,在“-”提示符下输入:Q[回车]屏幕显示DOS命令提示符:C:\> 或A:\> 。
2.进入与退出输入汇编指令:在“-”提示符下输入:A [偏移地址] [回车]屏幕显示“<段地址>:<偏移地址> |”,此处将等待你输入汇编语言程序或实验指令。
当一条指令输入完毕[回车]后,又将自动出现下一对“<段地址>:<偏移地址> |”等待你输入下条指令,如此重复,将帮助你把整段汇编语言程序输入完毕。
注意:如果输入汇编指令时手误,屏幕上将当场提示错误“ERROE”,自动地址不进步,还在原地址上等待你重新输入正确的汇编指令。
DEBUG命令详解

debug命令DEBUG命令参数详解DEBUG是一个DOS实用程序,是供程序员使用的程序调试工具,可以用它检查内存中任何地方的字节以及修改任何地方的字节。
它可以用于逐指令执行某个程序以验证程序运行的正确性,也可以追踪执行过程、比较一个指令执行前后的值以及比较与移动内存中数据的范围,读写文件与磁盘扇区。
它的功能包括以下几个方面。
1,直接输入,更改,跟踪,运行汇编语言源程序;2,观察操作系统的内容;3,查看ROM BIOS的内容;4,观察更改RAM内部的设置值;5,以扇区或文件的方式读写软盘数据DEBUG把所有数据都作为字节序列处理。
因此它可以读任何类型的文件。
DEB UG可以识别两种数据: 十六进制数据和ASCⅡ码字符。
它的显示格式是各个字节的十六进制值以及值在32与126之间的字节的相应ASCⅡ码字符。
在DEBUG中输入数据有两种方法: 提示方法和非提示方法。
在用提示方法时,用户可以输入要求输入数据的命令,后跟数据所要输入的地址。
然后用户就可以看到该地之中已有内容及一个冒号提示符。
此时用户可以在提示符下输入一个新的值或者按下回车键或CTRL+C回到短横(-)提示符。
在运用非提示方法时,用户可以输入要输入数据的内存地址以及要输入的字节。
但与使用字处理程序或正文编辑程序时不一样,在使用DEBUG时,用户不能直接移动光标到一入口点输入或修改数据,而要一次输入一个或几个字节。
在使用DEBUG时可以只涉及内存中的数据,从而一般都要指定所要处理的内存地址,地址的输入格式是: [段地址]: [位移]。
如果没有输入地址,DEBUG将假定为当前内存段,从位于地址100H的字节开始。
前100H字节保留给程序段前缀使用,这一专用区域用于建立DOS与程序之间的联系。
DEBUG总是用四位十六进制数表示地址。
用两位数表示十六进制数据。
讲到这里大家应该对DEBUG有了初步的了解,但是光知道这些可不够,接下来我来讲讲DEBUG的命令格式和命令。
DEBUG命令详解

命令行参数形式:格式:DEBUG [[驱动器号:][路径]文件名[调试参数]]用途:debug将所指定文件装入内存,显示提示符“-”等待进一步命令。
若装入文件为.exe文件,按照重定位原则装入为可执行状态。
.com文件类似。
若为其它类型文件则直接进行内存映射,由偏移量100H原封不动读入内存。
debug将在缓冲区为被调试程序建立适当的PSP(程序段前缀,Program Segment Prefix)。
在PSP中的偏移量80H为命令行的末尾。
而且在偏移量5CH和6CH由包含参数后面的可选参数构成缺省的FCB(文件控制块,File Control Block)。
进入时各寄存器初使情况:寄存器.com程序.exe程序AX 指定驱动器错误码指定驱动器错误码BX 程序空间的高地址程序空间的高地址CX 程序空间的低地址程序空间的低地址DX 0 0 SI 0 0DI 0 0BP 0 0SP 0FFFFH或可利用的不定内存空间上限减2IP 100H 目标程序的的代码入口偏移量CS PSP 目标程序代码段址DS PSP PSPCS PSP PSPSS PSP 目标程序堆栈段底命令:A: 编写汇编代码(Assemble)格式:A[地址]用途:程序允许在指定位置(若无缺省为IP指针位置)进行汇编程序书写。
细节:*所有数值皆为十六进制整数,数值后不带“H”*不支持文件管理用的目录表、宏标记、条件汇编*跳转指令后要直接书写十六进制地址不支持标号*数据类型若非默认类型,要以PTR加以指定*字符串操作要指定类型为B或W(如lodsb和lodsw等)及长度*用DB和DW接受数据定义,直按进行汇编*对内存地址加[]以与立即数区分C: 内存内容比较(Compare)格式:C 地址范围地址地址范围:做比较的第一个内存域始未地址或始地址和长度地址:做比较的第二个内存域的始地址用途:*对内存中两个域的内容加以比较,以字节为单位。
对发现有差别的内容及其地址用如下形式显示出:地址1 始位置未位置地址2*若地址范围或地址不含段地址,默认为DS的值。
实验一Debug命令的使用

实验一Debug命令的使用实验一Debug命令的使用一、实验说明1、 DEBUG简介DEBUG.EXE是DOS提供的用于调试可执行程序的一个工具软件。
在汇编语言程序调试中很常用。
DEBUG的提示符是“-”,所有DEBUG调试命令军在此提示符下输入。
DEBUG命令都是一个字母,后跟一个或多个参数,也可使用默认参数。
DEBUG命令的使用注意问题:(1)字母不分大小写(2)只使用十六进制数,但没有带后缀字母“H”(3)命令如果不符合DEBUG的规则,则将以“error”提示,并以“^”指示出错位置。
(4)每个命令只有按下回车键后才有效,可以用Ctrl+Break终止命令的执行。
2、 Debug的调入和退出以Windows环境为例,点击“开始/运行…”,在“运行”对话框中输入命令:cmd,然后点击“确定”,进入DOS命令行状态,如:C:\Documents and Settings\mjy>然后输入命令:>Debug进入Debug调试状态,出现Debug命令提示府“-”,在此提示符下可运行所需要的Debug 命令了。
退出Debug的命令:Q3、 Debug常用命令(1)汇编命令A,格式为:- A [地址]功能:从指定地址开始允许输入汇编指令,并将该指令汇编成机器指令代码从指定地址开始存放。
若不指定地址,则系统从默认的地址开始存放。
按回车键退出汇编状态应用:用于调试一条指令或几条指令组成的一个程序段。
(2)显示和修改寄存器命令R,格式为:- R [寄存器名]功能:若指定寄存器,则显示指定的寄存器的内容,并可进行修改;若不要修改,则按Enter 健。
若未指定寄存器,则默认为显示所有寄存器的内容。
应用:常用于通过寄存器的值查看指令的执行结果。
(3)内存单元内容的命令E,格式为:- E 地址[内容表]功能:若指定内容表,则用内容表中的内容代替指定地址开始的存储单元的值;否则,从指定地址开始逐个单元显示其内容,并等待用户修改,按空格键则继续显示下一单元的值,按回车键结束。
实验一 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内容
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一DEBUG命令的功能及使用
一实验目的
掌握汇编语言基本运行环境和熟悉DEBUG调试程序的命令。
包括:学习使用指令,掌握常用的指令功能和简单程序设计;掌握DEBUG调试程序的命令,熟悉程序输入、存储器和CPU寄存器及标志位的检查方法,单步、断点、连续等运行程序的调试方法。
二实验内容
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 <范围> <单元内容表>
功能:将单元内容表中的值逐个填入指定范围,单元内容表中内容用完后重复使用。
例如:-F 5BC:200 L 10 B2,‘XYZ’,3C <Enter>
5.执行命令G
格式:G [=<地址>[,<断点>]]
上式等价于:
(1)G
(2)G=<地址>
(3)G=<地址>,<断点>
功能: 执行内存中的指令序列
注:(1)从CS:IP所指处开始执行
(2)从指定地址开始执行
(3)从指定地址开始执行,到断点自动停止。
6.内存搬家命令M
格式:M <源地址范围> <目标起始地址>
其中源及目标地址若仅输入偏移量,则隐含相对DS。
功能:把<源地址范围>中的内容顺序搬至<目标起始地址>起的一片连续单元。
例如:-M CS:100 110 600
把从CS:100起至CS:110止17个字节搬至DS:600至DS:610的一片单元。
7.结束DEBUG返回DOS命令Q
格式:Q
功能:返回DOS提示符下
8.显示修改寄存器命令R
格式:R [<寄存器名>]
上式等价于:
(1)R
(2)R <寄存器名>
功能:(1)显示当前所有寄存器内容,状态标志及将要执行的下一指令的地址,代码及汇编语句形式。
其中对状态标志FLAG以每位的形式显示,见下表。
(2)显示指定寄存器内容
例如:-R AX <Enter>
-R F <Enter>
9.执行并显示系统环境命令T
格式:T [=<地址>] [<条数>]
功能:执行由指定地址起始的、由<条数>指定的若干条命令。
其中<地址>的缺省值是当前IP值,<条数>的缺省值是一条。
例如:-T <Enter> 执行当前指令并显示状态
-T 10 <Enter> 从当前指令始执行10H条指令
10.反汇编命令U
格式:U [<地址>/<地址范围>]
上式等价于:
(1)U <地址>
(2)U <地址范围>
(3)U
功能:将指定范围内的代码以汇编语句形式显示,同时显示地址及代码。
注意,反汇编时一定确认指令的起始地址后再作,否则将得不到正确结果。
地址及范围的缺省值是上次U 指令后下一地址的值。
这样可以连续反汇编。
三实验例程及步骤
例1 在DEBUG下运行如下程序。
MOV DL,33H ;字符3的ASCII码送DL
MOV AH,2 ;使用DOS的2号功能调用
INT 21H ;进入功能调用,输出‘3’
INT 20H ;BIOS中断服务程序,正常结束。
该程序运行结果是在显示器上输出一个字符‘3’。
如果要输出其它字符,请改变程序中‘33H’为相应字符的ASCII码。
运行步骤:
(1)进入DEBUG,用A命令送程序并汇编,见图1.1。
(2)用反汇编U 命令显示程序,图1.2为反汇编命令显示结果。
图中右边是汇编指令,中间是该汇编指令的机器码,左边是存放该条指令的内存单元地址。
(3)用执行命令G 执行程序,图1.3为执行结果。
(4)用E 命令送机器指令程序并用D 命令显示内存,运行过程见图1.4。
图1.1 汇编程序过程
图1.2 反汇编命令U 的显示结果
图1.3 执行命令G 的显示结果
图1.4 送机器指令并显示内容结果
(5)再次用执行命令G执行程序,图1.5为执行结果。
图1.5 G命令执行结果
(6)Q命令退出DEBUG返回DOS。
例2 在DEBUG下运行下述程序,查看执行结果。
MOV AX,0FEH ;被乘数0FEH送AX
MOV CL,2
SHL AX,CL ;被乘数乘以4,结果送AX
MOV BX,AX ;被乘数乘以4的结果送BX保留
MOV CL,2
SHL AX,CL ;被乘数乘以16,结果送AX
ADD AX,BX ;被乘数乘以20,结果在AX中
MOV [300H],AX ;将积存入DS段第300H—301H号内存单元
MOV AH,4CH ;将功能号4CH送AH
INT 21H ;执行DOS的4CH号功能调用,结束程序返回DOS。
该程序运行结果是将0FEH乘以14H,结果放在DS段第300H-301H号内存单元中。
(1)进入DEBUG,显示300H至301H号内存单元内容,见图1.6。
(2)用A 命令装入程序段并汇编,见图1.7。
(3)用T 命令执行到断点处(程序正常结束前)停止,执行“-T=100,8 <Enter>”后的结果见图1.8。
(4)用D 命令显示300H 至301H 的内容(最终结果),如图1.9
所示。
图1.6 D 命令显示结果
图1.7 用A 汇编程序
图1.8 用T 命令执行到断点处的结果
图1.9 用D命令显示最终结果
(5)用Q命令退出DEBUG环境,返回DOS。
四预习要求
1.安装并熟悉ASM汇编语言编译环境。
2.预习DEBUG的相关命令。
3.复习教材指令系统章节内容,熟悉8086/8088指令系统。
五实验报告要求及思考
1.根据实验描述汇编语言的编译过程,并画出相关流程框图;书写对教材指令系统等相关的实验结果。
2. 总结Debug调试程序的方法。
3.思考题。
下面是一个2字节非压缩BCD码加的程序,试分析程序中被加数和加数以及和分别存放在哪些寄存器中,程序中CH有何作用。
阅读后再设计一个2字节非压缩BCD码减法程序。
然后分别计算56+98=?,90-15=?,并查看各寄存器的内容。
MOV CH,AH
ADD AL,BL
AAA
XCHG AL,CH
ADC AL,BH
AAA
MOV AH,AL
MOV AL,CH
(注:专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。
可复制、编制,期待你的好评与关注)。