debug常用命令
实验一 Debug常用命令及80x86指令的使用

实验一 Debug常用命令及80x86指令的使用实验目的:通过实验掌握下列知识:1、DEBUG常用命令: A,U,D,E,R,T,G,Q。
2、80x86寄存器: AX/EAX,BX/EBX,CX/ECX,DX/EDX,FLAG,IP/EIP3、80x86常用指令: MOV/MOVSX/MOVZX,ADD/ADC,SUB/SBB,DAA,XCHG等。
内容及步骤:一、DEBUG 命令使用:1、打 DEBUG 进入 DEBUG 控制,显示提示苻 '_ '。
2、用命令 E 18E4:100 'A' 将'A'的ASCII码填入内存。
3、用命令 D 18E4:100 观察内存中的16进制码及屏幕右边的ASCII字符。
4、用命令 E 18E4:100 41 重复上二项实验,观察结果并比较。
5、用命令 E 18E4:100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?6、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。
7、用R命令将AX,BX内容改写为1050H及23A8H。
二、808x86常用指令练习1、传送指令1)用A命令在内存100H处键入下列内容:MOV AX,1234MOV BX,5678XCHG AX,BXMOV AH,35MOV AL,48MOV DX,75ABXCHG AX,DX2)用U命令检查键入的程序并记录,特别注意左边的机器码。
3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。
并注意标志位有无变化。
4)用G命令运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。
并注意标志位有无变化。
2、加减法指令:1)用A命令在内存100H处键入下列内容:MOV AH,34MOV AL,22ADD AL,AHSUB AL,78MOV CX,1284MOV DX,5678ADD CX,DXSUB CX,AXSUB CX,CX2)用U命令检查键入的程序及对应的机器码。
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常用命令

20122012-4-27
7
2)D命令(显示内存单元内容) ) 命令 显示内存单元内容) 命令(
格式3:_D DS: 长度↙ 格式3:_D DS:开始偏移地址 L 长度↙ 作用: 作用:显示指定段中从开始偏移地址起由长度指定的 字节单元的内容。 字节单元的内容。 :_D DS: 例:_D DS:4 L 5↙
20122012-4-27
2
1)R命令(查看和修改寄存器内容) ) 命令 查看和修改寄存器内容) 命令(
格式1:_R (_r 格式1:_R↙(_r↙) 作用:显示所有寄存器的内容。 作用:显示所有寄存器的内容。
20122012-4-27
3
1)R命令(查看和修改寄存器内容) ) 命令 查看和修改寄存器内容) 命令(
20122012-4-27
17
6)T命令(单步运行或跟踪) 命令(单步运行或跟踪)
格式2:_T 偏移地址↙ 格式2:_T =偏移地址↙ 作用:执行指定的偏移地址处的一条指令, 作用:执行指定的偏移地址处的一条指令,执行完后 停下来, 停下来,并显示所有寄存器内容及状态标志位的值和 下一条要执行的指令。 下一条要执行的指令。 :_T 0105↙ 例:_T =0105↙
20122012-4-27
9
3)E命令(修改内存单元内容) 命令(修改内存单元内容)
格式1:_E DS: 内容表↙ 格式1:_E DS:偏移地址 内容表↙ 作用: 作用:用内容表中内容去替换从偏移地址开始的内存 单元的内容。 单元的内容。 :_E DS: dsx’ AA↙ 例:_E DS:4 ‘dsx FF 00 AA↙
调试程序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命令大全

DEBUG命令大全(看看有啥用)a) 常用DOS命令1) 查看目录命令DIR,它列出所指盘上的文件目录,如:C>DIR D:2) 拷贝命令COPY,它把一个或多个文件拷贝成副本,如:C>COPY EX1.EXE D:3) 改变当前目录,格式为:C>CD 目录名4) 退出子目录,格式为:C>CD .. ,将退出当前子目录到直接外层目录下。
b) 熟悉DEBUG的使用方法,运行各种命令,观察运行后的情况1.DEBUG程序的调用在DOS提示符下,可键入命令:C>DEBUG [d:][path][文件名]其中文件名是被调试交件的名字,它须是执行文件(EXE),在DEBUG程序调入后,出现提示符"一",此时,可键入所需的DEBUG命令.2.DEBUG的主要命令〈1〉显示内存单元内容的命令D,格式为-D[地址]或-D[范围](2)修改内存单元内容的命令E,它有两种格式1) 给定的内容代替指定范围的单元内容一E地址内容表例如其中FLWX"'"Y""'Z"和8D各占一个字节,用这五个字节代替原内存单元内容,HXH,句""'Z"将分别按它们的ASCII码值代入。
2〉逐个单元相继地修改:-E地址例如一E 10018E4:0100 89.78此命令是将原100号单元的内容89改为78。
78是程序员键入的(3)检查和修改寄存器内容的命令R,它有三种方式1〉显示CPU内部所有寄存器内容和标志位状态,格式为-RR命令显示中标志位状态的含义如下表所示标志名置位复位溢出overflow方向direction中断interrupt符号sign零zero辅助进位auxiliary carry奇偶parity进位carry OVDNEINGZRACPECY NVUPDIPLNZNAPONC2)显示和修改某个指定寄存器内容,格式为一R寄存器名例如打入: -R AX系统将响应如下:AX F1F4:表示AX当前内容为FlF4,此时若不对其作修改,可按ENTER键,否则,打入修改后内容,如:-R BXBX 0369:059F则BX内容由0369改为059F3)显示和修改标志位状态,命令格式为-RF系统将给出响应,如OV DN EI NG ZR AC PE CY一这时若不作修改可按ENTER键,否则在"一'号之后键入修改值,键入顺序任意。
Debug命令详解

Debug命令详解Debug:A(汇编)Debug:C(比较)Debug:D(转储)Debug:E(键入)Debug:F(填充)Debug:G(转向)Debug:H(十六进制)Debug:I(输入)Debug:L(加载)Debug:M(移动)Debug:N(名称)Debug:O(输出)Debug:P(执行)Debug:Q(退出)Debug:R(寄存器)Debug:S(搜索)Debug:T(跟踪)Debug:U(反汇编)Debug:W(写入)Debug:XA(分配扩展内存)Debug:XD(释放扩展内存)Debug:XM(映射扩展内存页)Debug:XS(显示扩展内存状态)Debug命令详解Debug:A(汇编)直接将 8086/8087/8088 记忆码合并到内存。
该命令从汇编语言语句创建可执行的机器码。
所有数值都是十六进制格式,必须按一到四个字符输入这些数值。
在引用的操作代码(操作码)前指定前缀记忆码。
a [address]参数address指定键入汇编语言指令的位置。
对address 使用十六进制值,并键入不以“h”字符结尾的每个值。
如果不指定地址,a 将在它上次停止处开始汇编。
有关将数据输入到指定字节中的信息,请参看Debug E(键入)。
有关反汇编字节的信息,请参看Debug U(反汇编)说明使用记忆码段的替代记忆码为 cs:、ds:、es: 和 ss:。
远程返回的记忆码是 retf。
字符串处理的记忆码必须明确声明字符串大小。
例如,使用movsw 可以移动 16 位的字串,使用 movsb 可以移动 8 位字节串。
汇编跳转和调用汇编程序根据字节替换自动将短、近和远的跳转及调用汇编到目标地址。
通过使用near 或far 前缀可以替代这样的跳转或调用,如下例所示:-a0100:05000100:0500 jmp 502 ; a 2-byte short jump0100:0502 jmp near 505 ; a 3-byte near jump0100:0505 jmp far 50a ; a 5-byte far jump可以将 near 前缀缩写为 ne。
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各命令详细说明(很详细)2.启动DEBUG在命令窗口中启动DEBUG,启动命令一般为:DEBUG [文件名] [参数表]。
其中:文件名指定被调试的文件,其包括名和后缀,参数表是被调试文件运行时所需要的参数。
被调试的文件可以是系统中的任何文件,但通常它们的后缀为.EXE或.COM。
当DEBUG启动成功后,将显示连接符“-”,这时,可输入各种DEBUG命令。
DEBUG中所有命令及其含义如DEBUG各命令功能说明表所示。
关于使用命令的几点说明:在提示符“-”下才能输入命令,在按“回车”键后,该命令才开始执行命令是单个字母,命令和参数的大小写可混合输入可用F1、 F2、F3、Ins、Del、左移键、右移键等编辑键来编辑本行命令当命令出现语法错误时,将在出错位置显示“^ Error”可用Ctrl+C或Ctrl+Break来终止当前命令的执行,还可用Ctrl+S或Ctrl+Num Lock来暂停屏幕显示(当连续不断地显示信息时)以下通过实现十九个示例来熟悉DEBUG的命令集和基本的汇编指令。
R命令的使用R命令作用:观看和修改寄存器的值。
在提示符“-”下输入以下命令:R。
DEBUG将会显示出当前所有寄存器和标志位的状态。
接下来再输入命令RCX。
在提示符“:”后输入100。
该命令的作用是将寄存器CX的值设置为100(注意:DEBUG使用的是十六进制,这里的100相当于十进制的256。
)最后再执行R命令,观看修改后的寄存器值。
H命令的使用H命令作用:计算两个十六进制数的和与差。
在提示符“–”下输入以下命令:H 10 1。
观看命令执行结果。
运行结果的前一个数是计算出来的和,后一个数是计算出来的差。
计算结果均用十六进制形式表示。
D命令的使用D命令作用:显示内存区域的内容。
在提示符“–”下连续执行命令R、D、D。
观看命令执行结果。
前面已经介绍过了,命令R的作用是显示当前寄存器的值。
而命令D的作用是显示内存区域的内容,最左边是内存的起始地址,中间以十六进制的形式显示内存值,最右边是以ASCII码的形式显示内存值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Debug命令
键入命令E :带list参数。 list 值可以是十六进制字节串或字符串。使用空 格、逗号或制表符来分隔值。必须将字符串包括 在单或双引号中。
Debug命令
填充命令F:
使用指定的值填充指定内存区域中的地址。 可以指定十六进制或 ASCII 格式表示的数据。任何以 前存储在指定位置的数据将会丢失。 格式:f range list 参数
Debug命令
比较命令C
相同,则不显示任何内容,否则将不同处按如下格式显示: address1 byte1 byte2 addess2
Debug命令
寄存器命令R
显示所有寄存器内容或修改指定寄存器内容 格式:r [寄存器名] 若不带参数,则显示所有寄存器内容; 若带寄存器名,则首先显示内容,然后等待修改。
range:指定要填充内存区域的起始和结束地址,或起始地 址和长度。 list::指定要输入的数据。List 可以由十六进制数串或单/双 引号包括起来的字符串组成。
Debug命令
填充命令F:
如果 range 包含的字节数比 list 中的数值大,Debug 将在 list 中反复指 派值,直到 range 中的所有字节全部填充。
• Debug 命令中的 range 参数指定了内存的范围,可 以为 range 选择两种格式:
– 起始地址和结束地址 – 起始地址和长度(由字母l后跟十六进制数表示)
显示命令d [range]
– 当使用 d 命令时,Debug 以两个部分显示内存内容:十六进 制部分(每个字节的值都用十六进制格式表示)和 ASCII 码 部分(每个字节的值都用 ASCII 码字符表示)。每个非打印字 符在显示的 ASCII 显示命令d [range] 部分由句号 (.) 表示。每个显示行显示 16 – 字节的内容,第 8 字节和第 9 字节之间有一个连字符。每个 显示一定范围内存地址的内容。 显示行从 16 字节的边界上开始。 – 参数range 指定要显示其内容的内存区域的起始和结束地址,或起始地址 和长度。 – 如果不指定 range,将从以前 d 命令中所指定的地址范围的末 尾开始显示 128 个字节的内容。
Debug命令
运行命令G
g cs:7550 运行当前内存中的程序,直至执行到 CS 段中的 断点地址 7550 为止。Debug 将显示寄存器的内 容和标志的状态并结束 g 命令。 以下命令设置两个断点: g cs:7550, cs:8000 如果在 Debug 遇到断点之后再次键入 g 命令,将 从在断点之后的指令开始执行,而不是在通常的 开始地址执行。
执行命令P
– 格式:p [=address] [number] – address:起始地址 – number:指令条数 – 功能:从address处开始执行number条指令。 – 若address缺省则从CS:IP处开始执行;若 number缺省则执行1条指令。
Debug命令
执行命令P
指令条数缺省
如果 list 包含的数值多于 range 中的字节数,Debug 将忽略 list 中额外的值。 如果在 range 中的任何内存损坏或不存在,Debug 将显示错误消息并停 止 f 命令。
Debug命令
汇编命令A
按汇编语句向指定地址输 入程序。 格式:a [address] 参数 address 指定输入汇编语言指令 的位置。对 address 使 用十六进制值,不用输 入后缀“h” 。如果不指 定地址,a 将在它上次停 止处开始汇编。
Debug命令
反汇编命令U
若仅指定起始地址 则从起始地址处 开始反汇编20h 个单元。
Debug命令
运行命令G
运行当前在内存中的程序。 格式:g [=address] [breakpoints] address:起始地址。 若不指定 address,将从 CS:IP 处开始执行程序。 breakpoints:指定最多不超过10个的临时断点。
Debug命令
Debug命令
输入命令E 将数据输入到内存中指定的地址。 可以按十六进制或 ASCII 格式键入数据。 以前存储在指定位置的任何数据全部丢失。 e address [list] 参数 address 指定输入数据的第一个内存位置。 list 指定要输入到内存的连续字节数据。
Debug命令
Debug命令
反汇编命令U
– 将内存中的机器码转换成汇编语言指令。 – 格式:U [range] – range:
• 起始地址 结束地址 • 起始地址 l 长度 • 若缺省则从CS:IP处开始反汇编20h个单元的内容。
Debug命令
反汇编命令U
Debug命令
反汇编命令U
若无address2, 若不带参数,则从 则从address1 CS:IP处开始反 处开始反汇编 汇编20h个单元。 20h个单元。
Debug命令
跟踪命令T
起始地址和指令条数均缺省
Debug命令
搜索命令S
– 格式:s range list – range:
• 起始地址 结束地址 • 起始地址 l 长度
– list:
• 字节型数据(用空格或逗号隔开),或字符串(用 单引号或双引号括住)
Debug命令
搜索命令S
Debug命令
• Debug 命令中的 address 参数指定内存位置
– – – – 以下命令等价: 可以忽略段寄存器或段地址。 有效地址如下: dcs:100 110 a,g,l,t,u 和 w 命令的默认段是 CS。 CS:0100 d cs:100 110 所有其他命令的默认段是 DS。 d,cs:100,110 04BA:0100 所有数值均为十六进制格式。 从 CS:100 开始的 16 字节范围:
Debug命令
加减命令H
Debug 首先将指定的两个参数相加,然后从第一 个参数中减去第二个参数。这些计算的结果显 示ug命令
比较命令C
格式:c range address 参数 range 指定要比较的内存第一个区域的起始和结束地址,或起始地 址和长度。 address 指定要比较的第二个内存区域的起始地址。 如果 range 和 address 内存区域相同,Debug 将不显示任何内 容而直接返回到 Debug 提示符。 如果有差异,Debug 将按如下格式显示: address1 byte1 byte2 addess2
起始地址和指令条数均缺省
Debug命令
执行命令P
起始地址缺省
执行命令P
Debug命令
Debug命令
运行命令G
使用 address 参数 必须在 address 参数之前使用等号 (=) 以区分开 始地址 (address) 和断点地址 (breakpoints)。
Debug命令
加减命令H 对指定的两个参数执行十六进制运算。 格式:h value1 value2 参数 value1 代表从 0 到 FFFFh 范围内的任何十六进制 数字。 value2 代表从 0 到 FFFFh 范围内第二个十六进制 数字。
输入命令E
欲向100单元输入数据,输入命令后计算 机显示当前单元内容并等待新数据输入。
向100单元输入数据31后,每按一次空格键,屏幕显示下一单元内 容并等待输入新内容。当发现前几个单元有错误需修改则按“-”(减 号键),屏幕依次回退到需修改单元,然后可修改,若不需修改则 按空格键。若完成则按“enter”(回车键)。
• 使用不带参数的Debug命令
– 如果使用没有位置和文件名的 Debug 命令,则进入Debug 提示符状态, Debug 提示符为连字符 (-)。 – 在Debug 提示符状态下键入q命令则退出Debug 。
Debug命令格式
• 除了 q 命令之外,所有 Debug 命令都接受参 CS:100 10f 数,可以用逗号或空格分隔参数,但是只有在 CS:100 l 10 两个十六进制值之间才需要这些分隔符。
Debug常用命令简介
启动及退出Debug
• Debug可用于测试和调试 MS-DOS 可执行文件。
– Debug [[drive:][path] filename [parameters]] – 参数 [drive:][path] filename 指定要测试的可执行文件的位置和名称。 parameters 指定要测试的可执行文件所需要的任何命令行信息。
Debug命令
复制命令M
格式:m range address 将range区域的内容复制到address开始的内存中。
Debug命令
跟踪命令T
格式:t [=address] [value] address为跟踪的起始地址; value为跟踪的指令条数。 若value值缺省则跟踪1条指令。 若address缺省则从CS:IP处开始跟踪。