DEBUG实验参考

DEBUG实验参考
DEBUG实验参考

实验一顺序程序设计与DEBUG使用

一、实验题目

1.利用串操作传送指今将0FFH送入数据段的0180H开始的128个字节存储单元中,编写一段程序。

2.将数据段中0200H字节存储单元中的二位BCD码转换为二个ASCII码送0201H开始的二个字节单元中,编写—段程序。

3.编写一段程序,在内存中自SQTAB(0200H)地址开始的连续十个单元中存放0~9的平方值。要求利用计算法查表求NUM(0210H)单元中指定数(0~9中的任意一数)的平方值,并将所求平方值存入RESULT(0211H)单元中。

[注]:题目二和题目三可选做一个,题目一必做。

二、实验设备

硬件环境 IBM/PC及其兼容机

软件环境操作系统DOS6.22

调试程序https://www.360docs.net/doc/ec16027035.html,

三、实验要求

1、利用DEBUG程序中的A命令,对编写好的源程序进行编辑和汇编。

2、利用U命令对汇编后的目标程序进行反汇编,可检查编辑的程序是否正确,也可知道每条指令的IP值。

3、利用T、G命令对程序进行单步、没断点和连续执行。

4、利用R、D、E命令可对程序运行前预置数据,运行中检查中间结果和远行后检查最终结果。

5、利用Q命令退出DEBUG程序,返回DOS。

四、预习要求

1、复习DOS启动及DOS的有关命令的使用。

2、阅读本指导书的附录一,了解和掌握DCBUG程序中的 A、U、R、D、E、T、G和Q的书规定和功能。

3、预先编写好题目中的源程序。(第一题已有源程序,见实验步骤)

五、实验步骤

题目一:

1、启动DOS操作系统。

2、运行https://www.360docs.net/doc/ec16027035.html,程序

D:>DEBUG

— (此即处于DEBUG等待命令状态的提示符)

3、用A命令编辑和汇编源程序(黑体字部分为键盘输入部分)

_A

16C0:0100 MOV DI,0180

0103 MOV CX,80

0106 MOV AL,FF

0108 REP STOSB

010A HLT

010B

4、用U命令反汇编验证源程序

_U CS:0100

16C0:0100 BF8001 MOV DI,0180

16C0:0103 B97F00 MOV CX,0080

16C0:0106 BOFF MOV AL,FF

16C0:0108 F3 REPZ

16C0:0109 AA STOSB

16C0:010A F4 HLT

5、源程序若有错,可返回第3步用A命令进行修改,再进行3—4。无错误,可运行程序。

6、用R命令观察程序末执行前,程序中各有关寄存器内容,并填人括号中。

_R

AL=( 0000),DI=( 0000 ),CX=(0000 ),DS=( 141D ),CS=( 141D ),IP=( 0100)

7、用D命令观察程序未执行前,存放结果的存储区中内容。

_D ES:0180

8、用T命令执行一条指令,观察DI寄存器内容的变化,并填入此值:

_T

DI=( 0180 ) IP=( 0103) CS=( 141D )

9、用T命令一条条执行程序,并观察相应的寄存器内容或存储单元内容,一直执行到最后一条指令为止。

10、用D命令观察最终结果

_D ES:0180

此时可观察到ES:0180~ES:01FF单元中内容已全部改变为FF。

11、用R命令改变1P值,使它回到程序的第一条指令处

_R IP

_0100

12、用R命令以观察IP值,已改变为0100

_R

13、用A命令对存储数据的缓冲区改变位置

_A CS:0100

16C0:0100 MOV DI,0200

16C0:0103

14、用D命令观察程序执行前,存储区的内容

_D ES:0200

15.用G命令设置断点为HLT指令处

_G 10A

16.再用D命令观察执行结果

_D ES:0200

将会观察到,ES:0200--ES:027F的内容全改变为FF。

题目二

1.用A命令将已编写好的源程序进行编辑和汇编。

2.用E命令对DS:0200单元设置二位BCD码数据。

3.参照题目一的实验步骤,对上述程序进行调试和运行。

4.查看每一条指令执行的中间结果和最终结果,验证是否满足题目设计要求,若不满足,再用A命令对程序进行修改。重新对程序进行调试和运行,直到结果正确为止。

题目三

1.用A命令将已编写好的源程序进行编辑和汇编。

2.用E命令对DS:0200开始的平方表置0~9的平方值。对DS:0210单元置0~9中的任一数。

3.参照题目一的实验步骤,对上述程序进行调试和运行。

4.查看每一条指令执行的中间结果和最终结果,验证是否满足题目设计要求,若不满足,再用A命令对程序进行修改,重新对程序进行调试和运行,直到结果正确为止。

附录一、调试程序DEBUG的使用

DEBUG是专为汇编语言设计的一种调试工具,是汇编语言程序员必须掌握的调试手段。

一、如何调用DEBUG程序

在PC DOS的提示符D:>下,可以打人如下命令:

D:>DEBUGG[d:][path][filename[ext]][parm1][parm2]

其中DEBUG是调试程序的文件名;后面是要调试的程序的文件标识符。若在命令中规定了文件标识符,则在DOS把DEBUG程序调入内存后,DEBUG程序把要调试的程序(根据文件标识符)调入内存。若在命令中没有规定文件标识符,则DEBUG程序或者与正在内存中的内容打交道;或可以用Name和Load命令,从盘上输入要调试的程序。

命令行中的[parm1(参数1)][parm2(参数2)]。我们在后面结合具体的命令加以介绍。

在DEBUG程序调入后,出现提示符“—”。说明现在系统在DEBUG程序的管理之下,所有DEBUG命令,也只有在出现此提示符后才有效。

二、DEBUG程序对寄存器和标志位的初始化

在DEBUG程序启动后,它把各个寄存器和标志位,置成以下状态:

1.段寄存器(GS DS ES 和SS)置于自由存贮空间的底部,也就是DEBUG 程序结束以后的第一个段。

2.指令指针(IP)置为0100H。

3.堆栈指针置到段的结尾处,或者是装入程序的临时底部,取决于哪一个更低。

4.余下的寄存器(AX BX CX DX BP SI和 DI)置为0。但是,若调用DEBUG

时包含一个要调试的程序文件标识符,则CX中包含以字节表示的文字长度,若文件大于64K,则文件长度包含在BX和CX中(高位部分在BX中)。

5.标志位都置为清除状态。

6.default的磁盘缓冲区置于代码段的80H。

注:若由 DEBUG调入的程序,具有扩展名.EXE,则DEBUG必须进行再分配。把段寄

存器、维栈指针置为程序中所规定的值。

三、有关DEBUG命令的一些共同信息:

1。DEBUG命令都是—个字母,后面跟有一个或多个参政。

2.命令和参数可以用大写或小写或混合方式输入。

3. 命令和参数间可以用定界符分隔。然而定界符只是在两个邻接的16进制之间是必需的。因此,下列命令是等效的;

d cs:100 110

d cs:100,110

4.可以用按Ctrl Break键来停止一个命令的执行,返回DEBUG提示符。 5.每一个命令,只有按了ENTER键以后才有效,才开始执行。

6.若一个命令产生相当多的输出行,为了能在屏幕上当一行卷走以前读清楚它,可以在显示过程中,按Ctrl NumLock键,以暂停上卷;可以按任何一个字符来重新启动。

7.若DEBUG检查出一个语法错误,则显示具有错误的行和指示错误所在。

例如:

d cs:100 cs:110

error

四、DEBUG的主要命令

1.显示内存单元内容的命令(Dump Command)

为了了解程序执行的结果,检查内存单元的内容是十分重要的。此命令能检查指定范围的存贮单元的内容。命令的格式为:

D[地址] 或 D[范围]

其中,D是命令字母,[地址]或[范围]都是为了指定要显示的存贮单元的范围。

存贮单元的内容用两种方式显示:一种是每一个存贮单元的内容(每一字节)用两位16进制数显示;另一种是用相应的ASCII字符显示,句号(.)表示不可显示的字符。

显示有两种格式,若是40列系统显示格式,每—行显示8个字节,若是80列显示格式,每一行显示16字节。第8、9字节间有一连字符(—)。

显示命令有两种常用的格式:

(1)格式为:

D地址或 D

若命令中有指定地址,则从指定地址开始,显示40H个字节(相应于系统的40列显示格),或80H个字节(相应于80列显示格式)。

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

若在命令中所打人的地址中,只包含起始地址的偏移量,则D命令认为段地址包含在DS中。

例如:对于80列的显示格式

—D 100

显示的起始地址由 DS内容(作为段地址)与100H(作为偏移量)组成。共显示80H个单元的内容。

(2)显示指定范围的内容:

D 范围

在范围中包含起始地址和结束地址。若输入的起始地址中,未包含段地址部分,则D命令认为段地址在DS中;而输入的结尾地址中,只允许有地址偏移量。

例如:

-D DS:100 0200

2、修改存贮单元内容的命令

此命令用于修改存贮单元的内容,它有两种基本格式:

(1)用命令的内容表去代替指定范围的内存单元的内容

E 地址内容表

例如:

E DS:100 F3”XYZ”8D

内存单元DS:100到DS:104这5个单元的内容由表中给定的5个字节的内容(其中2个字节用16进制数表示,即F3、3D;另三个用字符表示,就是“XYZ”,用它们的ASCII码值代入)所代替。

(2)一个单元一个单元地连续修改方式

E 地址

在输入了上述命令,屏幕上显示指定单元的地址和原有的内容之后,可以采用以下几种操作中的一种:

1、再输入一个字节的16进制数,以代替原单元中的内容,然后可以采取下面三种操作之一。

2、按空格键,则上一个替换要求完成,且显示下一个单元的地址和原有的内容,要修改的话,则输入两位16进制数,再按空格键盘······这样就可以连续地进行修改。

若某一单元的内容不需要修改而操作要进行下去,则可直接按空格键。

3、输入一个连接号(-),则又显示前一单元的地址和内容,若要修改的话,就输入一个字节的内容,然后再按“-”,则又显示前一个单元的地址和内容······这样,就可以连续地进行反向修改。

若所示的前一单元的内容不需要修改,可直接按“-”键。

4、按回车键结束此命令。

3、检查和修改寄存器内容的命令(Register Command)

为了了解程序运行是否正确,检查寄存器内容的操作是十分重要的。

R命令有三种功能:

(1)能显示CPU内部的所有寄存器的内容和全部标志。

(2)能显示和修改一个指定的寄存器的内容。

(3)能显示和修改所有标志位的状态。

下面分别予以介绍:

1、命令格式:

则系统的响应为:

A>DEBUG EXAMPLE4.EXE

-r

AS=0000 BX=0000 CX=004A DX=0000 SP=0064 BP=0000 SI=0000 DI=0000 DS=07B5 ES=07B5 SS=07C6 IP=0000 NV UP DI PL NZ NA PO NC 07C6:0000 BSC507 MOV AX,07C5

前两行显示格式显示了所有CPU内部寄存器内容和全部标志的状态(其含

意在下面介绍),第三行显示了现行CS:IP所指的指令的机器码以及汇编符号,这就是下条即将要执行的指令。

2·命令的格式:

R 寄存器名

例如为了检查和修改寄存器AX的内容,可打入以下命令:

-R AX

则系统可能出现如下响应:

AX FIF4

此时,可采取以下两种操作之一:

若不需要改变其内容,直接按Enter键。

若需要改变内容的话,则输入1-4个16进制数值,再按Enter键,以实现修改。

例如:

-r BX

BX 0369

:059F

则BX中的内容由0369H改变成059FH。

3、显示和修改标志状态

在8086/8088中,共有九位标志,其中追踪标志T不能直接用指令改变,其它8个标志位可以显示和修改。

在显示时,8个标志的显示次序和符号如下:

标志名置位于复位

溢出 overflow (是/否) OY NY

方向 Direction (减量/增量) DN UP

中断 Interrupt (允许/屏蔽) EI DI

符号 Sign (负/正) NG PL

零Zero (是/否) ZR NZ

辅助进位 Anxigiary Carry (是/否) AC NA

奇偶 Parity (偶/奇) PE PO

进位 Carry (是/否) CY NC

命令的格式为:RF

系统可能给出如下响应:

OV DN EI NG ZG ZR AC PE CY-

于是可以采取以下两种之一的操作:

若不需要修改任一已设置的标志状态,可直接按Enter。

若有一个或多个标志需要修改,则可以输入此标志的相反的值。输入的标志的次序是无关的、输入的各个标志之间,可以没有空格。然后按Enter键,以实现修改。

例如:

OV DR EI NG ZR AC PE CY-PONZDINV

4、运行命令(Go Command)

为了检查程序运行是否正确,希望在运行中能设置断点,以便一段一段对程序对程序进行调试。

G命令的格式为:

G[=address][address][address…]]

其中,第一个参数=address规定了起始地址;以CS中的内容作为地址,以等号后面的地址作为地址的偏移量。在输入时=号是不可缺少的(以便与后面输入的数据点地址相区分)。

若不输入起始地址,则以CS:IP作为起始地址。

后面的地址参数是断点地址。若在命令行中,除了起始地址以外,没有任何地址参数,则程序执行时没有断点。在开始调试程序时,往往要设置断点。DEBUG 程序中允许最多可设置10个断点,这些断点地址的次序是任意的。设置多个断点的好处是:若程序有多个模块,多个通路,不管是哪一个通路执行,都有可能在断点处停下来。

DEBUG程序用一个中断类型3 指令(操作码为CCH)来代替被调试的程序在断点地址处的指令操作码。当程序行致电一个断点地址时就停了下来显示CPU 内部所有寄存器的内容,和全部标志位的状态(相当于一条R命令);被调试程序的所有断点处的指令被恢复(若程序行未遇到断点,则不恢复);全部断点被取消;返回DEBUG。

于是,就可以利用各种DEBUG命令来检查程序执行的结果和进行必要的修改。

注解:

1。命令中的地址参数所指的单元,必须包含有有效的8086/8088的指令码。若指定的地址单元,不包含有效指令的第一个字节,则会出现不可预料的结果。

2。对于GO命令,堆栈必须至少包含有6个可用的字节;否则会出现不可预料的结果。

3。若输入的断点地址,只包含地址偏移量,则G命令认为其段地址在段寄存器CS中。

5、追踪命令

追踪命令有两种格式:

(1)一条指令一条指令地追踪

若打入命令

T[=address]

则执行一条指定地址处的指令,就停下来,显示CPU所有寄存器和全部标志位的状态,以及下一条指令的地址和内容,返回DEBUG。此时可以用其它DEBUG 命令进一步检查此条指令执行的结果,和作必要的修改。

若在指令中没有指定地址,则从CS:IP的现行值执行。

(2)多条追踪命令

命令的格式为:

T=[=address][值]

此命令从指定的地址开始(若命令中用[=地址]给定了起始地址,则从这起始地址开始,若未给定,则从当前的CS:IP开始),执行由命令中的[值]所决定的几条指令,执行就停下来了。 T命令显示每条指令执行后的寄存器的内容和全部标志位的状态。执行停下来后,返回DEBUG,可以用DEBUG的其它命令进一步检查指令执行后的结果,和作必要的修改。

6.汇编命令(Assemble Command)

若在调试中发现程序中的某一部分要改写;或要增补一段等等,就可以直接在DEBUG下输入、汇编、运行和调试这一段程序。这比每一次修改都要经过编辑、汇编、连接……这样的过程简便多了。

汇编命令的格式为:

A[地址]

于是从指定的地址开始,可以输入汇编语言的语句,A命令把它们汇编成机器码从指定的地址单元开始连续存放。

若在命令中没有指定地址,但前面用过汇编命令的话,则接着上一个汇编命令的最后一个单元开始存放。若前面未用过汇编命令,则从CS:100单元开始存放。

若输入的语句中有错,DEBUG就显示

Error

且重新显示现行的汇编地址,等待新的输入。

DEBUG支持标准的8086/8088汇编语言语法(和8087指令系统),具有以下一些规则:

(1)所有输人的数字值,全为16进制数,可输入1—4个16进制数字字符。

(2)前缀助记符,必须在相关的指令之前输入,也可以分别放在不同的行。

(3)段超越助记符为CS:、DS:、ES:、SS:。

(4)串操作助记符中,必须注明串操作的长度:即说明是字操作还是字节操作。

(5)交叉段返回(远返回)的助记符为BETF。

(6)汇编程序能自动汇编短、近和远的转移和调用,取决于到目的地址的字节偏移量。这些也能够由NEAR和FAR前级来超越。

例如:

0100:0500 JMP 502 ;两字节短转移指令

0100:0502 JMP NEAR 505 ;三字节短转移指令

0100:0505 JMP FAR 50A ;五字节远转移指令

(7)D EBUG不能确定某些数涉及的是字存储单元还是字节存储单元。在这种情

况下,必须用前缀“WORD PTR”(可缩写为“WO”)0R“BYTE PTR”(可缩写为“BY”)来明确说明数据类型。例如:

NEG BYTE PTR[126]

DEC WORD PTR[SI]

(8)DEBUG也不能确定一个操作数是立即数还是存贮单元的地址。所以DEBUG 中存贮单元的地址,放在方括号中。例如:

MOV AX,21H ;把21H送至Ax

MOV AX,[21] ;把地址为21H以及22H存贮单元的内容送至Ax

(9)两个最常用的指令DB和DW也能被使用;用来直接把字节和字的值送入相应的存贮单元。例如:

DB 1,2,3,4,“THIS IS AN EXAMPLE”

DW 1000,2000,3000,“CH”

(10)DEBUG支持所有形式的寄存器间接寻址命令。例如:

ADD BX,34[BP+2][SI—1]

POP[BP+DI]

(11)DEBUG支持所有的操作码的同义词。例如:

LOOP 100

JA 200

下面我们举一个例子,来说明A命令的使用。

-A CS:0100

08F8:0100 db 30,31,32,33,34,356,37,38,39,41,42,43,44,45,46 08F8:0110 mov si,0100

08F8:0113 mov di,0200

08F8:0116 mov cx,10

08F8:0119 rep movsb

08F8:011b hlt

例:

08F8:011C

先用伪指令DB,输入要传送的源操作数;然后输入数据块传送程序。在程序输入完毕后,最后一行不输入内容,直接按回车,使返回DEBUG。

7.反汇编命令(Un assemble Command)

若在内存某一区域中,已经有了某一个程序的目标码。为了能清楚了解此程序的内容,就希望能把目标程序反汇编为源程序。这朱要用到U命令。

U命令有两种常用的格式。

(1)一种格式为:

U 或 U 地址

则从指定的地址开始,反汇编16个字节(在系统的40列显示方式)或反汇编32个字节(在80列显示方式)。

若在命令中没有指定地址,则以上一个U命令的最后一条指令的地址的下一单元作为起始地址;若没有输入过U命令,则以由 DEBUG初始化的段寄存器的值,作为段地址;以0100作为地址偏移量。

例如:A>debug examl1.exe

-u

0091:0000 B81F00 MOV AX,091F

0091:0003 8ED8 MOV DS, AX

0091:0005 8EC0 MOV ES, AX

0091:0007 B82209 MOV AX, 0922

0091:000A 8ED0 MOV SS, AX

这样的U命令一次显示32个字节(80列显示格式),但程序未完,可再用U 命令接着显示。

(2)第二种格式为:

U 范围

对指定范围的内存单元进行反汇编。

范围可以由起始地址、结束地址来规定,例如:

U 04Ba:0100 0108

也可以由起始地址及长度来规定。例如:

U 04BA:0100 L9

这与上一个命令的结果是相同的。

若命令中规定结束地址,则结束地址中只包含地址偏移量。

此命令一次把指定范围的内容反汇编出来。故若已知要反汇编的程序的长度(字节数),则用此命令,一次可把整个程序都反汇编出来。是很方便的。

8.输入命令(Input Command)

此命令能从指定的端口输入一个字节且显示出来。命令的格式为:I端口地址

I 34

5F

从端口地址34H输入一字节的内容5FH。

9.输出命令(Output Command)

此命令能向指定的端口输出一个字节。命令的格式为:

O端口地址字节值

10.命名命令(Name Command)

此命令有两个功能:

(1)用命令中给定的两个文件标识符<filespec)格式化在CS:5CH和CS:6CH的两个文件控制块(若在调用DEBUG程序时具有一个文件标识符,则它已格式化在CS:5CH的文件控制块)。

文件控制块是后面要介绍的Load命令和Write命令所需要的;且能提供所要求的文件名。

(2)能把命令中所打入的文件标认符和别的参数,精确地按照打入的情况(包括定界符),放至自CS:81H开始的参数保存区中,在CS:80H中保存输入的字符个数。在寄存器AX中保存前两个文件标识符中的驱动器标志。

N命令的格式为:N文件标识符[文件标识符]

若在调用DEBUG程序时,没有规定文件标识符,则必须先用N命令把要调用的文件标识符,格式化到CS;5CH的文件控制块中,才能用Load命令把它调入内存以进行调试。

A>DEBUG

-N myprog

-L

为了定义正在调试的程序所需要的文件标识符及其他参数,可输入以下命令。

A>DEBUG MYPROG

—N file1 file2

在这种情况下,在调用DEBUG时;就已经把文件MYPROG调人且放在自CS;100H 开始的存贮区中;而且此文件的文件控制块已格式化在CS:5C开始的区域中。

而N命令要格式化file1和file2的文件控制块至CS:5CH和CS:6CH处,这样file1的文件控制块就把原来的MYPROG的文件控制块冲掉了。

N命令还把命令中除命令字母N以外的所有字符(包括定界符)放至CS:81起的缓冲区中,CS:80中包含了字符个数。

11.装入命令(Load Command)

L命令有两种基本的功能:

(1)把磁盘上指定区域(指定驱动器和指定扇区范围)的内容,装入到内存的指定区域

中,命令的格式为:

L地址驱动器扇区号扇区数

其中地址是装入内存的起始地址,若输入时没有给定段地址,则L命令认为段地址包含在CS:中,第一个扇区号是指定的起始的相对扇区号;后一个是指定要装入的扇区数。 L命令一次能读人的最大区段数为80H。例如:

L 400:100 1 10 32

是指从B驱动器(由驱动器号1指定)相对扇区号10H开始装入32H(50)个扇区的内容至内存从400:100H开始的区城中。

(2)装入指定的文件

命令格式为:

L 地址

或 L

此命令装入巳在DS:5CH中格式化的文件控制块所指定的文件。所以在使用这种格式的L命令之前,在CS:5CH中必须有已格式化的文件标识符,这通常可以选用一条N指令来实现。

若命令中没有规定地址,则文件装入到CS:100开始的内存区域中;若命令中规定了地址,则装入至指定的区域中。但若是具有扩展名.COM或.EXE的文件,则始终是装入至CS:100O的区域中,即使在命令中指定了地址,此地址也即忽略。

在BX和CX中包含所读的文件的字节数,但若所读的文件具有扩展名.EXE,则BX和CX中包含实际的程序长度。

12.写命令(Write Command)

此命令把正在调试的数据,写入至磁盘中。 W命令一次能写入的最大扇区数为80H,W命令也有两种基本格式:

(1)把数据写至指定的扇区

命令的格式为:

W 地址驱动器扇区号扇区数

此命令把由地址所指定的内存区域中的数据,写入至指定的驱动器,起始扇区由命令中相对扇区号指定,要写入的扇区数也由命令中给定。

注释:

①写数据至指定扇区的操作要十分小心,因若有差错,就会破坏盘上的原有内容。

②若命令中给定的地址,只包含地址偏移量的话,则W命令认为段地址在CS中。

③记住起始扇区号和扇区数,都是用16进制数表示的。

例如:

W 1FD 1 100 A

此命令把内存起始地址为CS:01FD的缓冲区的数据,写入列驱动器B,起始扇区号为相对扇区号100H(256),共写入0AH(10)个扇区。

(2)写入至指定的文件中

命令的格式为:

W 或 W 地址

此命令把指定内存区域中的数据,写入到由CS:5CH处的文件控制块所规定的文件中。

若命令没有指定地址,则内存区域从CS:100H开始;若命令中给定地址,则从指定地址开始。

在用W命令以前,CS:5CH中必须要有要写入的文件的文件控制块,这可以先用一条N命令来实现。

在W命令以前,在BX和CX中应包含有要写入文件的字节数。

若企图写入具有扩展名.EXE或.HEX的文件,则DEBUG显示一个错误信息。因为这些文件的写入要用一种特殊格式,而这种格式,DEBUG程序不支持。

13.退出命令(Quit Command)

程序调试完,就要退出DEBUG程序,返回DOS时,可采用Q命令。命令格式为:

Q

Q命令并不把在内存中的文件存盘。若耍存盘的话.必须先用W命令。

实验一-DEBUG的使用(1)

实验一DEBUG的使用 一、实验目的 熟练掌握DEBUG的常用命令以及使用DEBUG调试程序的一般方法。 二、实验内容 1.熟悉DEBUG的常用命令 通过CMD命令进入DOS方式,运行DEBUG程序,练习DEBUG常用命令(DEBUG 常用命令详细说明见五和六)。 2.使用DEBUG调试程序 (1)用CMD命令进入DOS方式。 (2)运行DEBUG程序。 (3)使用A命令将以下笑脸程序逐行输入。 MOV DL,1 MOV AH,2 INT 21H INT 20H (4)使用T命令逐条指令运行笑脸程序,观察每条指令执行前后相关寄存器的内容变化情况。 (5)使用G命令连续运行笑脸程序,观察程序运行结果。 (6)使用R命令修改寄存器BX和CX的内容为笑脸程序的长度。 (7)使用N命令将笑脸程序命名为https://www.360docs.net/doc/ec16027035.html,。 (8)使用W命令将笑脸程序写到指定磁盘的指定路径目录中。 (9)退出DEBUG,进入笑脸程序所在目录。 (10)运行笑脸程序https://www.360docs.net/doc/ec16027035.html,。观察程序运行结果。 (11)用DEBUG调试已生成的https://www.360docs.net/doc/ec16027035.html,程序。 三、实验要求 认真完成实验每一步骤,详细记录实验过程、现象和结果,及时整理实验报告。

四、实验作业 1.用A命令或E命令将笑脸程序中第1条指令中的立即数修改为46,重复步骤(4)~(10),观察程序运行结果,分析为什么? 如果要将笑脸程序修改为显示别的字符程序,如何修改程序? 2.如果想无限循环显示笑脸,如何修改程序? 3.写出实验体会。 五、DEBUG简介 DEBUG是一种面向汇编语言的动态调试工具,共有19条命令。DEBUG提供了可以跟踪、测试程序的环境和条件,使编程者能对. EXE和.COM文件的执行进行动态跟踪调试,能够较快地查找出文件中的逻辑错误和检查程序的运行结果。此外,也可以在进入DEBUG后直接用小汇编语言(ASM)编写、调试一些小程序。 Microsoft DEBUG命令的具有以下共性: (1)DEBUG提示符为“-”。 (2)任何命令都以一个英文字母开头,后面跟一个或多个参数。 (3)命令字母和参数可用大写、小写或混合形式。 (4)命令字母和参数中相邻两个十六进制数之间必须用逗号或空格分开,其它各部分之间有无空格或逗号都可以。 (5)执行任何命令期间都可用Ctrl+Break或Ctrl+C结束命令的执行。 (6)键入命令字母和参数后必须按回车键才能使命令有效。 (7)在执行某命令期间,可按Ctrl + NumLock键暂停显示以便观察。再按任何其它键,则继续显示。 (8)DEBUG检查输入命令的语法错误,即如果输入的命令有错误,将显示错误信息。 (9)在DEBUG程序状态下,控制键和DOS支持的编辑键继续有效。 (10)DEBUG的启动方式有两种: 1)在DOS提示符下键入: DEBUG ADD.EXE (“”表示回车键,下同) 将出现DEBUG状态的提示符“-”,系统这时已处于DEBUG程序的管理下,并把指定的可执行文件ADD.EXE调入内存。此时,用户可在提示符

常用Linux系统Debug命令

常用Linux系统Debug命令 常用Linux系统Debug命令 命令系统,是一种计算机代码控制系统。常用Linux系统Debug 命令有哪些呢?下面是相关的知识,欢迎阅读。 1、查看TCP连接状态 netstat-nat|awk'{print$6}'|sort|uniq-c|sort-rn netstat- n|awk'/^tcp/{++S[$NF]};END{for(ainS)printa,S[a]}' netstat- n|awk'/^tcp/{++state[$NF]};END{for(keyinstate)printkey,"",s tate[key]}' netstat- n|awk'/^tcp/{++arr[$NF]};END{for(kinarr)printk,"",arr[k]}' netstat-n|awk'/^tcp/{print$NF}'|sort|uniq-c|sort-rn netstat-ant|awk'{print$NF}'|grep-v'[a-z]'|sort|uniq-c netstat-nat|awk'{print$6}'|sort|uniq-c|sort-rn netstat- n|awk'/^tcp/{++S[$NF]};END{for(ainS)printa,S[a]}' netstat- n|awk'/^tcp/{++state[$NF]};END{for(keyinstate)printkey,"",s tate[key]}' netstat- n|awk'/^tcp/{++arr[$NF]};END{for(kinarr)printk,"",arr[k]}' netstat-n|awk'/^tcp/{print$NF}'|sort|uniq-c|sort-rn

实验一 DEBUG的使用

实验一 DEBUG的使用 实验目的: 1.学习使用DEBUG程序的各种命令。 2.掌握8088/86指令系统---算数指令。 3.掌握用DEBUG调试自编程序的方法。 4.掌握8088/8086 CPU寄存器的用途和存储器组织及它们之间的关系。 5.掌握内存操作数及寻址方法。 6.掌握汇编语言伪操作:BYTE PTR,WORD PTR。 内容及步骤: 一、DEBUG 命令使用: 1、敲 DEBUG 进入 DEBUG 环境,显示提示符 '_ '。 2、用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。 3、用命令 E100 30 31 32 …… 3F 将30H~3FH写入地址为100H开始的内存单元中, 再用D命令观察结果,看键入的16进制数是什么字符的ASCII码? 4、用命令 F100 10F 'A' 将'A'的ASCII码填入内存,用D命令查看结果。 5、用命令 F110 11F 41 将41H 填入内存,用D命令观察结果并比较。 6、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内 容。 7、用R命令将AX,BX内容改写为1234H及5678H。 8、用H命令检查下列各组16进制数加减结果并和你的手算结果比较: (1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH 二、8088常用指令练习 1、传送指令 1)用A命令在内存100H处键入下列内容: MOV AX,1234 MOV BX,5678 XCHG AX,BX MOV AH,34 MOV AL,56 MOV CX,75AB XCHG AX,CX 2)用U命令检查键入的程序,特别注意左边的机器码。 3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。并注意标志位有无变化。 2、加减法指令: 1)用A命令在内存200H处键入下列内容:

汇编语言调试DEBUG命令详解

汇编语言调试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 10 2.修改命令E ① E 地址;从指定地址开始,修改(或连续修改)存储单元内容。DEBUG首先显示指定单元内容,如要修改,可输入新数据;空格键显示下一个单元内容并可修改,减号键显示上一个单元内容并可修改;如不修改,可直接按空格键或减号键;回车键结束命令。 ② E 地址数据表;从指定的地址开始用数据表给定的数据修改存储单元。 -E DS:100 F3 ‘AB’ 8D。 3.添充命令F F 范围数据表; 将数据表写入指定范围的存储单元;数据个数多,忽略多出的数据,个数少,则重复使用数据表。 -F DS:0 L5 01,02,03,04,05 -F DS:0 L5 01 02 03 04 05(空格分隔) -F DS:0 L5 FF ;5个字节重复使用FF 4.显示修改寄存器命令R R;★显示所有寄存器和标志位状态; ★显示当前CS:IP指向的指令。 显示标志时使用的符号: 标志标志=1 标志=0 OF OV NV DF DN UP IF EI DI SF NG PL ZF ZR NZ AF AC NA PF PE PO CF CY NC

5.汇编命令A A [地址];从指定的地址开始输入符号指令;如省略地址,则接着上一个A命令的最后一个单元开始;若第一次使用A命令省略地址,则从当前CS:IP 开始(通常是CS:100)。 注释:①在DEBUG下编写简单程序即使用A命令。 ②每条指令后要按回车。 ③不输入指令按回车,或按Ctrl+C结束汇编。 ④支持所有8086符号硬指令,伪指令只支持DB、DW,不支持各类符号名。 6.反汇编命令U ① U [地址];从指定地址开始反汇编32个字节的机器指令;省略地址时,则接着上一个U命令的最后一个单元开始;若第一次使用U命令省略地址,则从当前CS:IP开始(通常是CS:100)。 ② U 范围;对指定范围的单元进行反汇编。 -U -U100 -U100L10 7.运行程序命令G ① G;从CS:IP指向的指令开始执行程序,直到程序结束或遇到INT 3。 ② G=地址;从指定地址开始执行程序,直到程序结束或遇到INT 3。 ③ G 断点1[,断点2,…断点10];从CS:IP指向的指令开始执行程序,直到遇到断点。 ④G=地址断点1[,断点2,…断点10] -G ;从CS:IP指向的指令开始执行程序。 -G=100 ;从指定地址开始执行程序。 -G=100 105 110 120 8.跟踪命令(单步执行命令)T ① T;从当前IP开始执行一条指令。 ② T 数值;从当前IP开始执行多条指令。 ② T =地址; ③ T =地址数值; -T -T5 / -T=100 5 9.跟踪执行并跳过子程序命令P P [=地址] [数值];类似T命令,但跳过子程序和中断服务程序。 10.退出DEBUG命令Q Q;返回DOS环境。 -Q 11.命名命令N N 文件标示符;指定文件,以便用W命令在磁盘上生成该文件,或者用L命令从磁盘装入该文件。 -N MY_https://www.360docs.net/doc/ec16027035.html,

DEBUG调试程序的应用实验的报告.doc

电子电气工程学院学生实验报告 专业级 1 班 2 组姓名学号 课程名DEBUG 调试程序的应用指导教师成绩 一,实验预习 实验序号1实验题目DEBUG调试程序的应用预习日期 要求: 1.实验目的; 2,实验原理; 3,画出实验原理图; 4 实验设备; 5,预习内容(该实验完成的内容);6,记录表格设计 一实验目的 1、了解 DEBUG调试程序常用命令的基本格式、主要功能和使用方法。 2、熟悉进入或退出DEBUG调试程序运行界面的步骤。 3、掌握用DEBUG调试程序进行程序编辑、调试、运行、结果检查的基本方法。 4、进一步汇编语言上机环境及基本操作 二实验原理 1,启动 DEBUG程序,在 DEBUG环境下建立和汇编程序2,输入程序并汇编 A 2,_A 100 169C(CS):0100(ip) MOV DL, 33 ;DEBUG默认 16 进制数 169C: 0102 MOV AH,2 ;dos 的 2 号功能调用 169C: 0104 INT 2l ;功能调用 169C: 0106 INT(中断)20 ;中断 169C: 0108 ;回车结束程序的输入 3.运行程序_G=0100(全速运行)得到 3 4,用反汇编命令_U。然后分析该程序的指令:33 的 ascll 的值为 3, MOV 是将原操 作数送到DL 中( DL 为目标操作数)。 5,将机器指令程序送到起始地址为200H 的若干单元 6,执行机器指令程序_G=0200得到 3 7,执行 T 命令,实现单步运行。 8,执行 D 命令查看存储单元的原值。 E 是修改内存, R 显示修改内存命令。 四实验设备 微型计算机一台

实验一: 调试工具DEBUG的使用

《微型计算机技术实验》 实验一:调试工具DEBUG的使用 一.实验目的 掌握调试工具DEBUG的使用方法,理解汇编指令、存储单元和寄存器等有关概念,能够对简单的汇编语言程序进行调试。 二.实验内容 (1)学习调试工具DEBUG的使用方法,熟悉DEBUG常用命令的功能和用法。 (2)利用DEBUG调试简单的汇编语言程序,体会汇编指令的功能、寄存器的作用、存储单元地址与内容的概念和作用、以及程序的执行过程。 三.实验要求 (1)掌握DEBUG的常用命令和基本的程序调试方法 (2)熟悉和掌握指令系统常用指令的功能和用法,能熟练运用DEBUG调试工具调试简单的程序 四.实验指导 1、DEBUG 命令使用 1)键入 DEBUG 进入 DEBUG 控制状态,显示提示符 '- '。 例如:C:\DEBUG - 2)用命令 F 100 10F 'A' 将'A'的ASCII码填入内存。

(命令格式: F<范围><单元内容表>) 3)用命令 D 100 10F 观察内存中的十六进制码及屏幕右边的ASCII字符。(命令格式: D<地址范围>) 4)用命令 F 110 11F 41 重复上二项实验,观察结果并比较。 5)用命令 E 100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的十六进制数是什么字符的ASCII码? (命令格式: E<地址><批单元内容表>)6)用R命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。 7)用R命令将AX,BX内容改写为1050H及23A8H。 (命令格式: R<寄存器名>) 2、常用指令练习 1)内存操作数及各种寻址方式使用 ①用A命令在内存100H处键入下列内容: (注意:MOV 传送指令,INC加一指令,DEC 减一指令) -A 0100 MOV AX,1234 MOV [1000],AX MOV BX,1002 MOV BYTE PTR[BX],20 MOV DL,39 INC BX

实验一--掌握DEBUG-的基本命令及其功能

实验一掌握DEBUG 基本命令及其功能【上篇】查看CPU和内存,用机器指令和汇编指令编程 一.实验目的: 掌握DEBUG 的基本命令及其功能 掌握win7 win8 使用DEBUG功能 二.实验内容: 1. 预备知识:Debug的使用 (1) 什么是Debug? Debug是DOS、Windows都提供的实模式(8086方式)程序的调试工具。使用它,可以查看CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行。 (2) 我们用到的Debug功能 ●用Debug的R命令查看、改变CPU寄存器的内容; ●用Debug的D命令查看内存中的内容; ●用Debug的E命令改写内存中的内容; ●用Debug的U命令将内存中的机器指令翻译成汇编指令; ●用Debug的T命令执行一条机器指令; ●用Debug的A命令以汇编指令的格式在内存中写入一条机器指令。 (3) 进入Debug Debug是在DOS方式下使用的程序。我们在进入Debug前,应先进入到DOS方式。用以下方式可以进入DOS: ①重新启动计算机,进入DOS方式,此时进入的是实模式的DOS。 ②在Windows中进入DOS方式,此时进入的是虚拟8086模式的DOS。 三.实验任务 1. 从网上下载Dosbox和debug.exe(文件夹中有)。 2. debug.exe放在D:根目录,然后安装,安装完成以后,点击快捷方式进入Dos界面:

3.输入mount c d:\ 接着输入c: Dosbox 5.接着,你就可以使用Debug: debug 6.备注:debug.exe放在D:根目录下,你也可以把debug.exe放在任何一个文件夹下面。 其中这个文件夹就是mount c d:所对应的。 一.(1) 使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU 中相关寄存器中内容的变化。(逐条执行,每条指令执行结果截图) 机器码汇编指令 b8 20 4e mov ax,4E20H 05 16 14 add ax,1416H bb 00 20 mov bx,2000H 01 d8 add ax,bx 89 c3 mov bx,ax

掌握DEBUG基本命令

实验课程名称微型计算机原理实验报告_实验项目名称掌握DEBUG基本命令_专业班级电子信息科学与技术101班_学生姓名____________ 学号_____ 实验成绩 指导教师签字

贵 州 大 学 实 验 报 告 纸 系 别 班 级 姓 名 学号 课 程 名 称 成 绩 评 定 教师签名 实 验 时 间 2011年 11 月 23 日 一、实验目的 (1)熟悉DEBUG 有关命令的使用方法。 (2)利用DEBUG 掌握有关指令的功能。 (3)利用DEBUG 运行简单的程序段。 二、实验内容 Ⅰ.掌握DEBUG 程序的各种命令,重点掌握U ,G ,T ,D ,E ,R 命令。 ⒈ 反汇编命令:-U[地址] 该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U 命令的最后一条指令的下一个单元开始显示32个字节。

⒉运行命令G: ⒊追踪命令T,有两种格式: 1)逐条指令追踪:-T[=地址] 该命令从指定地址起执行一条指令后停下来,显示寄存器内容和状态值。 2)多条指令追踪: -T[=地址][值] 该命令从指定地址起执行n条命令后停下来,n由[值]确定。 ⒋显示内存单元内容的命令D,格式为: -D[地址]或-D[范围] 1)D命令后跟寄存器表示的地址 2)D命令后不加地址

3)D命令后加直接地址 ⒌修改内存单元内容的命令E,用给定的内容代替指定范围的单元内容: -E地址内容表 6.检查和修改寄存器内容的命令R,它有三种方式: 1)显示CPU内部所有寄存器内容和标志位状态;格式为:-R 2)显示和修改某个指定寄存器内容,格式为:-R 寄存器名 3)显示和修改标志位状态,命令格式为:-RF

实验一-Keil软件的使用及简单程序的调试方法

实验一Keil软件的使用及简单程序的调试方法 一、实验目的 掌握Keil的使用方法和建立一个完整的单片机汇编语言程序的调试过程及方法。 二、实验器材 计算机1台 三、实验内容 1.Keil的使用方法。 2.建立一个单片机汇编语言程序的调试过程及方法 四、实验步骤 1.Keil的使用方法。Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和C 语言的程序设计,界面友好,易学易用。启动Keil 后的界面如下:

几秒钟后即进入Keil的编辑界面。用户便可建立项目及应用程序。 2.简单程序的调试方法 Keil是通过项目工程来管理汇编程序的。因此在调试程序前必须建立一个工程,工程名称及保存位置由用户来指定,注意每位同学的工程名称用“学号姓名实验*”来命名。 (1)建立一工程 单击Project菜单,在弹出的下拉菜单中选中New Project选项。并在弹出的对话框中确定保存的位置及工程名称。 又弹出一对话框,要求用户选择相应的硬件CPU及相关设置。选择Atmel公司的AT89C51单片机。如下图所示

单击“确定”后在弹出的对话框中行选择“否”即工程建好了,但该工程没有任何语句,需要再建一个程序文件并将其添加到此工程中。 (2)建一文件 单击“File”/“New”命令,则弹出文件的编辑窗口,此时该文件还没有指明其文件名称及保存位置,该文件还没有加载到所建立的工程中。单击“File”/“Save”命令在弹出的对话框中指明文件的类型为.ASM汇编型及文件名后单击“保存”即可进行汇编源文件的编辑。如下图所示。 (3)将文件添加到工程中 单击“T arget 1”前的“+”号则展开后变成“-”号,并右键单击“Source Group 1”在弹出的下拉菜单中执行“Add Files to Group ‘Source Group 1’”命令并弹出对话框在该对话框中的“文件类型”下拉列表中选择“Asm source file”后找到要添加的文件名并选中,单击“Add”即可。

实验一 RFID设备调试及软件开发_学

实验一RFID读写器调试 学号: 姓名: 一、实验目的 1、学习各类RFID读卡器的使用。 2、掌握RFID读卡器程序设计的方法。 3、理解基于QT的RFID案例程序。 二、实验内容 调试CBT-IOT赛百特物联网实验箱HF高频读卡器,对ISO14443A卡进行识别、数据操作,并分析其通信协议。 调试FR105 HF高频读卡器,对ISO15693、ISO14443A卡进行识别,以及数据操作,并分析其通信协议。 调试FR1200 UHF超高频读卡器,对ISO18000-6C卡进行识别,以及数据操作,并分析其通信协议。 调试基于各种RFID读卡器的QT程序,包括电子钱包、公交卡充值、上班刷卡考勤系统、车流量统计、药品出入库、电子锁控制等应用,分析程序与读卡器之间的串口通信。

三、实验预备知识 1、CBT-IOT实验箱HF高频读写器 CBT- IOT实验箱HF板载模块特点: ●工作频率:13.56MHz ●芯片:MF RC531(高集成非接触读写卡芯片) ●支持ISO/IEC 14443A/B和MIFARE经典协议 ●支持mifare1 S50等多种卡类型 ●最大工作距离:100mm,最高波特率:424kb/s ●支持lCrypto1加密算法并含有安全的非易失性内部密匙存储器 ●处理器 STM8S105高性能8位架构的微控制器,主频24MHz ●通信方式:串口TTL,可直接插接无线通讯模块组网开发,多模块无线组网通讯●电源:DC 5V 串口设置:波特率115200bps,数据位8,停止位1,无校验位 通信协议: SOF Sensor typle Sensor id Cmd id Data Exten Data END 2Byte 1Byte 1Byte 1Byte 6Byte 2Byte 1Byte 说明: SOF:固定为0xEE 0xCC,标志一帧的开始。 Sensor typle:传感器类型,RFID为0xFE。 Sensor id:固定为0x01,为RFID读卡器的编号。 Cmd id:命令ID,0x01为充值,0x02为扣款,0x03为查询。

1DEBUG命令的功能及使用

实验一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 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以每位的形式显示,见下表。

实验一 DEBUG调试工具的熟悉

实验1 DEBUG的使用及程序调试方法 一、实验目的 通过本实验使学生掌握调试工具DEBUG的使用方法、理解汇编指令、存储单元和寄存器等有关概念,能对简单的汇编语言程序进行调试。 二、实验原理 DEBUG是DOS、WINDOWS都提供的实模式(8086方式)程序的调试工具,在DOS 方式下工作。使用它可以读写、传送、查看CPU各种寄存器中的内容、显示内存单元的内容、设置程序起始执行地址或断点、机器码级跟踪程序的运行。用DEBUG编程简单、方便和直观,可以直接查看程序的执行情况,便于熟悉和理解指令,掌握基本编程技巧。 DEBUG只使用十六进制表示数据(十六进制后面不加H),且对字母的大小写不敏感。 常用到的DEBUG功能: ?用DEBUG的R命令查看、改变CPU寄存器的内容 ?用DEBUG的D命令查看内存中的内容 ?用DEBUG的E命令修改内存中的内容 ?用DEBUG的U命令将内存中的机器指令翻译成汇编指令 ?用DEBUG的T命令执行一条机器指令 ?用DEBUG的A命令以汇编指令的格式在内存中写入一条机器指令 三、实验内容 (1)学习调试工具DEBUG的使用方法,熟悉DEBUG常用命令的功能和用法。 (2)利用DEBUG调试简单的汇编语言程序,体会汇编指令的功能、寄存器的作用、存储单元地址与内容的概念和作用,以及程序的执行。 四、实验方法与步骤 1.DEBUG的进入与退出 DEBUG是在DOS方式下使用的程序。在进入DEBUG前,应先以从 WINDOWS 2000/XP中进入DOS方式(进入的是虚拟8086模式的DOS)。 方法:选择【开始】菜单中的【运行】命令,打开【运行】对话框,在文本框中输入“cmd”后,单击【确定】按钮或按下键盘上的【Enter】键。在命令提示符后输入”debug”后按下键盘上的【Enter】键。 2. 显示寄存器命令 R 功能:用于查看和改变CPU寄存器的内容 格式:R [<寄存器>] 说明:当R命令后面不指定寄存器时,显示所有寄存器的内容 例1-1 显示所有寄存器的内容 -r AX=0200 BX=0000 CX=0000 DX=0041 SP=FFEE BP=0000 SI=0000 DI=0000 DS=138A ES=138A SS=138A CS=138A IP=0100 NV UP EI PL NZ NA PO NC 138A:0100 B241 MOV DL,41 例1-2 修改寄存器的内容 -r ax AX 0200 100 -r AX=0100 BX=0000 CX=0000 DX=0041 SP=FFEE BP=0000 SI=0000 DI=0000

实验一调试程序DEBUG的使用实验报告

南昌理工学院实验报告 二O一二年月日 课程名称:微机原理与接口技术实验名称:调试程序DEBUG的使用班级:姓名:同组人: 指导教师评定:签名: 【一、实验名称】 调试程序DEBUG的使用 【二、实验目的】 1.掌握汇编程序的编辑,编译,连接和执行的全过程; 2.学习和掌握用DEBUG 调试程序的方法。 【三、实验内容和原理】 1.用编辑软件,输入以下汇编语言源程序: DAT SEGMENT A D B 20 ;(自定) B DB 15 ;(自定) Y DB 3 DUP(0) Z DB 0,0 DAT ENDS STA SEGMENT STACK DW 50 DUP(?) STA ENDS COD SEGMENT ASSUME CS:COD,DS:DAT STAR PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DAT MOV DS,AX MOV AX,STA MOV SS,AX MOV AL,A MOV Z,AL MOV Z+1,AL CALL SUB1 MOV AL,B MOV Z,AL MOV Z+1,AL CALL SUB1 MOV AL,A MOV Z,AL MOV AL,B MOV Z+1,AL CALL SUB1 ADD WORD PTR Y,AX ADC BYTE PTR[Y+2],0 RET STAR ENDP SUB1 PROC MOV AL,Z MOV AH,Z+1 MUL AH ADD WORD PTR Y,AX ADC BYTE PTR[Y+2],0 RET SUB1 ENDP COD ENDS END STAR

汇编 DEBUG主要 命令 大全 最详细

DEBUG主要命令 DEBUG是为汇编语言设计的一种调试工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。 1.DEBUG程序的调用 在DOS的提示符下,可键入命令: C:>DEBUG [d:][path][文件名][参数1][参数2] 其中文件名是被调试文件的名字,它必须是可执行文件(EXE),两个参数是运行被调试文件所需要的命令参数,在DEBUG程序调入后,出现提示符“-”,此时,可键入所需的DEBUG命令。 2.DEBUG的主要命令 ⑴显示内存单元内容的命令D,格式为: -D [地址] 或-D [范围] 例如,显示指定范围内存单元内容的方法为: -D 100 1FF 18E4:0100 47 06 04 02 38 01 47 06 -06 02 00 02 47 06 08 02 G...8.G.....G... 18E4:0110 02 02 3B 04 02 68 02 00 -4D 20 50 51 56 57 8B 37 ..;..h..M PQVW.7 其中左边为十六进制表示形式,右边为ASCII码表示形式,“.”表示不可显示字符。这里没有指定段地址,D命令自动显示DS段的内容。 ⑵修改内存单元内容的命令E,它有两种格式 1)用给定内容代替指定范围的单元内容,格式为: -E 地址内容表 例如:-E DS:100 F358595A8D,即用F3,58,59,5A,8D五个字节代替内存单元DS:100到DS:104的内容。 2)逐个单元相继地修改,格式为: -E 地址 例如:-E DS:100 18E4:0100 89.78 此命令是将0100单元内容89改为78。78是程序员从键盘输入的。程序员在修改完一个单元后,可按“空格”键继续修改下一单元内容,直至按“回车”键结束该命令。 ⑶检查和修改寄存器内容的命令R,它有三种方式 1)显示CPU内部所有寄存器内容和标志寄存器中的各标志位状态 -R 该命令可显示AX,BX,CX,DX,SP,BP,SI,DI,DS,ES,SS,CS,IP及标志寄存器内容。

DEBUG的基本调试命令

实验一 DEBUG的基本调试命令 一、实验目的 1.熟悉Pentium微处理器指令系统和寻址方式 2.掌握DEBUG调试软件的基本命令、调试方法。 二、DEBUG调试软件介绍 DEBUG.EXE程序是专门为分析、研制和开发汇编语言程序而设计的一种调试工具,具有跟踪程序执行、观察中间运行结果、显示和修改寄存器或存储单元内容等多种功能。它能使程序设计人员或用户触及到机器内部,因此可以说它是80X86CPU的心灵窗口,也是我们学习汇编语言必须掌握的调试工具。WINDOWS操作系统安装时自带有DEBUG.EXE程序,不需另外安装。 1、DEBUG程序的使用 在DOS提示符下键入命令: C:\> DEBUG [盘符:][路径][文件名.EXE][参数1][参数2] 这时屏幕上出现DEBUG的提示符“-”,表示系统在DEBUG管理之下,此时可以用DEBUG 进行程序调试。若所有选项省略,仅把DEBUG装入内存,可对当前内存中的内容进行调试,或者再用N和L命令,从指定盘上装入要调试的程序;若命令行中有文件名,则DOS把DEBUG 程序调入内存后,再由DEBUG将指定的文件名装入内存。 2、DEBUG的常用命令 (1)汇编命令 A 格式:A [起始地址] 或 A ;每输入完一条指令,用回车键来确认。 功能:将输入源程序的指令汇编成目标代码并从指定地址单元开始存放。若缺省起始地址,则从当前CS:100 (段地址:偏移地址)地址开始存放。A命令是按行进行汇编,主要是用于小段程序的汇编或对目标程序的修改,具有检查错误的功能。如有错误,用^Error提示。然后重新输入正确命令即可。 注:DEBUG的A命令中数字部分输入的默认格式是16进制。如输入10,对于计算机而言,就是10H。另外A命令不支持标识符的输入。只能用准确的段地址:偏移地址来设置跳转的位置。 (2)反汇编命令 U 格式1:U [起始地址] 格式2:U [起始地址][结束地址|字节数] 功能:格式1从指定起始地址处开始固定将32个字节的目标代码转换成汇编指令形式,缺省起始地址,则从当前地址CS:IP开始。 格式2将指定范围的内存单元中的目标代码转换成汇编指令。 (3)显示、修改寄存器命令 R 格式:R[寄存器名]或R 功能:若给出寄存器名,则显示该寄存器的内容并可进行修改。缺省寄存器名,则按以下格式显示所有寄存器的内容及当前值(不能修改)。 AX=0000 BX=0004 CX=0020 DX=0000 SP=0080 BP=0000 SI=0000 DI=0000 DS=3000 ES=23A0 CS=138E IP=0000 NV UP DI PL NZ NA PO NC 138E:0000 MOV AX,1234 -R AX ;输入命令 AX 0014 ;显示AX的内容 : ;供修改,不修改按回车。 若对标志寄存器进行修改,输入:-RF 屏幕显示如下信息,分别表示OF、DF、IF、SF、ZF、AF、PF、CF的状态。 NV UP DI PL NZ NA PO NC 不修改按回车键。要修改需个别输入一个或多个此标志的相反值,再按回车键。R命令只能显示、修改16位寄存器。

实验一 Keil软件的使用及简单程序的调试方法

实验一 Keil软件的使用及简单程序的调试方法 一、实验目的 掌握Keil的使用方法和建立一个完整的单片机汇编语言程序的调试过程及方法。 二、实验器材 计算机1台 三、实验内容 1.Keil的使用方法。 2.建立一个单片机汇编语言程序的调试过程及方法 四、实验步骤 1.Keil的使用方法。Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和C 语言的程序设计,界面友好,易学易用。启动Keil 后的界面如下: 几秒钟后即进入Keil的编辑界面。用户便可建立项目及应用程序。 2.简单程序的调试方法 Keil是通过项目工程来管理汇编程序的。因此在调试程序前必须建立一个工程,工程

名称及保存位置由用户来指定,注意每位同学的工程名称用“学号姓名实验*”来命名。 (1)建立一工程 单击Project菜单,在弹出的下拉菜单中选中New Project选项。并在弹出的对话框中确定保存的位置及工程名称。 又弹出一对话框,要求用户选择相应的硬件CPU及相关设置。选择Atmel公司的AT89C51单片机。如下图所示 单击“确定”后在弹出的对话框中行选择“否”即工程建好了,但该工程没有任何语句,需要再建一个程序文件并将其添加到此工程中。 (2)建一文件 单击“File”/“New”命令,则弹出文件的编辑窗口,此时该文件还没有指明其文件名称及保存位置,该文件还没有加载到所建立的工程中。单击“File”/“Save”命令在弹出的对话框中指明文件的类型为.ASM汇编型及文件名后单击“保存”即可进行汇编源文件的编辑。如下图所示。

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],0 2、掌握用DEBUG编写程序的方法。 C:\MASM>DEBUG -A 136E:0100 MOV DX, 10C 136E:0103 MOV AH, 9 136E:0105 INT 21 136E:0107 MOV AX, 4C00 136E:010A INT 21 136E:010C -E10C 'Hello!$' -R CX ;文件字节数写在CX中 CX 0000 :13 -N https://www.360docs.net/doc/ec16027035.html, ;给文件命名 -W;写入到磁盘中 Writing 00013 bytes -G Hello! C:\MASM> DEBUG https://www.360docs.net/doc/ec16027035.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 SEGMENT STRING DB 'HELLO!',' $' DATA ENDS STACK SEGMENT 'STACK' DB 100 DUP(?) STACK ENDS CODE SEGMENT MAIN PROC FAR ASSUME DS:DATA,SS:STACK ASSUME CS:CODE START:PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX LEA DX,STRING MOV AH,9 INT 21H MOV AH,4CH INT 21H RET MAIN ENDP CODE ENDS END START 2、用MASM程序对其进行汇编,产生SAMPLE.OBJ文件。 3、用LINK程序对其进行连接,产生SAMPLE.EXE文件。 4、执行SAMPLE.EXE文件,并观察运行结果是否相符。 5、用DEBUG调试程序。 八、问题 1、汇编语言源程序、汇编程序及汇编之间的区别与联系? 程序中MOV AH,4CH 与 INT 21H 这两条语句的功能是什么?能否省略?

DOS的debug命令大全

DOS的提示符下,可如下键入Debug启动调试程序: DEBUG [路径\文件名] [参数1] [参数2] Debug后可以不带文件名,仅运行Debug程序;需要时,再用N和L命令调入被调试程序。命令中可以带有被调试程序的文件名,则运行Debug的同时,还将指定的程序调入主存;参数1/2是被调试程序所需要的参数。 在Debug程序调入后,根据有无被调试程序及其类型相应设置寄存器组的内容,发出Debug的提示符“-”,此时就可用Debug命令来调试程序。 ?运行Debug程序时,如果不带被调试程序,则所有段寄存器值相等,都指向当前可用的主存段;除SP之外的通用寄存器都设置为0,而SP指示当前堆栈顶在这个段的尾部;IP=0100h;状态标志都是清0状态。 ?运行Debug程序时,如果带入的被调试程序扩展名不是.EXE,则BX.CX 包含被调试文件大小的字节数(BX为高16位),其他同不带被调试程序的情况。 ?运行Debug程序时,如果带入的被调试程序扩展名是.EXE,则需要重新定位。此时,CS : IP和SS : SP根据被调试程序确定,分别指向代码段和堆栈段。DS=ES指向当前可用的主存段,BX.CX包含被调试文件大小的字节数(BX为高16位),其他通用寄存器为0,状态标志都是清0状态。Debug的命令都是一个字母,后跟一个或多个参数:字母 [参数] 命令的使用中注意: ①字母不分大小写; ②只使用16进制数,没有后缀字母; ③分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数间可无分隔符; ④每个命令只有按了回车键后才有效,可以用Ctrl+Break中止命令的执行; ⑤命令如果不符合Debug的规则,则将以“error”提示,并用“^”指示错误位置。 许多命令的参数是主存逻辑地址,形式是“段基地址 : 偏移地址”。其中,段基地址可以是段寄存器或数值;偏移地址是数值。如果不输入段地址,则采用默认值,可以是缺省段寄存器值。如果没有提供偏移地址,则通常就是当前偏移地址。 对主存操作的命令还支持地址范围这种参数,它的形式是:“开始地址结束地址”(结束地址不能具有段地址),或者是:“开始地址 L字节长度”。

实验一 利用DEBUG调试程序调试程序段

实验一利用DEBUG调试程序调试程序段1.实验目的 (1)熟悉DEBUG有关命令的使用方法。 (2)利用DEBUG掌握有关指令的功能。 (3)利用DEBUG运行简单的程序段。 2.实验内容、实验步骤 (1)进入和退出DEBUG程序。 进入DEBUG程序,Windows中在命令提示符下进入DEBUG如图:退出DEBUG如图: (2)学会DEBUG中的D命令、E命令、R命令、T命令、A命令、G命 令等的使用。对于U命令、N命令、W命令等,也应试一下。 R命令: 1)显示所有寄存器内容: 格式:-R↙ 功能:以十六进制形式显示CPU内部各寄存器的值:以符号形式标志寄存 器各标志位(除TF外)的值,并将CS:IP所指的内存内容反汇编成一条指 令,可视为将要执行的指令。 ●从显示可知,CS=11A7H, IP=0000H. 2)修改寄存器 格式:-R 寄存器名↙ 功能:DEBUG首先显示指定寄存器的当前值,并在下一行首给出提示“:”, 等待用户输入新值,若直接回车相当于不个忙寄存器的值。 ●由显示可知,用E命令修改,再查看可发现数据已经被改了。

3)修改标志值 格式:-RF↙ 功能:先用符号显示当前各标志位的值,并在末尾给出提示符“-”,然后等待用户以符号形式输入新的标志值,对输入的次序没有要求,各标志值之间也可没有空格;若直接在“-”之后回车,则保留原标志值。 ●由显示可知,相应的标志值改变了。 A命令 格式:-A内存地址↙ ●执行汇编命令A后,相应的指令对应的机器码将会依次存放在指定的 内存单元中,并提示下一地址。 U命令 格式:-U 内存块↙

●由显示可知,反汇编命令U从指定的内存地址开始对内存块进行反汇 编,并分三列显示反汇编的结果。 N命令 格式:-N【e】【PA TH】文件名.扩展名↙ W命令L命令 格式:-W/L 内存地址 ●由显示可知,命令N为命令W和命令L指定文件,而命令W把指定 内存块的内容写入命令N指定文件中,命令L则将其文件装入内存地址中。 T命令 1)单步执行 格式:-T=内存地址↙ ●由显示可知,T命令将内存地址的段地址和偏移地址修改CS和IP,然 后执行由CS:IP指向的内存单元处的一条指令,显示各寄存器的值,并反编下一条指令,然后返回DEBUG状态。

相关文档
最新文档