第一章_DEBUG使用

第一章_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[地址]

功能:将指令直接汇编成机器码输入到内存中。

参数说明:[地址]指定存放键入汇编语言指令的内存单元的位置。

A命令使用

说明:用于小段程序的汇编及修改目标程序,所有输入的数字均默认为十六进制,并且不需要以“h”字符结尾。用户装入内存的汇编语句是连续存放的,若没有指定地址,并且前面没有使用汇编命令,该语句被汇编到CS:0100区域,则在它上次停止处开始汇编。

注意:

1. 直接在A命令下输入跳转指令时,跳转指令后应跟跳转到的语句所在内存单元的地址,

不能跟标号;使用跳转指令时,可以指定跳转指令的属性:near,far。near 前缀可以缩写为 ne。如下例所示:

-a0100:0100

0100:0100 jmp 102

0100:0102 jmp near 105

0100:0105 jmp far 10a

2. 汇编语言指令所涉及到的操作数可以是字操作数也可以是字节操作数,在语句不能判别

操作数的类型时,可以使用前缀 word ptr 或者前缀 byte ptr 指定操作数的类型。缩写分别是:wo 和 by。如下列所示:

-a0100:0100

0100:0100 dec word ptr [100]

0100:0102 dec wo ptr [100]

0100:0105 dec byte ptr [100]

2.在DEBUG下,应注意区分立即操作数和内存地址的操作数,使用包括在中括号 ([ ])中

的操作数表示内存地址。

3.在DEBUG下,能够使用的伪指令仅有DB和DW两个,分别用于定义字节和字操作数,此

时定义的操作数被存放在该定义指令所在的内存空间中。如下列所示(注意内存空间的变换,why?):

-a 0100:0100

0100:0100 DB ‘ABCDEFG’

0100:0107

★C命令

格式:C[源地址范围][目的地址]

功能:比较两内存区域中的内容是否相同。若不同则按字节显示其地址和内容,若相同则不显示任何内容。

参数说明:[源地址范围]指定要比较的内存第一个区域的起始和结束地址,或起始地址和长度。[目的地址] 指定要比较的第二个内存区域的起始地址。

C命令使用

说明:如果 [源地址范围]和[目的地址]中内存单元的数据相同,Debug 将不显示任何内容而直接返回到 Debug 提示符。如果有差异,Debug将按如下格式显示:

[源地址] 源地址中内容目的地址中内容[目的地址]

如下列所示:

-C CS:100 105 DS:300;(假定CS=0AF6;DS=1000)

0AF6:0100 88 00 1000:0300

0AF6:0101 C0 00 1000:0301

0AF6:0102 89 00 1000:0302

0AF6:0103 D8 00 1000:0303

0AF6:0104 65 00 1000:0304

0AF6:0105 66 00 1000:0305

★D命令

格式:D[地址] 或D[起始地址][目的地址]

功能:以内存映象方式显示内存中的数据。

参数说明:指定要显示内容的内存单元的起始地址和结束地址,或起始地址和长度。如果不指定 [地址],Debug将从以前 d 命令中所指定的地址范围的末尾开始显示 128个字节的内容;第一次从DS:100处开始显示。

D命令使用

说明:当使用d 命令时,Debug分两个部分显示内存单元内容:左边显示内存单元中存放的十六进制数;右边显示左边的十六进制所表示的ASCII字符,所有不可打印字符用句号(.)

表示。每行显示16个字节的内容,在第八和第九个字节之间有一个连字符“–“。

从键盘键入下面命令:

-d cs:100 10f

Debug 按以下格式显示地址范围中的内容(假定CS=0AF6):

0AF6:0100 77 61 6E 67 78 69 61 6F-69 6A 6B FF 0E 00 01 FF wangx iaoijk…..

键入以下命令,Debug 将从 CS:100 开始显示 20h 个字节的内容:

-d cs:100 l 20

键入以下命令,Debug 将显示范围从 DS 段的 100h 到 115h 中所有字节的内容:

-d 100 115

注意:在D命令中若不指定段寄存器,默认规定为DS。

★E命令

格式:E[地址] [字节串] 或E[地址]

功能:从指定的地址开始修改内存值。

参数说明:[地址]指定存放[字节串]第一个内存的位置,[字节串]是要放入内存单元中的数据。

E命令使用

说明:当使用E命令时,有两种使用格式:

1、用E命令中包含的字节串替换从指定的地址开始的多个字节的内容;

2、E命令后不跟字节串,则允许按顺序方式显示和修改内存值,按下空格键显示下一字节

内容,若想修改,直接输入相应值;按下减号键显示上一字节内容,若想修改,直接输入相应值。

3、停止执行 e 命令。按 ENTER 键。在任何字节位置都可以按 ENTER。

注意:

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

2.[字节串]的值可以是十六进制字节或字符串。使用空格、逗号或制表符来分隔值。

必须将字符串包括在单或双引号中。

3.使用E命令后,内存单元中原来的数据将丢失,或者说被新输入的数据覆盖。

从键盘键入下面命令:

-E 100

Debug 按下面的格式显示第一个字节的内容(假定DS=0AF6):

0AF6:0100 EB.

要将该值更改为 61,请在插入点键入(使用符号”_”表示) 61,如下所示:

0AF6:0100 AB.61_

此时,若按下空格键,将显示下一个内存单元中的内容:

0AF6:0100 AB.61 EF._

此时,又可以在插入点键入新的内容,改写当前显示的内存内容,若不需要改写当前内存单元的内容,可以直接按下空格键,将显示下一个内存单元的内容,如此,一直到按 ENTER 停止 e 命令并返回到 Debug 提示符下。

若使用减号键,操作和按下空格键一样,区别在于将显示上一个内存单元的内容。

注意:使用该种方法,只能键入16进制数,不能键入字符串。

从键盘键入下面命令:

-E DS:100 EF’ABC’41

则执行上面的命令后,从DS:100内存单元开始的5个连续的字节中的内容将被数据0EFH,字

符“A”“B”“C”的ASCII码和数据41H替换。

★F命令

格式:F[地址范围] [字节或字节串]

功能:将要填写的字节或字节串填入由地址范围指定的存储器中。

参数说明:[地址范围]指定要填充内存区域的起始和结束地址,或起始地址和长度。[字节或

字节串] 指定要输入的数据,可以由十六进制数或引号包括起来的字符串组成。

F命令使用

说明:如果[地址范围]包含的字节数比[字节或字节串]中的数值大,Debug 将对[字节或字

节串]中提供的值反复使用,直到[地址范围]中的所有字节全部填充。如果在[地址范围]中

的任何内存单元损坏或不存在,Debug 将显示错误消息并停止f命令。如果[字节或字节串]

包含的数值多于[地址范围]中的字节数,Debug 将忽略[字节或字节串]中额外的值。

从键盘键入下面的命令:

-F 1000:100 105 ‘ABCDEFG’

指令执行后,DEBUG使用’ABCDEF’填充1000:100到1000:105内存单元。

从键盘键入下面的命令:

1000:100 150 40 45 51 52 44

指令执行后,DEBUG反复使用40,45,51,52,44填充从1000:100 到1000:150的内存单元,

直到50h 个字节全部填满为止。

★G命令

格式:G[=起始地址] [[断点]……]?

功能:执行正在调试的程序,当达到断点时停止执行,并且显示寄存器标志和下一条要执

行的命令。

参数说明:[=起始地址]指定当前在内存中要开始执行的指令所在的内存单元的地址。如果

不指定[=起始地址],DEBUG将从 CS:IP 寄存器中的当前地址开始执行程序。[[断点]……] 指定可以设置为 g 命令的部分的 1 到 10 个临时断点。

G命令使用

说明:G命令中的=不能省略,可以只给出偏移地址,默认段地址为当前的CS;若省略=,

则该地址就成为G命令中的断点地址。程序将从指定的开始地址不停的执行程序,一直到遇

到结束指令为止,并显示“Program terminated normally”。断点地址只对本次G命令有效;下

一条G命令若需要断点地址,应重新进行指定。当使用G命令执行程序到断电地址后,显示

断点地址处的指令和寄存器的内容。

注意:断点地址应为一条指令在内存单元中的首字节地址。

★H命令

格式:H[数值][数值]

功能:分别显示两个十六进制数相加的和以及第一个数减去第二个数的差。

参数说明:[数值]表示从0 到FFFFh 范围内的任何十六进制数字。

H命令使用

说明: Debug 首先将指定的两个参数相加,然后用第一个参数中减去第二个参数。并将计算

的结果以4位16进制形式显示在下一行中:先显示计算和,然后显示计算差。

从键盘键入下面的命令:

H 12 34

执行后,将在下一行显示:

0046 FFDE

★I命令

格式:I[端口地址]

功能:从指定的端口输入并显示(用十六进制)指定端口中的数据(字节)。

参数说明:[端口地址]指定要读取数据的端口地址。

I命令使用

说明:[端口地址]的分为应在0~FFFFH的范围内。

从键盘键入下面的命令:

I FFFF

执行后,将在下一行显示(假定端口0FFFFH中的内容为FFH):

FF

★L命令

格式:L[地址][盘号:][逻辑扇区号][扇区数]

功能:将一个文件或盘的绝对扇区装入存储器。

参数说明:[地址] 指定要在其中加载文件或扇区内容的内存空间的起始位置。[盘号:] 指定包含读取指定扇区的磁盘的驱动器。该值是数值型,表示为:0 = A, 1 = B, 2 = C,……等。[逻辑扇区号] 指定要加载其内容的第一个扇区的十六进制数。[扇区数] 指定要加载其内容的连续扇区的十六进制数。

L命令使用

说明: 单个L命令能够装入的最大扇区数是 80H,其中盘号 0,1,2,3……分别代表 A,B,C,……;若出现读盘错,显示错误信息。只有加载特定扇区的内容而不是加载 debug 命令行或最近的 Debug n(名称)命令中指定的文件时,才能使用 drive、start 和 number 参数。 L命令使用情况,可以分为下列几种情况:

1、使用不带参数的L命令

当使用不带参数的L 命令时,在 debug 命令行上指定的文件将加载到从地址 CS:100 开始内存中。Debug 同时将 BX 和 CX 寄存器设置为加载的字节数(CX表示低位,BX表示高位)。如果不在 debug 命令行指定文件,所装入的文件将是最近使用 n 命令经常指定的文件。

2、使用带有 address 参数的L命令

使用带 address 参数的L命令,Debug 将从内存位置 address 开始加载文件或指定扇区的内容。???

3、使用带全部参数的L命令

使用带所有参数的L命令,Debug 将加载指定磁盘扇区的内容而不是加载文件。加载特定扇区的内容,指定范围内的每个扇区均从 drive 读取。Debug 从 start 开始加载,直到在 number 中指定的扇区数中的内容全部被加载。

从键盘键入如下命令(假定文件abc.exe存在当前目录之下):

N wangxiao.exe

L

则把文件wangxiao.exe加载到CS:100开始的内存单元中。

若要将文件加载到1000:100开始内存单元中,键入:

L 1000:100

★M命令

格式:M[地址范围][起始地址]

功能:把地址范围内的存储器单元的内容移到起始地址的指定地址中

参数说明:[地址范围] 指定要复制内容的内存区域的起始和结束地址,或起始地址和长度。[起始地址] 指定要将range 内容复制到该位置的起始地址。

M命令使用

说明:传送期间,源数据区和目标数据区可以部分重叠;传送后源区数据保持不变,目的区的数据将使用源区中的数据进行改写。

从键盘键入如下命令:

-M CS:100 150 DS:500

执行该指令,Debug 首先将CS:150 地址中的内容复制到地址DS:550 中,然后将CS:14F 地址中的内容复制到CS:54F 中,如此操作直至将CS:100 地址中的内容复制到地址

DS:500 中。

★N命令

格式:N[盘号: ] [路径] [文件名] [扩展名]

功能:定义DEBUG使用的文件。

参数说明:[盘号: ] [路径] [文件名] [扩展名]指定文件所在的盘符,路径,文件名和扩展名。N命令使用

说明: 可同时定义两个操作文件,并将形成的文件控制块相应的设置在内存CS:5C和CS:6C 上,供以后的L和W命令操作之用。

N命令的两个用途:

1、可以使用N为后面的L(加载)或W(写入)命令指定所使用的文件。

2、可以使用N命令指定正在被调试文件的命令行参数和开关。

如下所示:

假定在Debug中正在调试的程序https://www.360docs.net/doc/6016597242.html,。若想为https://www.360docs.net/doc/6016597242.html,指定两个参数并运行此程序。可以键入如下的命令:

-N param1,param2

-G

从键盘键入如下的命令序列:

-N wang.exe

-L

-N xiao1.dat xiao2.dat

-G

则第一个 N 命令将wang.exe 指定为后接的 L(加载)命令的文件,该命令将wang.exe 加载到内存。第二个N 命令指定wang.exe 将使用的参数。最后G命令将使用参数xiao1.dat 和xiao2.dat运行wang.exe文件。此功能如同在 DOS命令行中键入了wang.exe xiao1.dat xiao2.dat。

注意:不要在N命令的第二种形式后再次使用L命令,否则N命令的第二种形式中指定的参数将不起作用。此外,如果在N命令的第二种形式后使用W(写入)命令,将使用名称xiao2.dat保存正在调试的文件 wang.exe。

每次使用N命令,都将影响下面的四个内存区域:

内存位置内容

CS:5C 文件 1 的文件控制数据块 (FCB)

CS:6C 文件 2 的文件控制数据块 (FCB)

CS:80 N命令行的长度(以字符表示)

CS:81 N命令行字符的开头

N命令指定的第一个文件名被放在CS:5C 的FCB 中。如果指定第二个文件名,第二个文件文将放置到CS:6C 的FCB 中。N命令行上键入的字符数(除第一个字符N之外)存储在位置CS:80。N命令行上的实际字符(再次,除了字母N之外)存储在以CS:81 开头的位置。

★O命令

格式:O[端口地址] [数据]

功能:发送数据(字节)到指定的输出端口。

参数说明:[端口地址]指定要写入数据的端口地址,[数据] 指定要向[端口地址] 中写入的字节值。

O 命令使用

说明:[端口地址]的分为应在0~FFFFH的范围内,[数据]应为字节数据。

从键盘键入下面的命令;

-O 73 FF

指令执行后,端口73H中的数据为0FFH。

★P命令

格式:P[=地址] [数据]

功能:执行一个子程序调用指令,循环指令,中断指令或一个重复字符串指令,停止在下一条指令上。

参数说明:[=地址] 指定第一条要执行指令的位置。如果不指定地址,则默认地址是在CS:IP 寄存器中指定的当前地址,[数据] 指定在将控制返回给Debug 之前要执行的指令数,默认值为1。

P命令使用

说明: 使用P命令执行程序,该程序不间断运行,直到循环、重复字符串指令、软件中断或者完成了指定地址的子例程为止,或者直到执行了指定数量的机器指令为止。若被执行的指令不是循环、重复的字符串指令、软件中断或子程序,则P 命令与T(跟踪)命令的作用相同。

考虑程序在地址 CS:168F处有一个 call 指令。要运行完call目标位置的子程序然后将控制返回Debug,从键盘键入下面命令:

P=168F

执行指令后,按如下格式显示结果:

AX=0000 BX=0000 CX=0000 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000

DS=0AF6 ES=0AF6 SS=0AF6 CS=0AF6 IP=1692 NV UP EI PL NZ AC PO NC

0AF6:1692 BA2601 MOV AX,0126

★Q命令

格式:Q

功能:退出DEBUG返回DOS。

参数说明:无参数。

Q命令使用

-Q

执行该命令后,结束DEBUG,返回DOS

★R命令

格式:R[寄存器]

功能:1. 显示单个寄存器的内容,并提供修改功能。2. 显示所有寄存器内容,再加上字母标志位状态以及要执行的下一条指令。3. 显示8个标志位状态,并提供修改功能。

参数说明:[寄存器]指定要显示其内容的寄存器名。

R命令使用

说明:可以使用的寄存器名有:AX、BX、CX、DX、SP、BP、SI、DI、DS、ES、SS、CS、IP、PC 及F。键入R命令不跟任何可用的寄存器名,则将显示所有的寄存器的内容以及CS:IP 指向的存储单元中的内容;若键入R命令指定了寄存器名称,将以十六进制数形式显示该寄存器中的内容,下一行显示冒号提示符,在冒号提示符后面可以为寄存器键入新的数据。若不需要修改寄存器的数据,直接按 ENTER 键返回 Debug 提示符。如果键入 f 字符代替寄存器名,Debug 将每个标记的当前设置显示为两字母代码,然后显示 Debug提示符。要更改标志的设置,请从下表中键入适当的两字母代码;若不需要修改,直接ENTER 键返回Debug 提示符。可以修改全部或部分标志位,可以按任何顺序键入新的标志值。不需要在这些值之间留出空格。任何没有指定新值的标志保持不变。在DEBUG下,标志位表示如下:标志名标志为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

注意:若输入的寄存器名不在上面的有效寄存器名之内,将显示:

bf error

R命令后只能跟一个有效的寄存器名。修改标志位如果指定没有在前面的表中列出的标志代码,将显示:

bf error

若为一个标志位指定了多个值,Debug 将显示以下消息:

df error

要只查看标志的状态,键入以下命令:

-R F

将按如下格式显示:

NV UP DI NG NZ AC PE NC - _

此时可以按任意顺序键入一个或多个有效的标志值,其中可以有或没有空格,如下所示:NV UP DI NG NZ AC PE NC –PLEICY

执行指令后,将使用新的标志位数值代替旧值。

要查看当前所有寄存器的取值、所有标志位的内容和CS:IP指向的内存单元指令,键入以下命令:

-R

如果当前位置是 CS:1692,显示外观将类似于以下内容:

AX=0000 BX=0000 CX=0000 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000

DS=0AF6 ES=0AF6 SS=0AF6 CS=0AF6 IP=1692 NV UP EI PL NZ AC PO NC

0AF6:1692 BA2601 MOV AX,0126

从键盘上键入如下命令:

-R CX

执行后,将显示:

CX 0000

:

在冒号后可以位CX键入新值,若不需要改变,直接按ENTER。

★S命令

格式:S[地址范围] [字符串]

功能:在指定的地址范围内查找给定的字符串。

参数说明:[地址范围] 指定要搜索范围的开始和结束地址。[字符串] 指定要搜索的字节值或字符串。字符串应包括在引号中。

S命令使用

说明: 若在给定的分为内要搜索字节出现多次,将显示出所有地址。隐含地址为DS段值。假定从范围DS:100 到 DS:110查找是否包含 61,键入下面命令:

-S 100 110 61

执行程序后,显示:

0AF6:010A

0AF6:010F

若要在范围CS:100 到 CS:200内搜索字符串“wangxiao”,键入下面的命令:

-S CS:100 CS:200 ‘wangxiao’

★T命令

格式:T[=地址] [指令条数]

功能: 逐条跟踪程序的执行,每条指令执行后都将显示各寄存器的内容。

参数说明:[=地址] 指定第一条要执行指令的位置。如果不指定地址,则默认地址是在CS:IP 寄存器中指定的当前地址,[指令条数] 指定在将控制返回给Debug 之前要执行的指令数,默认值为1。

T命令使用

说明: 通常采用跟踪一条指令,但用户也可以用指令条数设定一次跟踪多条指令,每执行一条指令之后,显示所有寄存器的内容和标志状态以及下一条指令在内存中的保存情况。T命令若不跟[=地址]参数,则从当前CS:IP处开始执行,第一次键入的T命令从CS:100处开始执行程序。T命令默认段寄存器是是CS。参考P命令。

键入下面得到命令:

-T

若是第一次执行,则显示:

AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0AF6 ES=0AF6 SS=0AF6 CS=0AF6 IP=0103 NV UP EI PL NZ AC PO NC

0AF6:0103 BA2601 MOV AX,0126

若要从CS:200处开始执行程序,则键入下面的命令:

T=CS:200

★U命令

格式:U[起始地址]或者[地址范围]

功能:将内存中的内容转换为汇编语句。

参数说明:[起始地址]或者[地址范围]指定要反汇编代码的起始地址和结束地址,或起始地址和长度。

U命令使用

说明:U命令中如果没有使用参数,第一次使用,则U命令从CS:IP开始对20h个字节内容进行反汇编;若不是第一次使用,则从前面U命令所显示地址后的第一个地址开始开始对20h个字节内容进行反汇编。

若要从CS:100开始反汇编 8 (10h) 字节,键入下面命令:

-U CS:100 108

程序执行后,显示下面的结果:

OAF6:01OO 21725F AND [BP+SI+5F],SI

OAF6:01O3 C606E3991A MOV BYTE PTR [99E3],1A

OAF6:01O8 C3 RET

-

★W命令

格式:W[地址] [盘符:] [起始扇区] [扇区数]

功能:将内存中的数据写入磁盘中。

参数说明:[地址]指定要写到磁盘文件的文件或部分文件的起始内存地址。如果不指定address,Debug 程序将从CS:100 开始。[盘符:] 指定包含目标盘的驱动器。该值是数值型:0 = A, 1 = B, 2 = C,等等。[起始扇区] 指定要写入第一个扇区的十六进制数。[扇区数] 指定要写入的扇区数。

W命令使用

说明: 在使用不带参数的W命令之前,BX和CX中应包含要写入文件的字节数,BX为高位,CX为低位,写入的文件为最近N命令命名的文件。不能用W命令写入.exe 或 .hex 文件。

从键盘键入下面的命令:

-N ABC.DAT

-W

则执行上面的命令后,把当前CS:100指向的内存开始的数据写入到ABC.DA T文件中,写入字节大小有BX和CX中大小规定。

假定要将起始地址为 DS:200 的内存内容写入到驱动器A的磁盘中。需要将数据从磁盘的逻辑扇区号 10H 开始并持续10H个扇区。则键入下面命令:

-W DS:200 0 10 10

★XA命令

格式:XA[页面数]

功能:分配扩展内存的指定页面数

参数说明:[页面数] 指定要分配的扩展内存的 16KB 页数。

XA命令使用

说明:要使用扩展内存,必须安装符合 4.0 版的Lotus/Intel/Microsoft 扩展内存规范(LIM EMS) 的扩展内存设备驱动程序。如果指定的页面数可用,则将显示消息表明所创建的句柄的十六进制数;否则显示相关的错误消息。

要分配扩展内存的8个页面,键入下面命令:

-XA 8

执行指令后,若执行成功,显示下面消息:

Handle created=0003

若失败,则可能显示:

EMS not installed

★XD命令

格式:XD [释放的句柄]

功能:释放指向扩展内存的句柄。

参数说明:[释放的句柄] 指定要释放的句柄。

XD命令使用

说明:见XA命令说明

若要释放句柄 0003,键入下面命令:

-XD 0003

执行指令后,若执行成功,显示下面消息:

Handle 0003 deallocated

若失败,则可能显示:

EMS not installed

★XS命令使用

说明:见XA命令说明

★XM命令

格式:XM [要映射扩展内存的逻辑页面号] [映射到的物理页面号] [句柄]

功能:将属于指定句柄的扩展内存逻辑页映射到扩展内存的物理页。

参数说明:[要映射扩展内存的逻辑页面号]指定要映射到物理页的扩展内存的逻辑页面号。[映射到的物理页面号]指定将映射到的物理页面号。 [句柄]指定句柄。

XM命令使用

说明:见XA命令说明

若要将句柄 0003 的逻辑页3映射到物理页4,键入下面命令:

-XM 3 4 0003

执行指令后,若执行成功,显示下面消息:

Logical page 03 mapped to physical page 04

★XS命令

格式:XS

功能:显示有关扩展内存状态的信息。

参数说明:无参数

三、DEBUG的有关说明

(1)在DEBUG状态下,所有输入的数值都不能带有后缀区分进制,输入的数值都为16进制数;

(2)命令可大写或小写,DEBUG命令对大小不敏感;

(3)可以用+键来停止一个命令的执行返回DEBUG状态

(4)每个命令只有在回车后才有效;

(5)按+键可暂停移动显示,按任一键继续;

(6)在DEBUG状态下面,输入?可以得到所有DEBUG命令的使用说明;

四、例题讲解

1.在汇编中若想对某一程序进行调试,可以使用debug进行单步T命令跟踪,但当遇到调

用int 21H中断输入指令时,如何进行输入以便继续跟踪调试程序?

解:遇到int 21h之类,用p即可完成中断的功能而不进入中断内部。单步调试多用p, 除非你对某个子程感到怀疑或有兴趣了, 才用t命令进去看看, 对int类的指令也一样.

2.执行debug-a后,如果有一行输入错误,如何更改这一行?

解:

假如在Debug下进行如下输入:

-a

2129:0100movax,200

2129:0103movbx,200

2129:0106movcx,200

2129:0109

此时,发现movbx,200一句错误,应为movbx,20,可以敲回车返回"-"状态,然后输入:-a 103

2129:0103movbx,20

如果多或者少若干行,不必重新输入,可以用M命令移动后面的程序来去掉或者增加程序空间。

3.在Debug下,如何显示BIOS的日期。

解:

-D FFFF:0006 L 8<按回车>

在作者的电脑上这里显示为"2/23/02."

作者的电脑显示如下:

FFFF:0000 32 2F-32 33 2F 30 30 00 2/23/02. 相信你的电脑里也是用这种格式显示的。这里显示出来的是使用者BIOS的日期,有兴趣的话可以重新开机看看,注意开机时的显示。

4. 在你的电脑的https://www.360docs.net/doc/6016597242.html,文件里搜寻"IBM"这几个字符。

解:

注意,文件https://www.360docs.net/doc/6016597242.html,在各个电脑的存放位置可能不一样。

以下是作者做的:

C:\WINDOWS\system32>debug

-n https://www.360docs.net/doc/6016597242.html,

-l

-s 0 l ffff 'IBM'

-s 0 l ffff 'COMMAND'

0B3A:005D

0B3A:0082

0B3A:06C2

0B3A:07E5

0B3A:080D

0B3A:20E0

0B3A:210A

0B3A:22B8

0B3A:22E1

0B3A:234B

0B3A:23C7

0B3A:9E25

注意:

(1)搜寻是要区分大小写的。

(2)可以看到上面是没有找到"IBM"的, 可以试一试"PATH" ,"COMSPEC" ,"COMMAND",已经找到了COMMAND.。

(3)这种方法用在查找加密资料和已被删除的资料等方面时是十分有用的。

5. 在DEBUG下编写https://www.360docs.net/doc/6016597242.html,程序,在计算机屏幕上输出”ABC”

解:如下

C:\DOCUME~1\WANGXI~1>debug

-a

0AF4:0100 mov dl,41

0AF4:0102 mov ah,02

0AF4:0104 int 21

0AF4:0106 mov dl,42

0AF4:0108 int 21

0AF4:010A mov dl,43

0AF4:010C int 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

0AF4:0100 B241 MOV DL,41

-r bx

BX 0000

:

-r cx

CX 0000

:10

-n c:\masm\https://www.360docs.net/doc/6016597242.html,

-w

Writing 00010 bytes

-q

C:\DOCUME~1\WANGXI~1>https://www.360docs.net/doc/6016597242.html,

'https://www.360docs.net/doc/6016597242.html,' is not recognized as an internal or external command,

operable program or batch file.

C:\DOCUME~1\WANGXI~1>cd \

C:\>cd masm

C:\masm>https://www.360docs.net/doc/6016597242.html,

ABC

C:\masm>

思考:BX和CX中的数值为何分别设置为0和10呢?

6. 在Debug下查看https://www.360docs.net/doc/6016597242.html,程序的内容并运行之。

解:

C:\masm>debug

-n https://www.360docs.net/doc/6016597242.html,

-l

-u

0B3A:0100 B241 MOV DL,41

0B3A:0102 B402 MOV AH,02

0B3A:0104 CD21 INT 21

0B3A:0106 B242 MOV DL,42

0B3A:0108 CD21 INT 21

0B3A:010A B243 MOV DL,43

0B3A:010C CD21 INT 21

0B3A:010E CD20 INT 20

-r

AX=0000 BX=0000 CX=0010 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000

DS=0B3A ES=0B3A SS=0B3A CS=0B3A IP=0100 NV UP EI PL NZ NA PO NC

0B3A:0100 B241 MOV DL,41

-g

ABC

Program terminated normally

-

五、练习

1.反复练习DEBUG的命令,熟练掌握只各命令的使用方法。

2. 用键盘,将DS:100H起八个内存地址单元置AAH,将DS:200H起八个内存单元置FFH。

3. 用键盘,将AX,BX,CX,DX及DS,ES清0。

4. 用A命令输入以下的程序,用单步命令T跟踪执行程序,并观察每一步的寄存器内容和标志位的变化情况,并填写地址分配和目标代码。

地址分配目标代码源程序

____________ ____________ MOV AL,2

____________ ____________ PUSH BX

____________ ____________ MOV BL,AL

____________ ____________ DEC AL

____________ ____________ DEC AL

____________ ____________ DEC AL

____________ ____________ INC AL

____________ ____________ INC AL

____________ ____________ POP BX

____________ ____________ INT 20H

5. 通过以上程序的调试和观察,试用汇编指令编一个简单的程序,将AAH,BBH,CCH,DDH分别送AH,BH,CH,DH寄存器,用A命令输入,用T命令单步执行,观察每一步的结果是否与预计结果相同。

6. 对以下源程序进行调试,记录下每一条指令的目标代码,相应寄存器变化情况和程序的最终执行结果。

源程序:MOV AL,30H

MOV BL,26H

ADD AL,BL

PUSH AX

POP DX

MOV AH,02H

INT 21H

INT 20H

7. 文件写盘操作:

(1)将实验4中的源程序用A命令写入CS:100起始的一片内存,再用U命令进行反汇编,可以看出这段程序所占的内存长度。

(2)用R命令使BX,CX中包含该文件的字节数,其中BX为高位,CX为低位。(3)—N 盘名:文件名.扩展名

-W

则将该文件写入指定磁盘中。若要检查文件是否确实写入,可用下面的读盘操作。8. 文件读盘操作:

—N 盘名:文件名.扩展名

—L

将文件读入CS:200起始的一片内存,再用U命令进行反汇编显示检查。

9.用命令U查看8086/8088 CPU在开机后执行的第一条指令。

10. 用H命令检查下列各组16进制数加减结果并和你的手算结果比较:

(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH

实验一 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的使用(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/6016597242.html,。 (8)使用W命令将笑脸程序写到指定磁盘的指定路径目录中。 (9)退出DEBUG,进入笑脸程序所在目录。 (10)运行笑脸程序https://www.360docs.net/doc/6016597242.html,。观察程序运行结果。 (11)用DEBUG调试已生成的https://www.360docs.net/doc/6016597242.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调入内存。此时,用户可在提示符

Debug使用说明

附录DEBUG调试程序的应用 1.直接启动DEBUG程序 如https://www.360docs.net/doc/6016597242.html,在C盘的根目录下,启动的方法是: C:\>DEBUG _ 这时屏幕上会出现“_”提示符,等待键入DEBUG命令。 2.启动DEBUG程序的同时装入被调试文件 命令格式如下: C:\>DEBUG [d:][PA TH]filename[.EXT] [d:][PATH]是被调试文件所在盘及其路径,filename是被调试文件的文件名,[.EXT]是被调试文件的扩展名。 例如:BCDSUM.EXE可执行文件在A盘,用DEBUG对其进行调试的操作命令如下。 C:\>DEBUG A:\BCDSUN.EXE↙ DOS在调用DEBUG程序后,再由DEBUG把被调试文件装入内存,当被调试文件的扩展名为COM时,装入偏移量为100H的位置,当扩展名为EXE时,装入偏移量为0的位置,并建立程序段前缀PSP,为CPU寄存器设置初始值。 3.退出DEBUG 在DEBUG命令提示符“_”下键入Q命令,即可结束DEBUG的运行,返回DOS操作系统。 4.在DEBUG环境下建立和汇编程序 在DEBUG环境下用户可以直接建立汇编语言源程序,并可以进行编辑修改,还可以进行汇编。 比如,在DEBUG下运行如下程序: MOV DL,33H ;字符3的ASCII码送DL MOV AH,2 ;使用DOS的2号功能调用 INT 21H ;进入功能调用,输出‘3’ INT 20H ;BIOS中断服务,程序正常结束。 该程序运行结果是在显示器上输出一个字符‘3’。如果要输出其它字符,请改变程序中‘33H’为相应字符的ASCII码。其中涉及DOS和BIOS功能调用。因为我们是在DOS的支持下运行汇编语言程序,所以一般情况下,不能轻易使用输入/输出指令直接通过端口输入/输出,而必须使用DOS内部提供的子程序完成输入/输出。 DOS功能调用就是为诸如此类的目的设置的。DOS功能调用要求在进入INT 21H调用前,首先将功能调用号送AH寄存器,并根据功能调用号准备初始数据。也就是说INT 21H 的2号功能调用是输出DL寄存器中的字符。INT 20H是BIOS中断服务,这一软中断用来正常结束程序。

DEBUG的使用方法

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命令的格式 Debug的命令都是一个字母,后跟一个或多个参数:字母[参数] 命令的使用中注意: ①字母不分大小写; ②只使用16进制数,没有后缀字母; ③分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数间可无分隔符; ④每个命令只有按了回车键后才有效,可以用Ctrl+Break中止命令的执行; ⑤命令如果不符合Debug的规则,则将以“error”提示,并用“^”指示错误位置。 许多命令的参数是主存逻辑地址,形式是“段基地址: 偏移地址”。其中,段基地址可以是段寄存器或数值;偏移地址是数值。如果不输入段地址,则采用默认值,可以是缺省段寄存器值。如果没有提供偏移地址,则通常就是当前偏移地址。 对主存操作的命令还支持地址范围这种参数,它的形式是:“开始地址结束地址”(结束地址不能具有段地址),或者是:“开始地址L字节长度”。 三、DEBUG子命令 1、显示命令D D(Dump)命令显示主存单元的内容,它的格式如下(注意分号后的部分用于解释命令功能,不是命令本身): D [地址];显示当前或指定开始地址的主存内容 D [范围];显示指定范围的主存内容 例如,显示当前(接着上一个D命令显示的最后一个地址)主存内容: 左边部分是主存逻辑地址,中间是连续16个字节的主存内容(16进制数,以字节为单位),右边部分是这16个字节内容的ASCII字符显示,不可显示字符用点“.”表示。一个D命令仅显示“8行×16个字节”(80列显示模式)内容。 再如: -d 100 ;显示数据段100h开始的主存单元

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.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=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位寄存器。 (4)显示存储单元命令D 格式1:D[起始地址]

实验一: 调试工具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调试汇编语言程序段一.实验目的 1.熟悉DEBUG有关命令的使用方法; 2.利用DEBUG掌握有关指令的功能; 3.利用DEBUG运行简单的程序段。 二.实验容 1.进入和退出DEBUG程序; 1)开始—运行,输入cmd,点确定进入命令窗口 2)在命令窗口中输入dubug进入debug程序

3)进入debug窗口后,输入q命令退出debug 2.学会DEBUG中的 1)D命令(显示存数据D 段地址:偏移地址) 例1:-D100 ;显示DS段, 0100开始的128个字节容 说明:指定要显示其容的存区域的起始和结束地址,或起始地址和长度。 ①DSEGREG[起始地址] [L 长度] ;显示SEGREG段中(缺省默认为DS), 以[起始地址] (缺省为当前的偏移地址),开始的[L 长度] (缺省默认为128)个字节的容. ② D SEGREG[段地址:偏移地址]

;显示SEGREG段中(缺省默认为DS), [段地址:偏移地址] 开始的[L 长度] (缺省默认为128)个字节容 -D ;默认段寄存器为DS,当前偏移地址(刚进入debug程序偏移地址为0100H) -D DS:100 ;显示DS段, 0100H开始的128个字节容 -D CS:200 ;显示CS段, 0200H开始的128个字节容 -D 200:100 ;显示DS段, 0200:0100H开始的128个字节容 -D 200;显示DS段, 0200H开始的128个字节容 -D 100 L 10 ;显示DS段, 100H开始的100H个字节容 2)E命令(修改指定存) 例1:-E100 41 42 43 44 48 47 46 45 -D 100,L08

实验一-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”即可。

DEBUG使用方法

DEBUG使用方法 格式: DEBUG[[drive:][path]filename[testfile-parameters]] 参数:[drive:][path]filename 指定待调试可执行文件的所在位置及文件名。 testfile-parameters 指定待设计可执行文件需要的命令参数。 相关命令 -A (汇编,Assemble) -C (比较,Compare) -D (卸出,Dump) -E (输入数据,Enter)) -F (填充,Fill) -G (执行,Go) -H (十六进行运算,Hex) -I (读输入口,Input) -L (装入,Load) -M (移动,MOVE) -N (命令,NAME) -O (写输出口,OUTPUT) -P (调试循环程序,PROCEED) -Q (退出,QUIT) -R (寄存器,REGISTER) -S (找寻,SEARCH) -T (跟踪,TRACE) -U (反汇编,UNASSEMBLE) -W (写盘,WRITE) -XA (分配扩充内存,ALLOCATE EM) -XD (释放分配的扩充内存,DEALLOCATE EM) -XM (扩展内存页影像,MAP EXM PAGES) -XS (显示扩充内存状态,DISPLAY EM STATUS)

二、注意事项 不指定调试文件名时DEBUG命令的使用。 使用DEBUG命令时,如果未指定调试文件的所在位置及名子,DEBUG执行时将显示符(-)。这时,用户可输入任何一个DEBUG调试命令。 DEBUG命令 以下为DEBUG使用的调试命令及其简介: ?显示所有的调试命令 A汇编8086/8087/8088汇编语言源程序。 C比较两块内存的内容。 D显示部分内存的内容。 E人指定的地址开始把数据送入内存。 F将指一值填进某一范围的内存。 G运行内存中的程序。 H执行十六进制算术运算。 I从指定输入口输入一道字节值。 L把文件或磁盘扇区内容装入内存。 M拷贝某块内存的内容。 N指定文件名,以便L或W命令读写该文件;指定正调试文件所需的参数。 O发送一字节值至指定输出口。 P执行循环程序,重复字符串指令,软中断,或子程序。 Q结束DEBUG命令执行。 R显示或修改一个或数个寄存器内容。 S在内存指定范围内找寻指定的值。 T执行一条指令,然后显示所有寄存器的内容,所有标志状态,以及下一条要执行的指令(汇编语言格式)。 U反汇编某一范围内的字节,显示其相应汇编语言源语名。 W把正调试文件写入磁盘。 XA分配扩充内存 XD释放分配的扩充内存。 XM作扩充内存页的影像。 XS显示扩充内存的状态。

实验一 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为查询。

在Eclipse中使用debug(Eclipse调试常用技巧)

Eclipse调试常用技巧 发表时间:2010-04-06 最后修改:2010-11-26 记得刚刚毕业的时候,自己连断点也不会打,当时还在用JCreate,就连毕业设计也是用System.out找Bug的,想想真的很笨。开始工作后,一个星期过去了,在一个1、2百万行的系统中找Bug,我依然在用System.out,当时最痛苦的就是修改代码,每次找到疑似Bug,就输出一下,然后重启(那时也不知道代码热替换),直到有一天带我的导师发现了这样笨笨的调试Bug,才让我第一次认识了断点,也知道了代码修改完了可以进行热替换,我这个中国教育的半牺牲品才算向美好生活迈进了一小步。 1、条件断点 断点大家都比较熟悉,在Eclipse Java编辑区的行头双击就会得到一个断点,代码会运行到此处时停止。 条件断点,顾名思义就是一个有一定条件的断点,只有满足了用户设置的条件,代码才会在运行到断点处时停止。 在断点处点击鼠标右键,选择最后一个"Breakpoint Properties" 断点的属性界面及各个选项的意思如下图,

2、变量断点 断点不仅能打在语句上,变量也可以接受断点, 上图就是一个变量的打的断点,在变量的值初始化,或是变量值改变时可以停止,当然变量断点上也是可以加条件的,和上面的介绍的条件断点的设置是一样的。 3、方法断点 方法断点就是将断点打在方法的入口处, 方法断点的特别之处在于它可以打在JDK的源码里,由于JDK在编译时去掉了调试信息,所以普通断点是不能打到里面的,但是方法断点却可以,可以通过这种方法查看方法的调用栈。

4、改变变量值 代码停在了断点处,但是传过来的值不正确,如何修改一下变量值保证代码继续走正确的流程,或是说有一个异常分支老是进不去,能不能调试时改一下条件,看一下异常分支代码是否正确? 在Debug视图的Variables小窗口中,我们可以看到mDestJarName变量的值为" F:\Study\eclipsepro\JarDir\jarHelp.jar" 我们可以在变量上右键,选择"Change Value..."在弹出的对话框中修改变量的值, 或是在下面的值查看窗口中修改,保用Ctr+S保存后,变量值就会变成修改后的新值了。 5、重新调试 这种调试的回退不是万能的,只能在当前线程的栈帧中回退,也就说最多只能退回到当前线程的调用的开始处。 回退时,请在需要回退的线程方法上点右键,选择"Drop to Frame"

实验一 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

实验一 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的使用方法

进入Windows操作系统,输入cmd回车 输入debug 回车,这样就进入了debug模式 1: 输入-r 查看或者修改寄存器,可以修改CS IP来指向要执行汇编的内存地址-r 回车查看 -r ax 回车修改ax的值 -r cs 回车修改cs的值 -r ip 回车修改ip的值 2: 输入-D 查看内存中的信息 -d 1000:0000 查看段地址为1000H ,偏移地址为0开始的内存信息 -d 1000:0000 00ff 就是查看1000:0000 到1000:00ff的内存信息 查看主板生产日期 -d fff0:0000 00ff 可以看到右下角的08/14/08 格式月/日/年,08年8月14号生产的主板 这里的生产日期是只读的,无法修改,通过-e修改表面上看是改过了,下次打开后又恢复之前数据了 如果直接用-d 0100 则会显示DS:0100处的内存信息,也就是显示段地址为ds,便宜地址为0100的内存信息。 -d ds:0100 也可以这么使用 3:输入-E修改内存中位置的信息 -e 1000:0000 1a 00 09 10 a1 61 这样就可以修改对应段地址为1000H ,偏移地址为0开始的内存信息 -e 1000:0000 'a+b' 这样就会在内存1000:0000处写入61H(a的ASICC码) 1000:0001处+ 1000:0002 62 4:输入-u查看指定位置对应的汇编指令 -u 1000:0000 查看该处的汇编指令 -u cs:0000 查看段地址为cs处的汇编指令 5:输入-t 执行指令 -t 执行CS:IP所指向的第一个指令,如果要执行自己写入内存的指令,应该先通过-r来改变CS IP的值,然后再执行-t 执行

实验1 Debug命令使用

实验1 查看CPU和内存,用机器指令和汇编指令编程 1. 预备知识:Debug的使用 我们以后所有的实验中,都将用到Debug程序,首先学习一下它的主要用法。 (1)什么是Debug? Debug是DOS、Windows都提供的实模式(8086方式)程序的调试工具。使用它,可以查看CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行。 (2) 我们用到的Debug功能。 ●用Debug的R命令查看、改变CPU寄存器的内容; ●用Debug的D命令查看内存中的内容; ●用Debug的E命令改写内存中的内容; ●用Debug的U命令将内存中的机器指令翻译成汇编指令; ●用Debug的T命令执行一条机器指令; ●用Debug的A命令以汇编指令的格式在内存中写入一条机器指令。 Debug的命令比较多,共有20多个,但这6个命令是和汇编学习密切相关的。 (3) 进入Debug。 Debug是在DOS方式下使用的程序。我们在进入Debug前,应先进入到DOS方式。用以下方式可以进入DOS。 ①重新启动计算机,进入DOS方式,此时进入的是实模式的DOS。 ②在Windows中进入DOS方式,此时进入的是虚拟8086模式的DOS。 下面说明在Windows中进入Debug的一种方法。 选择【开始】菜单中的【运行】命令,如图1所示,打开【运行】对话框,如图2所示,在文本框中输入“command”后,单击【确定】按钮。 图2 在文本框中输入“command”

图1 选择【运行】命令 进入DOS方式后,如果显示为窗口方式,可以按下Alt+Enter键将窗口变为全屏方式。然后运行Debug程序,如图3所示。 图3 运行Debug程序 (4)用R命令查看、改变CPU寄存器的内容。 我们已经知道了AX、BX、CX、DX、CS、IP这6个寄存器,现在看一下它们之中的内容,如图4所示。其他寄存器如SP、BP、SI、DI、DS、ES、SS、标志寄存器等我们先不予理会。

实验一 利用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状态。

DEBUG的基本命令使用

实验一 DEBUG的基本命令使用 实验名称:利用DEBUG验证寻址方式 实验目的:掌握DEBUG的常用指令(R,D,E,A,U,T 指令)的使用方法,理解不同寻址方式的特点 实验内容:在DEBUG中利用A命令输入以下汇编指令,并用U命令显示,利用T 命令单步跟踪指令的执行过程,利用R或者D命令观察相关寄存器或者内存单元内容的变化(相关过程和结果要体现在实验报告上)。 (1)立即寻址 MOV AX,1 MOV BL,02H MOV BH,34H -a 13AE:0100 mov ax,1 13AE:0103 mov bl,02 13AE:0105 mov bh,34 13AE:0107 -r AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13AE ES=13AE SS=13AE CS=13AE IP=0100 NV UP EI PL NZ NA PO NC 13AE:0100 B80100 MOV AX,0001 -t AX=0001 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13AE ES=13AE SS=13AE CS=13AE IP=0103 NV UP EI PL NZ NA PO NC 13AE:0103 B302 MOV BL,02 -t AX=0001 BX=0002 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13AE ES=13AE SS=13AE CS=13AE IP=0105 NV UP EI PL NZ NA PO NC 13AE:0105 B734 MOV BH,34 -t AX=0001 BX=3402 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13AE ES=13AE SS=13AE CS=13AE IP=0107 NV UP EI PL NZ NA PO NC 13AE:0107 0000 ADD [BX+SI],AL DS:3402=00 (2)寄存器寻址 在验证完(1)后,执行mov ax,bx -a 13AE:0107 mov ax,bx 13AE:0109 -t AX=3402 BX=3402 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13AE ES=13AE SS=13AE CS=13AE IP=0109 NV UP EI PL NZ NA PO NC

实验一调试程序DEBUG的使用实验精选报告.doc

南昌理工学院实验报告 二 O 一二年月日 课程名称:微机原理与接口技术实验名称:调试程序 DEBUG 的使用 班级:姓名:同组人: 指导教师评定:签名: 【一、实验名称】 调试程序 DEBUG的使用 【二、实验目的】 1.掌握汇编程序的编辑 ,编译 ,连接和执行的全过程; 2.学习和掌握用 DEBUG 调试程序的方法。 【三、实验内容和原理】 1.用编辑软件 ,输入以下汇编语言源程序: DATSEGMENT ADB20;( 自定 ) BDB15;( 自定 ) YDB3DUP(0) ZDB0,0 DATENDS STASEGMENTSTACK DW50DUP(?) STAENDS CODSEGMENT ASSUMECS:COD,DS:DAT STARPROCFAR PUSHDS XORAX,AX PUSHAX MOVAX,DAT MOVDS,AX MOVAX,STA MOVSS,AX MOVAL,A MOVZ,AL MOVZ+1,AL CALLSUB1 MOVAL,B MOVZ,AL MOVZ+1,AL CALLSUB1 MOVAL,A MOVZ,AL MOVAL,B MOVZ+1,AL CALLSUB1 ADDWORDPTRY,AX ADCBYTEPTR[Y+2],0 RET STARENDP SUB1PROC MOVAL,Z MOVAH,Z+1 MULAH ADDWORDPTRY,AX ADCBYTEPTR[Y+2],0 RET SUB1ENDP CODENDS ENDSTAR

2.通过编译 ,连接形成可执行文件; 3.用 DEBUG 将可执行文件调入 ,并进行调试; (1)用 D 命令观察数据区在内存中的具体内容,记录单元 A 和 B 的具体地址; (2)用 U 命令对目标代码反汇编 ,观察反汇编后的结果 .注意发现源程序的起始位 置 ,并记录这个起始地址; (3)用 T 命令作单步跟踪调试 .比较每条指令执行后的结果和原来的理解是否一致 . 得出程序运行的结果 :它们是写在什么单元 ,具体内容是什么,并判断结果是否正确; (4)在子程序 SUB1 的入口处设一断点 ,用 G 命令执行程序,在断点处观察堆栈的 内容 ,比较堆栈的内容和程序返回地址是否一致; (5)用 E 命令修改单元 A,B 的内容 ,重新执行程序 ,并记录结果; (6)用 M 命令和 A 命令对程序进行修改 :将主程序中最后两条指令 (ADD 和 ADC) 修改为一条 CALLSUB1 指令 ,重新执行程序; (7)退出 DEBUG ; 4.重新使用编辑软件 ,把源程序最后一句中的 STAR 去掉 .再次生成可执行文件 ,并用 DEBUG 调入内存 .当使用 U 命令时 ,显示的结果与前一次 (未加 STAR) 的结果有何不同 ? 【四、实验条件】 微型计算机一台,软件MASM 【五、实验过程】 根据实验内容,按步骤完成。 【六、实验结果】 (1) U 命令对目标代码反汇编 ,注意发现源程序的起始位置 ,并记录这个起始地址。 答:源程序起始地址: 1512:0000H。 (2)D 命令观察数据区在内存中的具体内容,记录单元 A 和 B 的具体地址。 答: 150A:0000H 是 A 的具体地址, 150A:0001H 是 B 的具体地址。 (3)T 命令作单步跟踪调试 .比较每条指令执行后的结果和原来的理解是否一致。得 出程序运行的结果 :它们是写在什么单元 ,具体内容是什么,并判断结果是否正 确。 答:由于单步调试的结果较多,在这里仅说几项以示情况。 ①PUSHAX 后观察得到 IP 值自加 2。 ②MOVDS,AX 后 DS 的值由 14FAH 变成 150AH 。 ③Z 的偏移地址为 0005H,而寻址 Z 中的内容成为 [0005H] 。 所以结果一致正确。 (4)在子程序 SUB1 的入口处设一断点 ,用 G 命令执行程序,在断点处观察堆栈的 内容 ,比较堆栈的内容和程序返回地址是否一致。 答: SS=150BH,IP=0017H,和程序返回地址一致。 (5)重新使用编辑软件 ,把源程序最后一句中的 STAR 去掉 .再次生成可执行文件 , 并用 DEBUG 调入内存 .当使用 U 命令时 ,显示的结果与前一次 (未加 STAR)的结果有何不同 ? 答:整个代码段仅有一条指令,ADD[BX+SI],AL 。 由于把源程序最后一句中的 STAR 去掉,那么程序就不一定是从 STAR 开始,会 造成程序混乱。

相关文档
最新文档