文档库 最新最全的文档下载
当前位置:文档库 › 实验二 汇编语言动态调试程序Debug的使用

实验二 汇编语言动态调试程序Debug的使用

实验二 汇编语言动态调试程序Debug的使用
实验二 汇编语言动态调试程序Debug的使用

实验二 Debug的使用(基础与验证型)

一、实验要求和目的

熟练掌握动态调试程序DEBUG的使用;

二、软硬件环境

1、硬件环境:微机CPU 486以上,500MB以上硬盘,32M以上内存;

2、软件环境:装有MASM 5.0、Debug、LINK、EDIT、CREF.EXE和EXR2BIN.EXE等应用程序。

三、实验涉及的主要知识单元

通过编辑、汇编和连接后的程序是可以执行的程序。但是,一个程序特别是比较复杂的程序不能保证没有一点错误。因此,在投入正式运行前必须进行调试,以检查程序的正确性。调试程序Debug就是用来调试汇编语言程序的一种工具。Debug的主要功能有显示和修改寄存器及内存单元的内容;按指定地址启动并运行程序;设置断点使程序分段运行,以便检查程序运行过程中的中间结果或确定程序出错的位置;反汇编被调试程序,它将一个可执行文件中的指令机器码反汇编成助记符指令并同时给出指令所在的内存地址;单条追踪或多条追踪被调试程序,它可以逐条指令执行或几条指令执行被调试程序,每执行一条(或几条)指令后,Debug程序将中断程序的运行并提供有关结果信息;汇编一段程序,在Debug的汇编命令下可以直接输入助记符指令,并将其汇编成可运行程序段。此外,Debug还可以将磁盘指定区的内容或一个文件装入到内存或将内存的信息写到磁盘上等等。

启动Debug程序:在DOS状态下可以用下面的命令启动Debug程序:

DEBUG [路径文件名.扩展名]

Debug后面的文件名及路径是指被调试程序的文件名及路径,Debug后面的文件必须是程序的可执行文件,其扩展名可以是.EXE 或.COM。在此命令后,DOS将调试程序Debug

调入内存,Debug接着将被调程序送入内存。比如:DEBUG 123.EXE

调试程序Debug的主要命令如下:

(一)显示内存单元内容的命令D

格式(1):-D 地址

从指定地址开始,显示128个字节的内容,每一行的左边显示段内偏移地址,接着显示16个单元的内容,最右边区域则显示这一行的16个单元所对应的可显示的字符。若无可显示的字符,则用圆点(小数点)填充。

D命令中的地址可为段内偏移量,也可为段基址和段内偏移量两部分,中间用冒号隔开,如1680:0110,即指段基址为1680H,段内偏移量为0110H。Debug中所显示的数据均为十六进制数,且省去了后面的H标志。

格式(2):-D 范围

将显示指定地址范围内的内存单元的内容,起始地址可由段基址及段内偏移量两个部分组成,中间用冒号“:”隔开,也可以只指出段内偏移量,而此时的段基址在DS中。这里所说的范围包含起始地址和结束地址。

比如–D DS:1000 1020

将显示数据段偏移地址为1000H到1020H的内容。

(二)修改内存单元内容的命令E

格式(1):-E 地址内容表

它的功能是用给定的内容表去代替所指定的内存单元的内容。

例如:

E DS:0110 41 ‘CLOSE’41

该命令执行后,将用列表中的7个字符填入从DS:0110 到DS:0116 的7个存储单元中。

格式(2):E 地址

它的功能是可以连续地逐个修改内存单元的内容。当屏幕上显示指定单元的地址和内容之后,可采取下列办法:

①若指定单元的内容需要修改,则将新的内容的十六进制数输入,再按空格键,修改便告完成,然后显示下一个存储单元的地址及内容,若需要修改,可进行同样的操作。若某一个单元的内容不需要修改,而操作又要进行下去,则可直接按空格键。

②若需要显示前一个单元的地址和内容,则输入连接号′-′,若要修改,则输入新的内容;若显示前一个单元的地址和内容仍要修改,则可进行同样的操作;若显示的内容不需要修改,则可直接按′-′键,使该操作由高地址向低地址单元连续不断地进行。

③按键,结束E命令。

(三)检查和修改寄存器内容的命令R

格式(1):R

此时将显示所有寄存器的内容和全部标志位的状态,以及现行CS:IP所指的机器指令代码和反汇编符号。

格式(2):R 寄存器名

该格式可用于检查和修改指定寄存器的内容。若不修改其内容,可按键,若需要修改其内容,可以输入1-4 个十六进制数,再按键。

格式(3):RF

该格式可用于显示标志和修改标志位状态。

当系统给出标志位状态后,可采取下列办法:

①若不需要修改任一标志位,可按键。

②若需要修改一个或多个标志位,可输入其相反的值。各标志位之间可以无空格且与顺序无关,修改后按键。

由于标志位状态显示时,是用下列特殊符号表示的,因而修改时,只要输入规定的符号即可。下面是标志名和状态符号的对照表:

标志名置位符号复位符号

溢出标志OF(是/否) OV NV

方向标志DF(减/增) DN UP

中断标志IF(允许/禁止) EI DI

符号标志SF(负/正) NG PL

零标志ZF(是/否) ZR NZ

辅助进位标志AF(是/否) AC NA

奇偶校验标志PF(偶/奇) PE PO

进位标志CF(是/否) CY NC

只有追踪标志TF,不能用指令直接修改。

例如:输入RF命令,系统可能作出如下响应:

OV DN EI NG ZR AC PE CY -

若现在要修改奇偶、零、中断和溢出标志位,可在光标处输入:

PO NZ DI NV

(四)运行程序命令G

格式:G [=地址][地址[地址…]]

该命令可以在程序运行中设置断点。它是Debug程序进行程序调试的主要命令之一。

示例:-g 001a 则执行从当前cs:ip至001a的指令,注意:地址设置必须从指令的第一字节设起。

①第一个参数“=地址”规定了程序执行的起始地址,以CS内容作段地址,等号后面的地址只需给出地址偏移量。此时,命令G与地址之间的等号不能省去。

如果在G命令执行前,已经设置了CS值和IP值,则也可以直接用G命令,从指定地址执行程序。

②格式中后面给出的地址是指断点地址,最多可设置10个断点。当程序执行到一个断点时,就停下来,显示CPU各寄存器的内容和标志位的状态,以及下一条待执行的指令,被调试程序的所有断点全部被取消,并返回Debug。

③地址参数所指的单元,必须包含有有效的8088指令的第一个字节,否则将产生不可预料的结果。

④堆栈必须至少包含有6个可用字节,否则也将产生不可预料的结果。

⑤若断点地址只包括地址偏移量,则认为段地址在CS寄存器中。

(五)追踪命令T

格式(1):T [=地址]

该命令可以在指令执行中进行追踪,若略去地址,则从CS:IP现行值执行。每一次T 命令都执行一条指令。

格式(2):T [=地址][值]

此时,它可对多条指令进行追踪,即在执行了由值所指定的若干条指令之后,停止执行并显示各寄存器的内容和各标志位,还指出下一条待执行的指令。

(六)汇编命令A

若在调试目标程序的过程中,要求改写或增添一段目标程序,则可以用A命令直接在Debug下实现。

格式:A [地址]

该命令可以从指定地址开始,将输入的汇编语言语句立即汇编成机器代码,连续存放在内存单元中。在程序输入完毕后,最后一行不输入内容,直接按回车键,即可返回DEBUG 程序,还可用反汇编命令U对刚输入的内容进行反汇编,以验证输入的程序是否正确。

使用A命令应遵守以下规则:

①所有输入数值,均为十六进制数。

②前缀助记符,必须在相关指令的前面输入,可以在同一行,也可以在不同行输入。

③段超越助记符为CS:、DS:、ES:、SS:。

④远调用时的返回指令助记符用RETF。

⑤使用串操作指令时,助记符中必须注明是字节还是字传送。

⑥汇编语言能自动汇编短、近和远的转移及近和远的调用,也能由NEAR和FAR前缀来超越。

例如:

0110:0600 JMP 602;短转移

0110:0602 JMP NEAR 605;近转移

0110:0605 JMP FAR 60A;远转移

第一条JMP指令中含有一个字节偏移量。

第二条JMP指令中含有两个字节偏移量。

第三条JMP指令中含有两个字节的偏移量及两个字节的段地址。

⑦当DEBUG不能确定某些操作数涉及的是字类型存储单元还是字节类型的存储单元时,在这种情况下,必须用前缀“WORD PTR”或“BYTE PTR”来加以说明。

例如:

NEG BYTE PTR [128]

DEC WORD [SI]

⑧当Debug不能确定一个操作数是立即数还是存储单元的地址时,可以把地址放在方括号中。

⑨两个最常用的伪指令DB和DW可以在A命令中使用,用来直接把字节或字的值送入相应的存储单元。

例如:

DB 2,5,3,4,′THIS IS AN EXAMPLE′

DW 6000,2000,7000,′BA′

⑩Debug支持所有形式的寄存器间接寻址命令。

例如:ADD BX,74[BP+3][SI-5]

POP[BX+DI]

(七)反汇编命令U

格式(1):U地址

该命令从指定的地址开始,反汇编32个字节。若略去指定地址,则以上一个U命令反汇编的最后一条指令地址的下一条指令地址作为起始地址;若没有用过U命令,则以由Debug初始化的段寄存器的值作段地址,以100作为地址偏移量。

格式(2):U范围这种格式的命令,可以对指定范围的内存单元进行反汇编,范围可以由起始地址、结束地址(只能包含地址偏移量)或起始地址及长度来指定。其命令格式如:U 04BA:100 0108 或U 04BA:0100 L7

两者是等效的。

(八)输入命令I

格式:I端口地址

该命令从指定端口输入一个字节并显示。

例如: I 2E8

C C

它表示所显示的是从02E8 端口输入的一个字节为CC。

(九)输出命令O

格式:O端口地址字节值

其功能是向指定的端口输出一个字节。

例如:O 2E8 12

它表示将一个字节12H送到输出端口2E8。

(十)命名命令N

格式:N文件标识符[文件标识符]

该命令用给定的两个文件标识符格式化在CS:5C和CS:6C的两个文件控制块中(若在调用Debug时具有一个文件标识符,则它已格式化在CS:5C的文件控制块中),文件控制块是将要介绍的装入命令L和写命令W所需要的。

N命令能把文件标识符和别的参数放至CS:81开始的参数保存区中。在CS:80中保存输入的字符个数,寄存器AX保存前两个文件标识符中的驱动器标志。

例如:

A> DEBUG

N TEST

L

N命令后,用L命令可将TEST调入自己的CS:100开始的存储区中。若对正在调试的程序TEST进行调试时,需要用到其它的文件标识符及其它参数,也可用N命令加以实现。;

例如:

A> DEBUG TEST

N 文件1 文件2

(十一)装入命令L

格式1: L <地址> <驱动器号> <起始逻辑扇区> <所读扇区个数n>

其中<地址>的缺省值为CS:100。逻辑扇区可由物理扇区号换算得到,以双面双密度盘为例:物理扇区是按0面0道1区,0面0道2区,……,0面0道9区,0面1道1区,……,0面39道9区,1面0道1区,……,1面39道9区排列。而逻辑扇区与物理扇区号的对应关系为物理扇区0面0道1扇区至9扇区,逻辑扇区号为0—8;物理扇区1面0道1扇区至9扇区,逻辑扇区号为9—11H;物理扇区0面1道1扇区至9扇区,逻辑扇区号为12—1AH;……。这样每道先0面后1面一直排下去。

其中<驱动器号>为0、1或2,0表示A驱,1表示B驱,2表示硬盘。

功能: 将<驱动器号>指定的盘上,从<起始逻辑扇区>起,共n个逻辑扇区上的所有字节顺序读入指定内存地址开始的一片连续单元。当L后的参数缺省时,必须在L之前由N命令指定(或进入DEBUG时一并指出)所读驱动器文件名。此时L执行后将该文件装入内存。

例如:-N EXAMPLE

-L

将当前驱动器上的EXAMPLE文件装入CS:100起始的一片内存单元。

格式2:L地址或L

该命令把已在CS:5C中格式化的文件控制块所指定的文件装入到指定区域中。

若省略地址,则装入到CS:100开始的内存区域中。

若是带有扩展名.COM或.EXE文件,无论命令中是否指定了地址,一律装入到CS:100开始的内存区域中去。

通常在BX和CX中包含了所读入文件的字节数,但对具有扩展名.EXE文件,则BX

和CX中还包含实际程序长度。

(十二)写命令W

功能: 为L/W命令指定待装入/写盘文件

格式1:W <地址> <盘号> <起始逻辑扇区> <所写逻辑扇区数n>

功能:与L命令不同的地方是将内存从<地址>起始的一片单元内容写入指定扇区。只有W而没有参数时,与N命令配合使用将文件写盘。该命令把由地址所指定的内存区域中的数据写入指定的驱动器。若地址中只包含偏移量,则段地址在CS中。

其中,扇区号决定了写入起始扇区;区段数决定了写入的区段个数;扇区号和区段数均用十六进制数表示。

格式2:W地址或W

该命令把指定内存区域中的数据,写入到由CS:5C处的文件控制块所规定的文件中去。若省略地址,则内存区域从CS:100 开始。

对于扩展名为.EXE或.HEX文件不能写入。因为这些文件的写入要用一种特殊格式,而此格式Debug程序不支持。

(十三)退出Debug命令Q

格式:Q

该命令退出Debug程序并返回DOS。

Q命令并不把内存中的文件存盘,若需要存盘的话,应在退出前用W命令写入磁盘。

四、实验内容与步骤

1、实验内容

(1)进入和退出Debug程序

(2)学会Debug中的D命令、E命令、R命令、T命令、A命令、G命令、U命令、N命令、

W命令等的使用。

(3)利用Debug,验证乘法、除法、加法、减法、带进位加、带借位减、堆栈操作指令、

串操作指令的功能。

(4)使用Debug调试程序调试汇编程序。

2、实验步骤

(1)在DOS提示符下,进入Debug程序。

(2)详细记录每一步所用的命令,以及查看结果的方法和具体结果。

(3)现有一个双字加法源程序如下,其中存在错误。现假设已汇编、连结生成了可执行文件HB.EXE,存放在d:\MASM目录下。请使用Debug对其进行调试。

Code SEGMENT

ASSUME CS:code,DS:code

ORG 100H ;从100H处开始存放下列指令

Start:MOV AX,code ;将DS置成code段的首地址

MOV DS,AX

MOV SI,200H ;取第一个数的首地址

MOV AX,[SI] ;将第一个数的低16位取到AX

MOV DI,204H ;取第二个数的首地址

ADD AX,[DI] ;第一个数和第二个数的低16应相加

MOV [SI+8],AX ;低16位相加的结果送到208H和209H单元

MOV AX,[SI+2] ;取第一个数的高16位送到AX中

ADD AX,[DI+2] ;两个数的高16位相加

MOV [SI+0AH],AX ;高16位相加的结果送到20AH,20BH单元

MOV AX,4C00H ;使用DOS的4CH号功能调用

INT 21H ;进入功能调用,返回DOS

ORG 200H ;从200H处开始存放下列数据

DD 12345678h,654387A9h,0h ;被加数、加数、和

Code ENDS

END start

调试过程:

①进入Debug并装入可执行文件HB.EXE

D:\MASM>Debug HB.EXE

-

②观察寄存器初始状态

-R

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

DS=1892 ES=1892 SS=18A2 CS=18A2 IP=0100 NV UP EI PL NZ NA PO NC

18A2:0100 B8A218 MOV AX,18A2

注:(1)以上显示的寄存器值,可能和你的电脑显示的不一样。

(2)Debug中默认的进制是十六进制。

③以单步工作方式开始运行程序

首先用T命令顺序执行用户程序的前l两条指令,将段寄存器DS预置为用户的数据段。-T

AX=18A2 BX=0000 CX=020C DX=0000 SP=0000 BP=0000 SI=0000 DI=0000

DS=1892 ES=1892 SS=18A2 CS=18A2 IP=0103 NV UP EI PL NZ NA PO NC

18A2:0103 8ED8 MOV DS,AX

-T

AX=18A2 BX=0000 CX=020C DX=0000 SP=0000 BP=0000 SI=0000 DI=0000

DS=18A2 ES=1892 SS=18A2 CS=18A2 IP=0105 NV UP EI PL NZ NA PO NC

18A2:0105 BE0002 MOV SI,0200

④观察用户程序数据段初始内容

-D 200 20F

18A2:0200 78 56 34 12 A9 87 43 65-00 00 00 00 00 74 13 50 xV4...Ce.....t.P -

⑤连续工作方式运行程序至返回DOS前(设断点),查看运行结果。为此,现使用U命令反汇编。

-U 100

18A2:0100 B8A218 MOV AX,18A2

18A2:0103 8ED8 MOV DS,AX

18A2:0105 BE0002 MOV SI,0200

18A2:0108 8B04 MOV AX,[SI]

18A2:010A BF0402 MOV DI,0204

18A2:010D 0305 ADD AX,[DI]

18A2:010F 894408 MOV [SI+08],AX

18A2:0112 8B4402 MOV AX,[SI+02]

18A2:0115 034502 ADD AX,[DI+02]

18A2:0118 89440A MOV [SI+0A],AX

18A2:011B B8004C MOV AX,4C00

18A2:011E CD21 INT 21

-

可见,要执行10条指令,至011B处停止

-G=100,011B

AX=7777 BX=0000 CX=020C DX=0000 SP=0000 BP=0000 SI=0200 DI=0204

DS=18A2 ES=1892 SS=18A2 CS=18A2 IP=011B NV UP EI PL NZ NA PE NC

18A2:011B B8004C MOV AX,4C00

-D 200 20F

18A2:0200 78 56 34 12 A9 87 43 65-21 DE 77 77 43 43 83 06 xV4...Ce!.wwCC.. -

和为7777DE21H,正确。

⑥再取一组数据,查看运行结果。为此,首先用E命令修改数据。

-E 200 CD,AB,78,56,90,EF,34,12

-D 200 20F

18A2:0200 CD AB 78 56 90 EF 34 12-21 DE 77 77 43 43 83 06 ..xV..4.!.wwCC.. -G=100,11B

AX=68AC BX=0000 CX=020C DX=0000 SP=0000 BP=0000 SI=0200 DI=0204

DS=18A2 ES=1892 SS=18A2 CS=18A2 IP=011B NV UP EI PL NZ NA PE NC

18A2:011B B8004C MOV AX,4C00

-D 200 20F

18A2:0200 CD AB 78 56 90 EF 34 12-5D 9B AC 68 43 43 83 06 ..xV..4.]..hCC.. -

和为68AC9B5DH,错误。说明程序有问题。

⑦再将断点设在完成低位字加法后,查看运行结果。

-G=100,112

AX=9B5D BX=0000 CX=020C DX=0000 SP=0000 BP=0000 SI=0200 DI=0204

DS=18A2 ES=1892 SS=18A2 CS=18A2 IP=0112 NV UP EI NG NZ NA PO CY

18A2:0112 8B4402 MOV AX,[SI+02] DS:0202=5678

-D 200 20F

18A2:0200 CD AB 78 56 90 EF 34 12-5D 9B AC 68 43 43 83 06 ..xV..4.]..hCC.. -

低位和为9B5D,正确。说明错误可能出在后面

⑧使用T命令从刚才的断点处向后单步调试,查看运行结果。

-T=112

AX=5678 BX=0000 CX=020C DX=0000 SP=0000 BP=0000 SI=0200 DI=0204

DS=18A2 ES=1892 SS=18A2 CS=18A2 IP=0115 NV UP EI NG NZ NA PO CY

18A2:0115 034502 ADD AX,[DI+02] DS:0206=1234

-T

AX=68AC BX=0000 CX=020C DX=0000 SP=0000 BP=0000 SI=0200 DI=0204

DS=18A2 ES=1892 SS=18A2 CS=18A2 IP=0118 NV UP EI PL NZ NA PE NC

18A2:0118 89440A MOV [SI+0A],AX DS:020A=68AC

-

AX寄存器的结果为68AC,而应为68AD。可见是本条加法指令使用错误,这里应使用带进位加法指令。

⑨使用A命令装入正确指令后再次运行,察看结果。

-A 115

18A2:0115 ADC AX,[DI+02]

18A2:0118

-G=100,11B

AX=68AD BX=0000 CX=020C DX=0000 SP=0000 BP=0000 SI=0200 DI=0204

DS=18A2 ES=1892 SS=18A2 CS=18A2 IP=011B NV UP EI PL NZ NA PO NC

18A2:011B B8004C MOV AX,4C00

-D 200 20F

18A2:0200 CD AB 78 56 90 EF 34 12-5D 9B AD 68 43 43 83 06 ..xV..4.]..hCC.. -

和为68AD9B5DH,正确。对于这样一个简单程序一般来说不会再有问题。退出后修改源程序即可。

⑩退出

-Q

D:\>

需要说明的是此程序很简单,只需使用T命令逐条单步调试即可。本例采用的调试方法似乎过于繁琐,但这是为了说明程序调试的一般方法,以便读者调试复杂程序时借鉴。

五、实验要求与提示

1、实验要求

(1)熟练掌握Debug的命令;

(2)熟练掌握使用Debug调试汇编程序;

(3)回答思考问题;

(4)记录实验结果。

2、实验提示

一般使用Debug调试汇编程序的步筹如下:

(1) 调用DEBUG,装入用户程序

(2) 观察寄存器初始状态

(3) 以单步工作方式开始运行程序

(4) 观察用户程序数据段初始内容

(5) 继续以单步工作方式运行程序

(6) 连续工作方式运行程序

(7) 修改程序和数据

(8) 运用断点调试程序

六、思考与练习以及测评标准

(1) 如何启动和退出Debug程序。

(2) 整理每个Debug命令使用的方法,实际示例及执行结果。

(3) 启动Debug 后,要装入某一个.EXE 文件,应通过什么方法实现?

(4) 用Debug 调试程序时,如何设置断点?

⑸编写计算下面函数值的程序:

??

???<-=>=0,10,00,1x x x y

设输入数据为X 、输出数据Y ,且皆为字节变量,使用Debug 查看X 、Y 两个变量的数据。

实验一 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.wendangku.net/doc/7712814054.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调试程序的应用 1.直接启动DEBUG程序 如https://www.wendangku.net/doc/7712814054.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命令的使用

实验一Debug命令的使用 一、知识点 1、DEBUG简介 DEBUG.EXE是DOS提供的用于调试可执行程序的一个工具软件。在汇编语言程序调试中很常用。 DEBUG的提示符是“-”,所有DEBUG调试命令军在此提示符下输入。 DEBUG命令都是一个字母,后跟一个或多个参数,也可使用默认参数。 DEBUG命令的使用注意问题: (1)字母不分大小写 (2)只使用十六进制数,但没有带后缀字母“H” (3)命令如果不符合DEBUG的规则,则将以“error”提示,并以“^”指示出错位置。 (4)每个命令只有按下回车键后才有效,可以用Ctrl+Break终止命令的执行。 2、Debug的调入和退出 以WIN2000环境为例,点击“开始/运行…”,在“运行”对话框中输入命令:cmd,然后点击“确定”,进入DOS命令行状态: C:\Documents and Settings\lfy> 然后输入命令: >Debug 进入Debug调试状态,出现Debug命令提示府“-”,在此提示符下可运行所需要的Debug 命令了。 退出Debug的命令:Q 3、Debug常用命令 (1)汇编命令A,格式为: - A [地址] 功能:从指定地址开始允许输入汇编指令,并将该指令汇编成机器指令代码从指定地址开始存放。若不指定地址,则系统从默认的地址开始存放。按回车键退出汇编状态 应用:用于调试一条指令或几条指令组成的一个程序段。 (2)显示和修改寄存器命令R,格式为: - R [寄存器名] 功能:若指定寄存器,则显示指定的寄存器的内容,并可进行修改;若不要修改,则按Enter 健。若未指定寄存器,则默认为显示所有寄存器的内容。 应用:常用于通过寄存器的值查看指令的执行结果。 (3)内存单元内容的命令E,格式为: - E 地址[内容表] 功能:若指定内容表,则用内容表中的内容代替指定地址开始的存储单元的值;否则,从指定地址开始逐个单元显示其内容,并等待用户修改,按空格键则继续显示下一单元的值,按回车键结束。例如: -E 100 184E: 0100 89,78

有图示的用DEBUG调试程序过程示例

用DEBUG调试程序示例 例如:编程实现两个字类型的数相加,把和存在存储单元中,并且用debug查看程序的运行结果,检查程序运行结果的正确性。 参考源程序如下: DATA SEGMENT NUM1 DW 1234H NUM2 DW 5678H SUM DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,NUM1 ADD AX,NUM2 MOV SUM,AX MOV AH,4CH INT 21H CODE ENDS END START 假设把源程序命名为jiafa.asm,输入源程序后,完成汇编、连接的过程,则生成了可执行文件jiafa.exe。运行此可执行文件时在屏幕上无显示结果。在debug下调试程序的步骤示例如下: 一、进入debug,同时把被调试程序调入内存。 回车后即进入了debug程序,结果如下图所示: 注意:被调试的是可执行文件,而且文件必须写全名,不能只写主文件名。 二、用u命令反汇编(输入u后回车),以便查找需要设置断点的地址。

三、设置断点运行 断点可以设置在程序中的任意一条指令的首地址处,但为了能够查看到程序的运行结果,一般把断点设置在主程序运行完并且程序退出之前,例如程序的最后两条指令是 MOV AH, 4CH INT 21H 则把断点设置在MOV AH, 4CH处,(如果程序较长,一次反汇编没有找到上述指令,再次输入u命令后回车,直到显示上述指令为止,),对于本例,显示如下图所示的结果。 如上图示例中的指令mov ah,4ch的偏移地址是0000F,指令int 21h(debug下默认为16进制,不显示h)的偏移地址是0011,则用G命令设置断点运行时输入g0F(g是debug下的程序运行命令,后面的数字0F是刚才选定的断点地址)回车后结果如下图: 为了能够查看你的程序在内存单元中存放的数据,必须设置断点运行不能只用G命令,并且断点必须是你程序中的某条指令,一般设置在MOV AH, 4CH处。 四、查看内存单元中的数据 查看内存单元的内容用D命令,格式之一如下: D段地址:偏移地址

debug常见命令使用说明

五、DEBUG调试程序 DEBUG.EXE程序是专门为分析、研制和开发汇编语言程序而设计的一种调试工具,具有跟踪程序执行、观察中间运行结果、显示和修改寄存器或存储单元内容等多种功能。它能使程序设计人员或用户触及到机器内部,因此可以说它是80X86CPU的心灵窗口,也是我们学习汇编语言必须掌握的调试工具。 1)DEBUG程序使用 在DOS提示符下键入命令: C>DEBUG [盘符:][路径][文件名.EXE][参数1][参数2] 这时屏幕上出现DEBUG的提示符“-”,表示系统在DEBUG管理之下,此时可以用DEBUG 进行程序调试。若所有选项省略,仅把DEBUG装入内存,可对当前内存中的内容进行调试,或者再用N和L命令,从指定盘上装入要调试的程序;若命令行中有文件名,则DOS把DEBUG 程序调入内存后,再由DEBUG将指定的文件名装入内存。 2)DEBUG的常用命令 (1)汇编命令A 格式:A[起始地址] 功能:将输入源程序的指令汇编成目标代码并从指定地址单元开始存放。若缺省起始地址,则从当前CS:100地址开始存放。A命令按行汇编,主要是用于小段程序的汇编或对目标程序的修改。 (2)反汇编命令U 格式1:U[起始地址] 格式2:U[起始地址][结束地址|字节数] 功能:格式1从指定起始地址处开始将32个字节的目标代码转换成汇编指令形式,缺省起始地址,则从当前地址CS:IP开始。 格式2将指定范围的内存单元中的目标代码转换成汇编指令。 (3)显示、修改寄存器命令R 格式:R[寄存器名] 功能:若给出寄存器名,则显示该寄存器的内容并可进行修改。缺省寄存器名,则按以下格式显示所有寄存器的内容及当前值(不能修改)。 AX=0000 BX=0004 CX=0020 DX=0000 SP=0080 BP=0000 SI=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调试汇编语言程序段一.实验目的 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

汇编语言调试及运行

汇编语言程序设计实验 实验一 汇编语言的调试和运行 班级: 姓名: 学号: 日期:

实验一汇编语言的调试和运行 一、实验目的 1、熟悉DEBUG程序和命令,并用它运行基本指令和察看运行结果。 ○1怎样调用Debug ②如何显示和修改内存单元 ③如何显示和修改CPU的寄存器 ④各标志位的状态是如何表示的,怎样修改标志寄存器 ⑤怎样汇编与反汇编 ⑥怎样执行程序 ⑦怎样跟踪程序 ⑧怎样命名和读写文件 ⑨怎样退出Debug 2、熟悉汇编中通用传送指令。 3、理解指令不同的寻址方式,注意规定或限制使用的寄存器如:双操作数 指令中,源操作数和目的操作数的地址不能同时为存储器地址,段跨越 前缀不能使用CS,操作对象是地址还是地址中的内容,指令隐含使用 的寄存器。 二、实验内容 1、键入 DEBUG 进入 DEBUG 控制状态,显示提示符 '- '

2、用命令 F100 10F 'A' 将'A'的ASCII码填入内存。

3、用命令 D100 10F 观察内存中的十六进制码及屏幕右边的ASCII字符。 4、用命令 F110 11F 41 重复上二项实验,观察结果并比较。 5、用命令 E100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的十六进制数是什么字符的ASCII 码?

6、用DEBUG调试和运行下列程序,记录所用的DEBUG命令和运行结果。 MOV WORD PTR [1100],3445 MOV WORD PTR [1102],5678 MOV WORD PTR [1106],6732 MOV AX,[1100] SUB AX,[1102] ADD AX,[1106] MOV [1104],AX HLT 其中粗斜体的数字可以修改。

汇编语言编程步骤调试方法

汇编语言的编程步骤与调试方法 一、汇编源程序的建立 1. 使用工具 (1)EDIT,记事本等文本编辑软件,编辑源程序,保存为.asm文 件; (2)ASM,MASM汇编程序,对源程序进行汇编,生成.obj文件- 目标文件,以及调试用.LST-列表文件和.CRF-交叉引用表; (3)Link连接程序,对使用的目标文件和库文件进行连接,生 成.exe文件,同时调试用.map-地址映像文件; 如果源程序无语法错误,上述三步将生成可运行的.exe文件, 如果运行结果无误,则完成对汇编程序的编程,如果运行后结果存 在错误,需要进行调试。 (4)Debug调试程序,对.exe文件进行调试,修改,直到程序正 确。 图3 目标程序生成步骤图2. 编程过程 (1)用文本编辑软件,编写扩展名为.asm的源文程序文件。 (2)用汇编程序对编好的源文件进行汇编。 命令行:masm [*.asm] ↙ 如果源文件中存在语法错误,则汇编程序将指出错误类型及位置,可根据这些信息重新编辑源文件,直至无语法错误,汇编后,将生成指定名称的目标文件.obj。 使用MASM50汇编程序进行汇编,输入命令行masm或者masm *.asm后,根据提示,输入文件名,在汇编没有错误的情况下,如屏幕所示:汇编程序可生成三个文件,*.obj,*.lst和*.crf。 *.obj-目标文件,用于连接生成可执行文件; *.lst-列表文件(可选),汇编语言汇编的机器语言与汇编语言对照表,可用于

调试; *.crf-交叉引用文件(可选),给出了用户定义的所有符号和对每个符号定义、引用的行号。 (3)目标文件的连接 命令行:link [*.obj] [*.obj] [*.lib] ↙ 连接程序,将多个目标程序及库文件,连接生成可执行的*.exe文件,同时可选择生成*.map文件。 *.map-地址映像文件,给出内存地址分配的有关信息。 下图所示屏幕,为Link连接两个目标文件,没有错误的情况下,生成*.exe 文件。 (4)执行程序 执行*.exe文件,观察程序运行结果,如果存在错误,需要进行调试。调试工具DEBUG是针对汇编语言程序设计的一种调试工具,熟练使用DEBUG有助于汇编语言程序员对于逻辑错误的调试。 二、汇编程序的调试

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显示扩充内存的状态。

汇编程序调试实验报告

微机原理与接口技术 课 程 作 业 班级:

目录 一、实验目的: (3) 二、实验环境 (3) 三、实验过程 (3) (一)基础知识储备 (3) (二)汇编语言程序设计 (3) (三)汇编程序调试 (3) 四、调试实例 (4) (一)实例一 (4) (二)实例二 (5) (三)实例三 (6) (四)实例四 (7) 五、实验总结 (8) (一)实验收获 (8) (二)实验感悟 (9)

一、实验目的: 汇编语言是一种用助记符表示的程序设计语言。用汇编语言编写的源程序生成的目标代码短,占内存少,执行速度快,适合于系统软件、实时控制软件、I/O 接口驱动等程序设计。通过本次实验,熟练掌握汇编程序的调试,深入了解MASM 汇编语言及其程序设计方法。 二、实验环境 EDIT编辑器、MASM汇编程序、LINK连接程序、TD调试程序 三、实验过程 (一)基础知识储备 1.了解微处理器80486的内部结构、寄存器组、工作模式等基本知识。 2.熟练掌握微处理器指令系统的相关知识,重点掌握80486的寻址方式和常用的指令格式及功能。 3.了解MASM汇编语言及其程序设计方法。掌握MASM汇编语言的语句格式、语法规则、常用伪指令及DOS功能的调用等。了解顺序结构、分支结构、循环结构和子程序的设计方法。 (二)汇编语言程序设计 1.分析问题,明确要解决的问题和要求。 2.确定解决问题的思路和方法。 3.将解决问题的方案编制成程序流程图。 4.根据流程图,逐条编写程序。 5.上机调试,验证程序是否正确。 (三)汇编程序调试 MASM汇编程序的主要功能是:把源文件转换成用二进制代码表示的目标文件,并生成列表文件;在转换过程中汇编程序将对源程序进行扫描,检查源程序是否有语法错误并指出源程序的语法错误。 汇编语言源程序的调试过程需要经过编辑、汇编、连接、运行、调试等几个步骤:

在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常用命令及8086指令使用

实验一DEBUG常用命令及8086指令使用 实验目的: 通过实验掌握下列知识: 1、8086指令: M OV,ADD,SUB,XCHG等 2、DEBUG命令: A,D,E,F,H,R,T,U。 3、ASCII码及用16进制数表示二进制码的方法。 内容及步骤: 一、DEBUG 命令使用: 1、打 DEBUG 进入 DEBUG 控制,显示提示符 '_ '。 2、用命令 F100 10F 'A' 将'A'的ASCII码填入内存。 3、用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。 4、用命令F110 11F 41 重复上二项实验,观察结果并比较。 5、用命令 E100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存 单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码? 6、用H命令检查下列各组16进制数加减结果并和你的手算结果比较: (1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH 7、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF 和AF的内容。 8、用R命令将AX,BX内容改写为1050H及23A8H。

二、8086常用指令练习 1、传送指令 1)用A命令在内存100H处键入下列内容: MOV AX,1234 MOV BX,5678 XCHG A X,BX MOV AH,35

MOV AL,48 MOV DX,75AB XCHG A X,DX 2)用U命令检查键入的程序并记录,特别注意左边的机器码。 3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。并注意标志位有无变化。 2、加减法指令:

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

进入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 执行

VB程序调试技巧

一,如果遇到了一些逻辑性很强的问题比如有循环什么的我的方法是在关键地方加入 变量 这样可以比较好地找到问题 二,msgbox 三,监视窗口,如下面的例子 For i=1 to 10000 A=sqr(i) next i 你想再监视当i=799时A的值,就可以添加监视,方法:点调试,添加监视,选择“当监视值为真时中断”,上面表达式框中写上i=799, 这样你按F5,运行程序,程序会在i=799时中断。其他选项你可以自己去琢磨一下。 一个程序如何顺利的“脱产”,调试的过程是非常重要的。学过、钻研过程序设计的人都有同样的感受,很多情况下,调试程序的过程会比程序编写的过程更为困难。任何一个天才都不敢说,他编的程序是100%正确的。几乎每一个稍微复杂一点的程序都必须经过反复的调试、修改,最终才完成。所以说,程序的调试是编程中的一项重要技术。 程序中的典型错误类型 A类:语法错误。 B类:编译错误。

C类:属性设置错误。 D类:逻辑错误。 调试方法 方法一:利用“MSDN帮助菜单” “MSDN帮助菜单”是一个很好的自学工具,对于出现调试对话框的菜单来说,可以按下“帮助”按钮查看错误原因。 对于一些不是很清楚的函数格式、保留字的作用,也可以借助“帮助菜单”。 方法二:逐过程检查 主要检查代码是否写对,位置有没有错误,关键是要确定一段代码是在哪个事件控制下的。 不妨先在脑海中把整个程序过一边,想一想究竟会有哪些事件发生(有些事件是人机互动的,例如:鼠标点击;而有些是机器自己执行的,这时要想到计时器的作用);然后想一想每一件事发生后有什么效果。我们代码所编写的一般就是事件发生后的这个效果,那么以此事件来决定代码所写的位置。

汇编上机过程及DEBUG调试

汇编语言的一般上机操作过程 一、上机前的软件准备 ●MS-DOS操作系统(如:MSDOS6.2、MSDOS7.0等) ●文本编辑器(如:记事本、https://www.wendangku.net/doc/7712814054.html,等) ●汇编程序(如:MASM.EXE、ASM.EXE等) ●连接程序(如:LINK.EXE等) ●调试程序(如:DEBUG.EXE等) 二、汇编语言程序的建立过程 在编辑软件支持下,将源程序输入到计算机中。注意:汇编语言源程序的扩展名为.ASM。 可使用任意一种文本编辑工具来建立和编写汇编语言源程序,例如,Word、Notepad、记事本等。在MS-DOS下也可以使用其自带的文本编辑器EDIT。使用方法是在DOS提示符下输入EDIT后回车,进入EDIT的操作界面后即可编写汇编语言源程序,完成编写后,将文件保存后缀名为.ASM的汇编源文件。

2.利用宏汇编程序对汇编源程序.ASM进行汇编,产生.OBJ文件利用宏汇编程序MASM对汇编源程序(扩展名为.ASM)进行汇编,产生扩展名为.OBJ的可重定位的目标代码。MASM是一个宏汇编软件,使用时后面跟所要汇编的源程序名即可。格式如下: C:\>MASM filename(.asm) 回车 当屏幕上显示一些版权信息后会出现几个提示信息,如:要求输入目标文件名;询问是否建立列表文件(扩展名为.LST);询问是否建立交叉索引文件(扩展名为. CRF)。 Object filename [filename.OBJ]:回车 Source listing [NUL.LST]:回车 Cross-reference [NUL.CRF]:回车 当上述问题回答完毕,MASM即开始汇编工作。MASM对源程序进行汇编将采用两遍扫描方式,每一遍扫描都以遇到END伪指令作为结束点。第一遍扫描是检查名字并产生一个符号表,确定每个变量名和符号的相对位置;第一遍扫描就将产生目标文件,并根据用户需要产生列表文件和交叉索引文件。最后,经汇编后的上述源文件将生产3个文件,其中目标文件是一个二进制文件,供连接使用;列表文件是一个文本文件,它会列出源程序及相应的目标程序清单,同时给出符号表,表中分别给出段名、段的大小属性。表中还将给出变量名、标号的类型等,以供用户调试使用。 在对源程序进行汇编过程中,汇编程序会对源程序中的非逻辑性错误给出显示,例如,在源程序中使用了非法指令、标号重复、相对转移超出转移范围等等。如果MASM检查出源程序中有错误,则列出错误位置、错误代码及错误性质,并分别列出警告错误(Warning Errors)和严重错误(Serve Errors)的个数。其中前者提出一般性错误,后者指出语法错误。如果错误的个数不为0,则需要打开源文件(.ASM)根据提示的错误信息修改所在行的错误,当调试、纠错直到正确无误时,错误个数将变为0。如果错误个数为0,则程序通过汇编,要指出的是汇编过程只能指出程序中的语法错误,并不能指出算法错误和其它错误。 程序设计者在改正源程序中的错误过程中,重新编辑源程序,形成新的.ASM 文件,然后重新汇编,直到汇编程序显示无错误为止。

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

相关文档
相关文档 最新文档