debug常用命令

合集下载

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

实验一 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调试程序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常用命令

调试程序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常用命令

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命令大全

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命令详解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调试程序的使用一、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各命令详细说明(很详细)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码的形式显示内存值。

debug十八命令讲解

debug十八命令讲解

DEBUG的十八命令讲解虽然Debug只是MS-DOS的一个外部命令,但它为我们编辑、调试程序提供了一个丰富的系统环境,曾红极一时的2.13汉字系统,就是吴晓军用Debug编辑生成的,可见其功能非同一般。

那么它到底有什么绝世武功呢?且看Debug绝学为您一一分解。

第一命令A(Assemble)招式:A[地址]功能:从指定地址开始(当地址缺省时,如果以前未用过此命令则从CS:100开始,如果以前用过此命令,则从它最后停止的地址开始,对输入的语句汇编到内存。

心法:1,支持8086/8087/8088指令集;2,可使用near或far修饰跳转或调用,near可缩写为ne;3,可以用word ptr 或byte ptr说明操作单元,word ptr可缩写为wo,byte ptr可缩写为by;4,支持伪指令db和dw;5,远返回助记符为retf;6,支持所有形式的寄存器间接寻址和所有操作码的同义词。

演练:请打开电脑跟我做(注:0B66是段地址,可能与您的不一样)。

c:\>Debug-a0B66:0100 jmp 1f0 '由于跳转地址未定,暂用1f0代替0B66:0103 db 0d,0a,07. 'Press enter key to return...',240B66:0123 mov al,00B66:0125 mov bx,2000B66:0128 mov cs,1Error 每行输完回车后,Debug自动检查语句是否正确,错误则给予提示,并要求重新输入0B66:0128 mov cx,10B66:012B mov dx,00B66:012E int 26 将A盘boot区装入内存ds:2000B66:0130 inc by [bx+1fd] 将ds:3fd字节加一0B66:0134 mov si,2000B66:0137 mov di,4000B66:013A cld0B66:013B mov cx,2000B66:013E repz0B66:013F movsb 将boot区从ds:20复制到ds:4000B66:0140 mov al,00B66:0142 mov bx,4000B66:0145 mov cx,10B66:0148 mov dx,00B66:014B int 26 把ds:400 boot区写回A盘0B66:014D mov dx,1030B66:0150 mov ah,90B66:0152 int 21 显示提示信息0B66:0154 xor ah,ah0B66:0156 int 16 从键盘读一字符0B66:0158 cmp al,0d0B66:015A jnz 154 是回车则退出,否则循环读0B66:015C int 200B66:015E 回车结束-a1000B66:0100 jmp 123 修正跳转地址0B66:0102 回车结束-rcxCX 0000:5e-wWriting 0005E bytes-q恭喜您,现在您已用Debug写出了第一个程序!各位可以用dir命令在当前目录查看一下,哈!不知什么时候已经在您的硬盘里安了家。

汇编debug命令大全

汇编debug命令大全

(11)写命令 ) 格式: 起始地址] 格式:W [起始地址 起始地址 功能: 功能: 将起始地址开始的数据写入由 CS:5CH处的文件控制块所指定的文件中。如果未 处的文件控制块所指定的文件中。 处的文件控制块所指定的文件中 指定地址则数据从CS:0100开始。 开始。 指定地址则数据从 开始 要写入文件的字节数应先放入BX和 中 注:要写入文件的字节数应先放入 和CX中。 文件大小为20字节 字节, 如:文件大小为 字节,则BX和CX中的内容应 和 中的内容应 设为: 设为: (CX)= 0014H ) (BX)=0000H ) 即: (BXCX)=00000014H ) 例 :N aa R bx R cx w cs:0 首先命名文件,名字为 首先命名文件,名字为aa; 其次把准备写入文件aa的字节数 其次把准备写入文件 的字节数 寄存器; 放入 BX和CX 寄存器 和 最后将代码段0000H单元开始的代码 最后将代码段 单元开始的代码 写入文件aa; 写入文件
(7)汇编命令 ) 格式: 起始地址 起始地址] 格式:A[起始地址 功能:允许键入汇编语言语句, 功能:允许键入汇编语言语句,并能把它们 汇编成机器代码, 汇编成机器代码,相继地存放在从指定地址开始的 存储区。 存储区。 把键入的数字均看成十六制数, 注:DEBUG把键入的数字均看成十六制数, 把键入的数字均看成十六制数 所以要键入十进制数,则其后必须加以标识符D。 所以要键入十进制数,则其后必须加以标识符 。 (8)反汇编命令 ) 格式1: 起始地址 起始地址] 格式 :U[起始地址 功能:从起始地址开始反汇编32个字节 个字节。 功能:从起始地址开始反汇编 个字节。 例:U100 如果地址被省略,则从上一个U命令的最后一 如果地址被省略,则从上一个 命令的最后一 条指令的下一个单元开始显示32个字节 个字节。 条指令的下一个单元开始显示 个字节。 格式2: 起始范围 起始范围] 格式 : U[起始范围 功能:对指定范围的存储单元进行反汇编。 功能:对指定范围的存储单元进行反汇编。 例:U100 10C

Debug主要命令

Debug主要命令

Debug主要命令1. A[地址] 汇编命令功能: 将指令直接汇编成机器码输入到内存中。

说明: 用于小段程序的汇编及修改目标程序,所有输入的数字均采用十六进制,用户装入内存的汇编语句是连续存放的,若没有指定地址,并且前面没有使用汇编命令,该语句被汇编到 CS:0100区域。

-a 010008F1:0100 MOV AH,0908F1:0102 MOV DX,10908F1:0105 INT 21H08F1:0109 db 'HELLO WORLD!$'08F1:0115-g2.D[地址] 或D[起始地址][目的地址] 转储命令功能: 以内存映象方式显示内存中的信息。

说明: 转储用左右两部分显示内存映象内容,左边以十六进制,右边以ASCII字符显示,所有不可打印字符用句号(.)表示。

每行显示16个字节的内容,在第八和第九个字节之间有一个连字符 - 此命令隐含的段地址为DS的值。

若未指定起始地址,则D命令从显示的最后一个单元的下一个单元开始显示,若以前没有使用给D命令,则从初使化的段寄存器的内容,加上地址偏移量 0100H 开始显示。

3.E[地址] [字节串) 修改内存命令功能: 从指定的地址开始修改内存值。

说明: 若地址部分只输入偏移量,则 E 命令认为段包括在DS寄存器中。

命令格式有两种:其一是用命令中包含的字节串替换从指定的地址开始的多个字节的内容;其二是命令后不跟字节串,则允许按顺序方式显示和修改字节,按下空格键为显示下一字节内容,若想修改,直接输入相应值。

4.F[地址范围] [字节或字节串] 填写命令功能: 将要填写的字节或字节串填入由地址范围指定的存储器中。

5.G[=起始地址] [[断点]……] 执行命令功能: 执行正在调试的程序,当达到断点时停止执行,并且显示寄存器标志和下一条要执行的命令。

说明: 如果没有指定起始地址,那么当前指令地址由CS,IP寄存器的内容来决定,如果用户指定起始地址就从指定的起始地址开始执行。

实用debug命令集锦

实用debug命令集锦

实用debug命令集锦1. 非物理0磁道坏软盘的修复此种损坏从软盘盘面上来看并没有明显的划伤和霉变。

一般可以恢复其数据,也可是软盘重新在利用。

处理方法如下:ⅰ. 进入debugⅱ. 取一张引导区没有损坏的好磁盘,插入软驱-l 100 0 0 1ⅲ. 插入损坏的磁盘到软驱-w 100 0 0 1-q注意:好盘与坏盘容量必须相同2. 物理0磁道坏软盘中的数据读取对于0磁道损坏的磁盘,一般来说是应该抛弃了,当你也不妨试一试已下方法:磁化处理:用较强的磁铁在靠近坏磁盘的表面处反复移动,切不可碰到磁盘介质,以免划伤表面,然后在试试格式化。

软盘换面:小心的将磁盘打开,坚磁片与金属芯片分开,方面后再按原来的方法粘在一起即可,在重新格式化。

diskfix:对于diskfix想必大家都用的比较多了,里面的磁盘修复功能很好用的。

能修复大多数磁盘表面错误。

3. 硬盘启动失败处理在正常机上格式化一张软盘,无其它数据进入debug-l 0 2 0 1-w 0 0 0 1-q用系统盘启动故障机后在进入debug-l 0 0 0 1-w 0 2 0 1-q4. 软盘不能正确读取解决方法如果使用软盘时出现如下提示general failure error reading drive a可以用以下方法解决:将一张好盘插入软驱进入debug-a 100****:*100 mov al,0****:**** mov cx,1****:**** mov dx,0****:**** mov bx,1000****:**** int 25****:**** int 20回车-g=0100插入坏盘并进入debug-a 200****:*100 mov al,1****:**** mov cx,1****:**** mov dx,0****:**** mov bx,1000****:**** int 26****:**** int 20回车-g=2005. cmos 数据的保存,恢复cmosram的’地址口’的口地址为70h ’数据口’的口地址为 71h 读取时只需将读的cmosram的地址送到70h,随后就可以从71 h中得到所需数据。

DEBUG命令集锦

DEBUG命令集锦

DEBUG是DOS操作系统中的一个外部命令,从DOS 1.0起就带有此命令。

利用此命令下的子命令,可以查看和修改寄存器、内存单元的内容;输入并执行汇编指令;可以查看(反汇编)代码段中的指令;可以对端口进行操作;可以对磁盘和磁盘文件进行操作;可以调试简单程序。

因此可见此命令的重要性了。

虽然此命令的功能非常强大,可以解决许多问题,可是对许多人来说,尤其是初学者来说,却非常不易掌握。

因此,现将学习汇编语言常用到的DEBUG的命令详细介绍一番,以让大家知道它的使用。

其他命令请参考其他详细资料。

1. A(汇编,ASSEMBLE)作用:直接将 8086/8087/8088 记忆码合并到内存(默认存到代码段中)。

该命令从汇编语言语句创建可执行的机器码。

所有数值都是十六进制格式,必须按一到四个字符输入这些数值。

在引用的操作代码(操作码)前指定前缀记忆码。

格式:A [ADDRESS]说明:ADDRESS指定键入汇编语言指令的位置。

对 ADDRESS 使用十六进制值,但键入时不以“H”字符结尾,如果十六进制数以字母开始,也不要在前面加“0”。

如果不指定地址,A 将在它上次停止处开始汇编。

例:在代码段中偏移地址为0200处存入指令MOV AX,BX (假定CS=0B49H)A 命令支持两个常用的伪指令:DB 操作码,将字节值直接汇编到内存,DW 操作码,将字值直接汇编到内存。

以下是两个伪指令的范例:A 命令支持所有形式的寻址方式和所有操作码同义词。

2. C(内存比较,COMPARE)作用:比较两个内存区域中的数据是否相同格式:C RANGE ADDRESS说明:①RANGE指定要比较的内存第一个区域的起始和结束地址,或起始地址和长度。

②ADDRESS指定要比较的第二个内存区域的起始地址。

如果内存第一个区域的内容和内存第二个区域的内容相同,DEBUG 将不显示任何内容而直接返回到DEBUG 提示符。

如果有差异,DEBUG 将按如下格式显示:ADDRESS1 BYTE1 BYTE2 ADDESS2例:比较DS:0000-DS:000F和ES:0000-ES:000F区域的数据以下命令具有相同效果:C 100,10F 300C 100 L10 300每个命令都对 100H 到 10FH 的内存数据块与 300H 到 30FH 的内存数据块进行比较。

debug常用主要命令

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程序的各种命令功能及使⽤⽅法。

⼆、实验⽬的1、掌握DEBUG程序的各种命令,重点是A,R,D,E,U,T,G,N,W,Q等命令的使⽤。

2、掌握⽤DEBUG调试⾃编程序的⽅法,为以后实验打下基础。

三、实验内容1、⽤命令A汇编下列指令,并判断指令正误并说明原因。

(1)ROR AX,8(2)LEA DI,[AX](3)MOV DS,2010(4)PUSH AL(5)OUT 900,AL(6)MOV [BX],02、掌握⽤DEBUG编写程序的⽅法。

C:\MASM>DEBUG-A136E:0100 MOV DX, 10C136E:0103 MOV AH, 9136E:0105 INT 21136E:0107 MOV AX, 4C00136E:010A INT 21136E:010C-E10C 'Hello!$'-R CX ;⽂件字节数写在CX中CX 0000:13-N /doc/57f16180d4d8d15abe234ef1.html ;给⽂件命名-W;写⼊到磁盘中Writing 00013 bytes-GHello!C:\MASM> DEBUG /doc/57f16180d4d8d15abe234ef1.html-U-G-Q四、问题1、在指令MOV [BX],AX中,操作数[BX]的寻址⽅式是什么?在DEBUG下执⾏完该指令后,如何查看执⾏结果?2、可否随意在DEBUG提⽰符“-”后不带参数发出命令G?什么情况下使⽤命令G时,可不⽤“=”给出程序的⾸地址?五、预习内容预习汇编程序的功能及汇编过程。

六、实验⽬的熟悉宏汇编MASM 6.0的使⽤,掌握对汇编语⾔源⽂件的编辑、汇编及连接的⽅法。

七、实验内容1、⽤编辑软件EDIT编辑源程序SAMPLE.ASM,功能是输出字符串“HELLO!”。

SAMPLE.ASM程序代码如下:DATA SEGMENTSTRING DB 'HELLO!',' $'DATA ENDSSTACK SEGMENT 'STACK'DB 100 DUP(?)STACK ENDSCODE SEGMENTMAIN PROC FARASSUME DS:DATA,SS:STACKASSUME CS:CODESTART:PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXLEA DX,STRINGMOV AH,9INT 21HMOV AH,4CHINT 21HRETMAIN ENDPCODE ENDS2、⽤MASM程序对其进⾏汇编,产⽣SAMPLE.OBJ⽂件。

debug常用命令解析

debug常用命令解析

debug常用命令解析debug常用命令解析1.!address eax查看对应内存页的属性2.vertarget 显示当前进程的大致信息3.!peb 显示process Environment Block4.lmvm 可以查看任意一个dll的详细信息例如:0:026 lmvm msvcrt (deferred)表示察看msvcrt.dll的信息,但是没有加载 symbol可以通过.reload命令来加载5.reload /!sym 加载符号文件6.lmf 列出当前进程中加载的所有dll文件和对应的路径0:018> lmf7.r 命令显示和修改寄存器上的值r命令显示和修改寄存器上的值0:018> r 显示寄存器的值0:018> r eax=0 修改了寄存器,把eax的值修改为0x08.d命令显示esp寄存器指向的内存如下0:018>d esp用dd命令直接指定054efc14地址0:018>dd 054efc14注意:第二个d表示DWORD格式,此外还有db(byte),du(Unicode),dc(char)等等。

数据查看指令 d{a|b|c|d|D|f|p|q|u|w|W}d{b|c|d|D|f|p|q}分别是显示:byte&ASCII,double-word&ASCII,double-word,double-precision,float,pointer-sized,quad-word 数据;DA用于显示ASCII,DU用于显示UNICODE;BYB,BYD,显示binary和Byte及binary和DWORD补充一个DV,用于查看本地变量用的9.e命令可以用来修改内存地址跟d命令一样,e命令后面也可以跟类型后缀,比如ed命令表示用DWORD的方式修改。

下面的命令把054efc14地址上的值修改为11112222。

0:018>ed 054efc14 11112222修改后可以用dd命令来查看内存。

常用DEBUG命令

常用DEBUG命令

常用DEBUG命令DEBUG命令是在命令提示符“_”下由键盘键入的。

每条命令以单个字母的命令符开头,然后是命令的操作参数,操作参数与操作参数之间,用空格或逗号隔开,操作参数与命令符之间用空格隔开,命令的结束符是回车键(ENTER)。

命令及参数的输入可以是大小写的结合。

Crtl+Break键可中止命令的执行。

Crtl+NumLock键可暂停屏幕卷动,按任一键继续。

所用的操作数均为十六进制数,不必写H。

1.汇编命令A格式:(1)A<段寄存器名>:<偏移地址>(2)A<段地址>:<偏移地址>(3)A<偏移地址>(4)A功能:汇编命令是将用户输入的汇编语言指令,汇编为可执行的机器指令。

键人该命令后显示段地址和偏移地址并等待用户从键盘逐条键入汇编语言指令。

每当输入一行语句后按“ENTER”键,输入的语句有效。

若输入的语句中有错,DEBUG会显示“^ Error”,要求用户重新输入,直到显示下一地址时用户直接键入回车键返回到提示符“_”。

其中(1)用指定段寄存器内容作段地址;(3)用CS内容作段地址;(4)以CS:100作地址。

以后命令中提及的各种‘地址’形式,均指(1)、(2)、(3)中A命令后的地址形式。

2.比较命令C格式:C <源地址范围>,<目标地址>其中<范围>是由<起始地址><终止地址>指出的一片连续单元,或由<起始地址> L <长度>指定的。

功能:从<源地址范围>的起始地址单元起逐个与目标起始地址以后的单元顺序比较单元的内容,直至源终止地址为止。

遇有不一致时,以<源地址><源内容><目标内容><目标地址>的形式显示失配单元及内容。

3.显示内存单元命令D格式:(1)D <地址>(2)D <地址范围>(3)D其中(1)以CS为段寄存器;(3)显示CS:100为起始地址的一片内存单元内容。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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处开始跟踪。
相关文档
最新文档