微机实验作业_第1页
微机实验作业_第2页
微机实验作业_第3页
微机实验作业_第4页
微机实验作业_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微机原理实验指导书

东华大学信息信息科学与技术学院

二OO八年十月

目录

实验一DEBUG的启动及其基本命令的使用1

实验二内存操作数及寻址方法17

实验三汇编语言程序的调试与运行20

实验四查表程序设计20

实验五系统功能调用30

实验六分支程序设计33

实验七循环程序设计38

实验八子程序设计47

实验九综合程序设计50

附录一DEBUG命令详解31

附录二实验报告48

实验的基本要求与方法

一、实验目的

学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。为后

续课程打下坚实的基础。

二、实验要求

1.上机前做好充分的准备,包括程序框图、源程序清单、调试步骤、测试方法,对运行结果的分析

等。

2。上机时要遵守实验室的规章制度,爱护实验设备。要熟悉与实验有关的系统软件(编辑程序、汇

编程序、连接程序和调试程序等)的使用方法。在程序的调试过程中,有意识地学习及掌握debug

程序的各种操作命令,以便掌握程序的调试方法及技巧。

3.每个实验完成后,应写出实验报告,实验报告为word文档。实验报告要求:

(1)设计说明:用来说明程序的功能、结构。它包括:程序名、功能、原理及算法说明、程序及数

据结构、主要符号名的说明等。

(2)调试说明:便于学生总结编程经验提高编程及高度能力。它包括:调试情况,如上机时遇到的

问题及解决办法,观察到的现象及其分析,对程序设计技巧的总结及分析等;程序的输出结果及对

结果的分析;实验的心得体会。

(3)程序框图

(4)程序清单

4.为了更好地进行上机管理,要求用硬盘存储程序,并建立和使用子目录,以避免文件被别人删除。

为便于统一管理硬盘中的文件,要求实验者在e:\学号目录下建立自己的文件,文件按以下格式命名:

字母学号.扩充名,其中字母取a~z的26个英文字母,按实验顺序从a至z排列,学号取后面的6

位。如学号为20043727的学生第三个实验第一个源程序所对应的文件名为CI043727.ASM,本次实

验的第二个源程序为C2043727,实验报告对应的文件名为c043727.doc。

实验报告写完后,将源程序文件及实验报告上传到教师机上相应的目录中。具体目录上机时由指导

老师告之。

三、实验的基本方法

1.从教师机下载汇编程序MASM.EXE和连接程序LINK.EXE到学生机的相应文件夹(文件夹以学

号命名)下。

2.进入DOS环境中相应的目录下。

如学生的文件来为:d:\20043727,则对应的操作为

(1)选择windows的“开始”-“程序”-“附件”一“命令提示符”

(2)在DOS命令提示符下输入如下命令(其中带下划线部分为输入内容).

C:\DocumentsandSettings\new>d;

D:\>cd20043727

D:\20043727>edital043727.asm

进入编辑程序,在其环境下输入编好的源程序,然后在盘上生成一个扩展名为.asm的文件。

3.用宏汇编程序MASM,将扩展名为.ASM的源程序汇编成目标程序,即生成盘上扩展名为.OBJ的

文件。若编过程出现错误,则无法生成目标程序,需要回到编辑程序进行修改,修改后重新汇编直

到无错出现。

4.用连接程序LINK,将扩展名为.OBJ的目标程序连接装配成可执行文件,即在盘上生成扩展名

为.EXE的文件。

5.用调试程序DEBUG,调试扩展名为.EXE的文件,以发现程序中的逻辑错误并进行排除。

1

实验一DEBUG的启动及其基本命令的使用

一.实验目的:

掌握DEBUG的基本命令及其功能

二.实验内容:

DEBUG是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程

序员提供了非常有效的调试手段。

1、DEBUG程序的启动

在DOS提示符下,可键入命令:

C>DEBUG[d:][path][文件名][参数1][参数2]

其中文件名是被调试文件的名称,它须是执行文件(EXE),两个参数是运行被调试文件时所需

要的命令参数,在DEBUG程序调入后,出现提示符此时,可键入所需的DEBUG命令。

在启动DEBUG时,如果输入了文件名,则DEBUG程序把指定文件装入内存。用户可以通过

DEBUG的命令对指定文件进行修改、显示和执行。如果没有文件名,则是以当前内存的内容工作,

或者用命名命令和装入命令把需要的文件装入内存,然后再用DEBUG的命令进行修改、显示和执

行。

2、DEBUG的主要命令

汇编命令A,格式为:

-A[地址]

该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始

的存储器中。

反汇编命令U,有两种格式:

1)-U[地址]

该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U命令的最后一条指令

的下一个单元开始显示32个字节。

2)-U范围

该命令对指定范围的内存单元进行反汇编,例如:

-U04BA:01000108或-U04BA:0100L9

此二命令是等效的。

运行命令G,格式为:

<}[=地址1][地址2[地址3。。。]]

其中地址1规定了运行起始地址,后面的若干地址均为断点地址。

追踪命令T,有两种格式:

I)逐条指令追踪:

-T[=地址]

该命令从指定地址起执行一条指令后停下来,显示寄存器内容和状态值。

2)多条指令追踪:

-T[=地址][值]

该命令从指定地址起执行n条命令后停下来,n由[值]确定。

显示内存单元内容的命令D,格式为:

2

-D[地址]或-D[范围]

修改内存单元内容的命令E,它有两种格式:

1)用给定的内容代替指定范围的单元内容:

-E地址内容表

例如:-E2000:0100F3"XYZ"8D

其中F3,“X”“Y”“Z”和8D各占一个字节,用这五个字节代替原内存单元2000:0100到0104

的内容,“X”“Y”“Z”将分别按它们的ASCII码值代入。

2)逐个单元相继地修改:

-E地址

例如:-E100:

18E4:010089.78

此命令是将原100号单元的内容89改为78。78是程序员键入的。

检查和修改寄存器内容的命令R,它有三种方式:

1)显示CPU内部所有寄存器内容和标志位状态;格式为:-R

R命令显示中标志位状态的含义如下表所示:

标志名置位复位

溢出Overflow(是/否)OVNV

方向Direction(减量/增量)DNUP

中断Interrupt(允许/屏蔽)EIDI

符号Sign(负/正)NGPL

零Zero(是/否)ZRNZ

辅助进位AuxiliaryCarry(是/否)ACNA

奇偶Parity(偶/奇)PEPO

进位Carry(是/否)CYNC

2)显示和修改某个指定寄存器内容,格式为:

-R寄存器名

例如打入:-RAX

系统将响应如下:

AXFIF4

表示AX当前内容为F1F4,此时若不对其作修改,可按ENTER键,否则,打入修改后内

容,如:

-RBX

BX0369

:059F

则BX内容由0369改为059F

3)显示和修改标志位状态,命令格式为:

-RF

系统将给出响应,如

OVDNEINGZRACPECY-

这时若不作修改可按ENTER键,否则在号之后键入修改值,键入顺序任意。如

OVDNEINGZRACPECY-PONZDINV

命名命令N,格式为:

-N文件名

3

此命令将文件名格式化在CS:5cH的文件控制块内,以便使用L或W命令把文件装入内存进

行调试或者存盘。

装入命令L,它有两种功能:

1)把磁盘上指定扇区的内容装入到内存指定地址起始的单元中,格式为:

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

2)装入指定文件,格式为:

-L[地址]

此命令装入已在CS:5CH中格式化的文件控制块所指定的文件。

在用L命令前,BX和CX中应包含所读文件的字节数。

写命令W,有两种格式:

1)把数据写入磁盘的指定扇区:

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

2)把数据写入指定文件中:

-W[地址]

此命令把指定内存区域中的数据写入由CS:5cH处的FCB所规定的文件中。在用W

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

退出DEBUG命令Q,该命令格式为

Q

它退出DEBUG程序,返回DOS,但该命令本身并不把在内存中的文件存盘,如需存

盘,应在执行Q命令前先执行写命令W。

三.操作步骤

1.调用字处理程序建立源程序文件如图1」所示。

DATASEGMENT

STRING1DBMovethecursorbackward'

STRING2DBMovethecursorbackward'

MESSIDB'Match.',13,10,'$'

MESS2DB'NoMatch.',13,10,'$'

DATAENDS

STACKSEGMENTSTACK

DB40DUP(?)

STACKENDS

PROGNAMSEGMENT

ASSUMECS:PROGNAM,DS:DATA,ES:DATA,SS:STACK

MAINPROCFAR

START:XORAX,AX

PUSHAX

PUSHDS

MOVAX,DATA

MOVDS,AX

MOVES,AX

MOVAX,STACK

MOVSS,AX

4

LEASI,STRING1

LEADI,STRING2

CLD

MOVCX,25

REPZCMPSB

JZMATCH

LEADX,MESS2

JMPSHORTDISP

MATCH:LEADX,MESSI

DISP:MOVAH,09h

INT21H

RET

MAINENDP

PROGNAMENDS

ENDSTART

图1-1

2.在DOS环境下,用汇编程序MASM对源文件汇编产生目标文件OBJ,命令格式如下:

D:\ASM\MASM源程序文件名.asm

如汇编程序指示出错则需要重新调用编辑程序修改错误,直至汇编通过为止。

3.用连接程序link产生执行文件exe

D:\ASM\LINK源程序文件名.obj

4.执行程序

可直接从DOS执行程序如下:

D:\ASM\源程序文件名

Match

此时可看到程序的运行结果。为了调试程序的另一部分,可重新进行编辑程序修改两个字符串

的内容,使它们互不相同,如修改后的数据段为

DATASEGMENT

STRINT1DB'Movethecursorbackward/

STRINT2DB*Movethecursorfordward/

MessiDB'Match.',13,10,'$'

Mess2DB'NoMatch.'』3,10,'$'

DATAENDS

然后,重新汇编、连接、执行,结果为:

Nomatch!

至此,程序已调试完毕,运行结果正确。

5.用DEBUG调试程序

另一种调试程序的方法是使用DEBUG程序。调用格式如下:

D:\asm\DEBUG源程序文件名.exe

此时,DEBUG已将执行程序装入内存,可直接用g命令运行程序。

-g

Match.

5

为了调试程序的另一部分,可在DEBUG中修改字符串内容。可先用u命令显示程序,以便了

解指令地址。显示结果如图1-2所示

-U

14F0:0000IEPUSHDS

14F0:000133COXORAX,AX

14F0:000350PUSHAX

14F0:0004B8E814MOVAX,14E8

14F0:00078ED8MOVDS,AX

14F0:00098EC0MOVES,AX

14F0:000BB8ED14MOVAXJ4ED

14F0:000E8ED0MOVSS,AX

14F0:00108D360000LEASI,[0000]

14F0:00148D3E1800LEADIJ0018]

14F0:0018FCCLD

14F0:0019B91900MOVCX,0019

14F0:001CF3REPZ

14F0:001DA6CMPSB

14F0:001E7406JZ0026

-u

14F0:00208D163900LEADX40039]

14F0:0024EB04JMP002A

14F0:00268D163000LEADX,[0030]

14F0:002AB409MOVAH,09

14F0:002CCD21INT21

14F0:002ECBRETF

图1-2

将断点设置在程序的主要部分运行以前,并查看数据区的内容。如图1-3所示。

-gOb

AX=14E8BX=0000CX=00AFDX=0000SP=FFFCBP=0000SI=0000DI=0000

DS=14E8ES=14E8SS=14E8CS=14F0IP=000BNVUPEIPLZRNAPENC

14F0:000BB8ED14MOVAX,14ED

-dO

14E8:00004D6F766520746865-20637572736F7220Movethecursor

14E8:00106261636B77617264-2E4D6F7665207468backward.Moveth

14E8:00206520637572736F72-206261636B776172ecursorbackwar

14E8:0030642E4D617463682E-0D0A244E6F204D61d.Match...$NoMa

14E8:00407463682E0D0A2400-0000000000000000tch...$

14E8:00500000000000000000-0000000000000000

14E8:00600000000000000000-0000000000000000

I4E8:OO7O00000000()0000000-0000000000000000

图1-3

用e命令修改数据区的字符串,操作如下:

-e29

I4E81002962.6661.6f63.726B.7777.6161.7272.64

6

14E8:003064.2e2E.20

再次用d命令查看修改结果。

-dO

14E8:00004D6F766520746865-20637572736F7220Movethecursor

14E8:00106261636B77617264-2E4D6F7665207468backward.Moveth

14E8:00206520637572736F72-20666F7277617264ecursorforward

14E8:00302E204D617463682E-0D0A244E6F204D61.Match...$NoMa

14E8:00407463682E0DOA2400-0000000000000000tch...$

14E8:00500000000000000000-0000000000000000

14E8:00600000000000000000-0000000000000000

14E8:00700000000000000000-0000000000000000

图1-4

用g命令运行程序,结果为:

-g

NoMatch

用q命令退出debug.

-q

至此,程序已调试完毕。为了进一步说明debug命令的使用方法,我们再次重复上述程序的调

试过程,只是使用e、a、f来修改数据区的内容而已。必须注意,由于在用debug调试程序时,只能

修改当时有关的内存单元内容,因此重新用debug装入执行程序时,仍是原来在磁盘文件中的内容。

操作如下:

命令提示符:debuga1.exe

-gOb

AX=14E8BX=0000CX=00AFDX=0000SP=FFFCBP=0000SI=0000DI=0000

DS=14E8ES=14E8SS=14E8CS=14F0IP=OOOBNVUPEIPLZRNAPENC

14F0:000BB8ED14MOVAXJ4ED

-dO

14E8:00004D6F766520746865-20637572736F7220Movethecursor

14E8:00106261636B77617264-2E4D6F7665207468backward.Moveth

14E8:00206520637572736F72-206261636B776172ecursorbackwar

14E8:0030642E4D617463682E-0D0A244E6F204D61d.Match...$NoMa

14E8:00407463682E0DOA2400-000000()000000000

14E8:00500000000000000000-0000000000000000

14E8:006000()0000000000000-0000()00000000000

14E8:00700000000000000000-0000000000000000

-e29Yorward/20

-dO

14E8:00004D6F766520746865-20637572736F7220Movethecursor

14E8:00106261636B77617264-2E4D6F7665207468backward.Moveth

14E8:00206520637572736F72-20666F7277617264ecursorforward

14E8:00302E204D617463682E-0DOA244E6F204D61.Match...$NoMa

14E8:00407463682EODOA2400-0000000000000000

14E8:00500000000000000000-0000000000000000

14E8:006000000000()00000()0-0000000000000000

7

14E8:00700000000000000000-0000000000000000

图1-5

可见这种e命令方式避免使用ASCII码进入,对用户是比较方便的。其中最后一个20是空格争

的ASCH码,以补足原来的字节数。

也可使用a命令把数据区恢复原状,具体如下:

-d0

14E8:00004D6F766520746865-20637572736F7220Movethecursor

14E8:00106261636B77617264-2E4D6F7665207468backward.Moveth

14E8:00206520637572736F72-20666F7277617264ecursorforward

14E8:00302E204D617463682E-0DOA244E6F204D61.Match...$NoMa

14E8:00407463682E0D0A2400-0000000000000000

14E8:005000000000()00000()0-0000000000000000

14E8:00600000000000000000-0000000000000000

14E8:00700000000000000000-0000000000000000

-al4e8:29

14E8:0029db'backward/

14E8:0032

-dO

14E8:00004D6F766520746865-20637572736F7220Movethecursor

14E8:00106261636B77617264-2E4D6F7665207468backward.Moveth

14E8:00206520637572736F72-206261636B776172ecursorbackwar

14E8:0030642E4D617463682E-0D0A244E6F204D61d.Match...$NoMa

14E8:00407463682E0D0A2400-0000000000000000

14E8:00500000000000000000-0000000000000000

14E8:00600000000000000000-0000000000000000

14E8:00700000000000000000-0000000000000000

图1-6

由于a是汇编命令,因此信息是用汇编格式进入的。如果修改的是程序中的语句,方法也是相

同的,下面我们还会看到这类的操作。

为了进一步说明程序的调试过程,现假设程序编制错误:在源文件中把jzmatch改为jnz

match。该程序经过汇编、连接后,进入debug调试如下:

-g

Nomatch!

结果是错误的(因为源文件中两个字符串是相同的)。为检查程序的错误,将断点设在比较串之

前。

-gl9

AX=14DFBX=0000CX=0019DX=0000SP=FFFCBP=0000SI=0000DI=0019

DS=14DFES=14DFSS=14DFCS=14E4IP=0019NVUPEIPLNZNAPONC

14E4:0019A6CMPSB

用t命令再执行一条指令以观察ZF标志的状况。

AX=14DFBX=0000CX=0019DX=0000SP=FFFCBP=0000SI=0001DI=001A

DS=14DFES=14DFSS=14DFCS=14E4IP=001ANVUPEIPLZRNAPENC

14E4:00IA7506JNZ0022

8

此时零标志为ZR,即ZF=1,即表示比较结果相等,说明比较结果是正确的。现在可用t令再执

行一条指令以观察指令的转向。

AX=14DFBX=OOOOCX=00I9DX=OOOOSP=FFFCBP=OOOOS1=0001DI=001A

DS=14DFES=14DFSS=14DFCS=14E4IP=001CNVUPEIPLZRNAPENC

14E4:001C8D163B00LEADX,[003BJDS:003B=6F4E

图1-7

为查到003B单元的内容,可查数据区如下:

-d0

14DF:00004D6F766520746865-20637572736F7220Movethecursor

14DF:00106261636B77617264-2E4D6F7665207468backward.Moveth

14DF:00206520637572736F72-206261636B776172ecursorbackwar

14DF:0030642E4D617463682E-0D0A244E6F204D61d.Match...$NoMa

I4DF:OO4O7463682E0D0A2400-0000000000000000tch...$

14DF:00501EB8000050B8DF14-8ED88ECO8D360000P..……6..

14DF:00608D3E1900FCB91900-F3A675068D163B00.>u...;.

14DF:0070EB048D163200B409-CD21CBEB78803EA4

图1-8

可见003B单元的内容为4E,即N的ASCH码,后面跟的是Nomatch!,这说明jnz指令使用错

误,应改为JZMATCH.可用a命令修改,并用u命令检查修改结果。运行结果说明程序修改正确。

-al9

14E4:0019jz0022

14E4:001B

-u0

14E4:0000IEPUSHDS

14E4:0001B80000MOVAX,0000

14E4:000450PUSHAX

14E4:0005B8DF14MOVAXJ4DF

14E4:00088ED8MOVDS,AX

14E4:000A8EC0MOVES,AX

14E4:000C8D360000LEASI,[0000]

14E4:00108D3E1900LEADIJOO19]

14E4:0014FCCLD

I4E4:OO15B91900MOVCX,0019

14E4:0018F3REPZ

14E4:00197407JZ0022

14E4:001B06PUSHES

14E4:001C8D163B00LEADX,[003B]

-rip

IP001C

:0

-g

Match.

图1-9

9

在这里应该注意,在使用a命令修改数据区时,必须给出数据段的地址,而在修改程序区时,

由于a命令的缺省段为代码段,所以直接给出偏移地址就可以了。

在调试过程中,也可以用t命令逐条跟踪程序的执行。下面列出断点停在0b后,用f命令修改

数据区中字符串的内容,然后用t命令逐条执行指令的情况。

首先用u命令查看数据段的段地址。

-u

14E4:0000IEPUSHDS

14E4:0001B80000MOVAX,0000

14E4:000450PUSHAXJ段地址

14E4:0005B8DF14MOVAXJ4DF

14E4:00088ED8MOVDS,AX

14E4:000A8EC0MOVES,AX

14E4:000C8D360000LEASIJOOOO]

14E4:00108D3E1900LEADIJ0019]

14E4:0014FCCLD

14E4:0015B91900MOVCX,0019

14E4:0018F3REPZ

I4E4:OO19A6CMPSB

14E4:001A7506JNZ0022

14E4:001C8D163B00LEADX,[003B]

图1-10

用f命令修改数据区中字符串的内容。其中14df:29为字符串的起始地址,1(字母L)9表示需要

修改的长度为9个字节。

-fl4df:2919'forward.2。

查看修改后的内容:

-dl4df:0

14DF:00004D6F766520746865-20637572736F7220Movethecursor

I4DF:OOIO6261636B77617264-2E4D6F7665207468backward.Moveth

14DF:00206520637572736F72-20666F7277617264ecursorforward

I4DF:OO3O2E204D617463682E-0D0A244E6F204D61.Match...$NoMa

14DF:00407463682E0D0A2400-0000000000000000tch...$

14DF:0050IEB8000050B8DF14-8ED88ECO8D360()00….P.…….6..

用t命令逐条跟踪程序的执行。

AX=0000BX=0000CX=007BDX=0000SP=FFFEBP=0000SI=0000DI=0000

DS=14CFES=14CFSS=14DFCS=I4E4IP=0001NVUPEIPLNZNAPONC

14E4:0001B80000MOVAX,0000

-t

AX=0000BX=0000CX=007BDX=0000SP二FFFEBP=0000SI=0000DI=0000

DS=14CFES=14CFSS=14DFCS=14E4IP=0004NVUPEIPLNZNAPONC

14E4:000450PUSHAX

AX=0000BX=0000CX=007BDX=0000SP=FFFCBP=0000SI=0000DI=0000

DS=14CFES=14CFSS=14DFCS=14E4IP=0005NVUPEIPLNZNAPONC

10

14E4:0005B8DF14MOVAXJ4DF

-t

AX=14DFBX=0000CX=007BDX=0000SP=FFFCBP=OOOOSI=0000DI=0000

DS=14CFES=14CFSS=14DFCS=I4E4IP=0008NVUPEIPLNZNAPONC

14E4:00088ED8MOVDS,AX

-t

AX=14DFBX=0000CX=007BDX=0000SP=FFFCBP=0000SI=0000DI=0000

DS=14DFES=14CFSS=14DFCS=14E4IP=000ANVUPEIPLNZNAPONC

14E4:000A8EC0MOVES,AX

-t

AX=14DFBX=0000CX=007BDX=0000SP=FFFCBP=0000SI=0000DI=0000

DS=14DFES=14DFSS=14DFCS=14E4IP=000CNVUPEIPLNZNAPONC

14E4:000C8D360000LEASI,[0000]DS:0000=6F4D

-t

AX=14DFBX=0000CX=007BDX=0000SP=FFFCBP=0000SI=0000DI=0000

DS=14DFES=14DFSS=14DFCS=14E4IP=0010NVUPEIPLNZNAPONC

14E4:00108D3E1900LEADI,[0019]DS:0019=6F4D

-t

AX=14DFBX=0000CX=007BDX=0000SP=FFFCBP=0000SI=0000DI=0019

DS=14DFES=14DFSS=14DFCS=14E4IP=0014NVUPEIPLNZNAPONC

14E4:0014FCCLD

-t

AX=14DFBX=0000CX=007BDX=0000SP=FFFCBP=0000SI=0000DI=0019

DS=14DFES=14DFSS=14DFCS=14E4IP=0015NVUPEIPLNZNAPONC

14E4:0015B91900MOVCX,0019

-t

AX=14DFBX=0000CX=0019DX=0000SP=FFFCBP=0000SI=0000DI=0019

DS=14DFES=14DFSS=14DFCS=14E4IP=0018NVUPEIPLNZNAPONC

14E4:0018F3REPZ

I4E4:OO19A6CMPSB

-t

AX=I4DFBX=000()CX=0018DX=0000SP=FFFCBP=000()SI=0001DI=001A

DS=14DFES=14DFSS=14DFCS=14E4IP=0018NVUPEIPLNZNAPONC

14E4:0018F3REPZ

14E4:0019A6CMPSB

-t

AX=14DFBX=0000CX=0017DX=0000SP=FFFCBP=0000SI=0002DI=001B

DS=14DFES=14DFSS=14DFCS=14E4IP=0018NVUPEIPLNZNAPONC

14E4:0018F3REPZ

14E4:0019A6CMPSB

-t

AX=14DFBX=0000CX=0016DX=0000SP=FFFCBP=0000SI=0003DI=001C

DS=14DFES=14DFSS=14DFCS=14E4IP=0018NVUPEIPLNZNAPONC

I4E4:OO18F3REPZ

11

14E4:0019A6CMPSB

-t

AX=14DFBX=OOOOCX=0015DX=OOOOSP=FFFCBP=OOOOSI=0004DI=001D

DS=14DFES=14DFSS=14DFCS=14E4IP=0018NVUPEIPLNZNAPONC

14E4:0018F3REPZ

14E4:0019A6CMPSB

-t

AX=14DFBX=OOOOCX=0014DX=0000SP=FFFCBP=0000SI=0005DI=001E

DS=14DFES=14DFSS=14DFCS=14E4IP=0018NVUPEIPLNZNAPONC

14E4:0018F3REPZ

14E4:0019A6CMPSB

-t

AX=14DFBX=OOOOCX=0013DX=0000SP=FFFCBP=0000SI=0006DI=001F

DS=14DFES=14DFSS=14DFCS=14E4IP=0018NVUPEIPLNZNAPONC

14E4:0018F3REPZ

14E4:OOI9A6CMPSB

-t

AX=14DFBX=OOOOCX=00I2DX=0000SP=FFFCBP=0000SI=0007DI=0020

DS=14DFES=14DFSS=14DFCS=14E4IP=0018NVUPEIPLNZNAPONC

14E4:0018F3REPZ

14E4:0019A6CMPSB

-t

AX=14DFBX=OOOOCX=0011DX=0000SP=FFFCBP=0000SI=0008DI=0021

DS=14DFES=14DFSS=14DFCS=14E4IP=0018NVUPEIPLNZNAPONC

14E4:0018F3REPZ

14E4:0019A6CMPSB

-t

AX=14DFBX=OOOOCX=00I0DX=0000SP=FFFCBP=0000SI=0009DI=0022

DS=14DFES=14DFSS=14DFCS=14E4IP=0018NVUPEIPLNZNAPONC

I4E4:OO18F3REPZ

14E4:0019A6CMPSB

-t

AX=14DFBX=OOOOCX=000FDX=0000SP=FFFCBP=0000SI=000ADI=0023

DS=14DFES=14DFSS=14DFCS=14E4IP=0018NVUPEIPLNZNAPONC

14E4:0018F3REPZ

14E4:OOI9A6CMPSB

-t

AX=14DFBX=OOOOCX=000EDX=0000SP=FFFCBP=0000SI=000BDI=0024

DS=14DFES=14DFSS=14DFCS=14E4IP=0018NVUPEIPLNZNAPONC

14E4:0018F3REPZ

14E4:0019A6CMPSB

-t

AX=14DFBX=OOOOCX=000DDX=0000SP=FFFCBP=0000SI=000CDI=0025

DS=14DFES=14DFSS=14DFCS=14E4IP=00I8NVUPEIPLNZNAPONC

12

14E4:0018F3REPZ

14E4:0019A6CMPSB

-t

AX=14DFBX=OOOOCX=OOOCDX=OOOOSP=FFFCBP=OOOOSI=OOODDI=0026

DS=14DFES=14DFSS=14DFCS=14E4IP=0018NVUPEIPLNZNAPONC

14E4:0018F3REPZ

14E4:0019A6CMPSB

-t

AX=14DFBX=0000CX=000BDX=0000SP=FFFCBP=0000SI=000EDI=0027

DS=14DFES=14DFSS=14DFCS=14E4IP=0018NVUPEIPLNZNAPONC

14E4:0018F3REPZ

I4E4:OO19A6CMPSB

-t

AX=14DFBX=0000CX=000ADX=0000SP=FFFCBP=0000SI=000FDI=0028

DS=14DFES=14DFSS=14DFCS=14E4IP=0018NVUPEIPLNZNAPONC

I4E4:OO18F3REPZ

14E4:0019A6CMPSB

-t

AX=14DFBX=0000CX=0009DX=0000SP=FFFCBP=0000SI=0010DI=0029

DS=14DFES=14DFSS=14DFCS=14E4IP=0018NVUPEIPLNZNAPONC

14E4:0018F3REPZ

14E4:0019A6CMPSB

-t

AX=14DFBX=0000CX=0008DX=0000SP=FFFCBP=0000SI=0011DI=002A

DS=14DFES=14DFSS=14DFCS=14E4IP=001ANVUPEINGNZACPECY

I4E4:OO1A75O6JNZ0022

-t

AX=14DFBX=0000CX=0008DX=0000SP=FFFCBP=0000S1=0011DI=002A

DS=14DFES=14DFSS=14DFCS=14E4IP=0022NVUPEINGNZACPECY

14E4:00228D163200LEADX,[0032JDS:0032=6I4D

-t

AX=I4DFBX=0000CX=0008DX=0032SP=FFFCBP=000()S1=0011DI=002A

DS=14DFES=14DFSS=14DFCS=14E4IP=0026NVUPEINGNZACPECY

14E4:0026B409MOVAH,09

-t

AX=09DFBX=0000CX=0008DX=0032SP=FFFCBP=0000SI=0011DI=002A

DS=14DFES=14DFSS=14DFCS=14E4IP=0028NVUPEINGNZACPECY

14E4:0028CD21INT21

-g

Match.

Programterminatednormally

-q

图1-11

从这一过程可以清楚地看出每次比较的结果,一旦比较不相等,则立即从串指令退出,执行下

13

面的指令。应该注意,如果遇到系统功能调用,则不能再使用t命令跟踪,而应该使用断点停在功

能调用完成之后,然后再接着跟踪。本例中,由于不需要再跟踪,所以直接用g命令运行到程序结

束。

前面己经提到,debug调试期间所修改的数据段或代码段的内容只是修改了内存中的内容,而

磁盘文件中的内容并未修改。如果你的执行文件是.com,则可在debug中用n、w命令直接把经修改

后的内存单元中的内容存入磁盘,但是.exe文件则不允许这样做。因此,应该重新进入编辑程序,

根据调试结果把源文件修改正确,经汇编、连接、执行检查正确后再保存下来。

6.设堆栈指针SP=2000H,AX=3000H,BX=5000H;请仿照例程的格式编一程序段将AX和BX

的内容进行交换。请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行汇编

与调试。

四.实验报告:

写出在DEBUG状态下编写、运行步骤6所要求的程序过程(要求包含源程序)以及调试所中

遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。

DATASEGMENT

XDW2000H

YDW3000H

ZDW5000H

DATAENDS

STACKSEGMENTSTACK

DB100DUP(?)

STACKENDS

PROGRAMSEGMENT

ASSUMECS:PROGRAM,DS:DATA

START:

MOVAX,3000H

MOVBX,5000H

MOVDX,DATA

MOVDS,DX

MOVSI,OFFSETX

MOVSP,[SI]

MOVDX,DATA

MOVDS,DX

MOVSI,OFFSETY

MOVDX,[SI]

PUSHDX

MOVDX,DATA

MOVDS,DX

MOVSI,OFFSETZ

MOVDX,[SI]

PUSHDX

POPAX

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论