《汇编语言》实验指导书Word文档格式.docx

上传人:b****6 文档编号:21696451 上传时间:2023-01-31 格式:DOCX 页数:43 大小:74.92KB
下载 相关 举报
《汇编语言》实验指导书Word文档格式.docx_第1页
第1页 / 共43页
《汇编语言》实验指导书Word文档格式.docx_第2页
第2页 / 共43页
《汇编语言》实验指导书Word文档格式.docx_第3页
第3页 / 共43页
《汇编语言》实验指导书Word文档格式.docx_第4页
第4页 / 共43页
《汇编语言》实验指导书Word文档格式.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

《汇编语言》实验指导书Word文档格式.docx

《《汇编语言》实验指导书Word文档格式.docx》由会员分享,可在线阅读,更多相关《《汇编语言》实验指导书Word文档格式.docx(43页珍藏版)》请在冰豆网上搜索。

《汇编语言》实验指导书Word文档格式.docx

例如:

-E100

184E:

010089,78

其中,184E时数据段的段地址,0100是要修改的单元的偏移地址,89为该单元的值,78为程序员键入的值。

结果0100单元的值由89H改变为78H。

常用于在调试程序的过程中改变变量的初始值。

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

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

前者为显示从指定地址开始的一段存储单元的值;

后者为显示指定范围内的存储单元的值。

-D200;

显示从DS:

200单元开始的各单元的值

-D200L10;

显示从DS:

200单元开始的10个字节单元的值。

常用于在调试过程中检查变量的值。

(5)单步执行命令T,格式为:

-T[=地址]

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

若未指定地址,则执行当前指令的下一条指令。

(6)反汇编命令U,格式为:

-U[地址]或-U范围

功能:

从制定地址开始,反汇编32个字节,或对指定范围内的主存内容进行反汇编。

若没有指定地址,则接着上一个U命令的最后一个单元开始;

若还没有使用过U命令,则从当前CS:

IP开始。

-U100,106

1343:

0100B80302MOVAX,0203

0103BB0540MOVBX,4005

010601D8ADDAX,BX

其中,屏幕最左边是主存逻辑地址(段地址:

偏移地址),中间是该指令的机器代码,右边是对应指令的汇编语句格式。

(7)运行命令G,格式为:

-G[=起始地址][断点地址1,断点地址2,……,断点地址10]

从等号后的起始地址开始运行,直到遇到断点或程序正常结束。

-G=100106

则程序执行从100开始的程序段,到断点106停止。

此时指令ADDAX,BX并未执行。

二、实验目的及要求

1、编语言调试环境Debug的使用,重点掌握常用命令(ARDET)的使用,其他指令在以后的学习中逐步掌握。

2、利用Debug命令,调试采用不同寻址方式的指令的执行结果,从实践中加深对寻址方式和MOV指令的理解。

三、实验内容

1、Debug程序的调入和退出

2、Debug常用调试命令的使用

3、MOV指令、XCHG指令、XLAT指令的调试

四、实验步骤

说明:

首先输入以下程序段,然后单步执行并查看结果;

改变寄存器AX的初始值后再运行,并查看结果。

带下划线的部分为程序员输入的内容。

在DEBUG环境下,所有的数据均以十六进制输入和显示。

-A

137B:

0100movax,20

0103movbx,ax

0105addax,bx

0107mov[2000],ax

010A

-T=0100

AX=0020BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000

DS=137BES=137BSS=137BCS=137BIP=0103NVUPEIPLNZNAPONC

010389C3MOVBX,AX

-T=0103

AX=0020BX=0020CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000

DS=137BES=137BSS=137BCS=137BIP=0105NVUPEIPLNZNAPONC

010501D8ADDAX,BX

-T

AX=0040BX=0020CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000

DS=137BES=137BSS=137BCS=137BIP=0107NVUPEIPLNZNAPONC

0107A30020MOV[2000],AX

DS:

2000=000

DS=137BES=137BSS=137BCS=137BIP=010ANVUPEIPLNZNAPONC

010A0000ADD[BX+SI],ALDS:

0020=FF

-D2000L2

20004000

.

修改0100处的指令movax,20将AX的初始值改为10,并重新运行

-A0100

0100movax,10

0103

最后一条指令执行的结果如下:

AX=0020BX=0010CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000

0010=DF

查看2000单元的值为0020H

-D2000l2

20002000

修改2000单元的值,由20h改为30h并重新显示

-E2000

200020.30

20003000

五、拓展题

MOV、XCHG、XLAT指令的调试。

要求:

用汇编命令A输入以下源程序段,用T命令单步执行,查看执行结果:

寄存器或存储单元的值。

提示:

在DEBUG环境下输入程序段时要省掉立即数后面的字符“H”

1、MOV指令的调试

程序段:

MOVAL,55H

MOVAH,AL

MOVBX,1000H

MOVBYTEPTR[BX],66H

MOVWORDPTR[BX+2],77H

MOV[BX+4],AX

2、XCHG指令的调试

MOVAX,0203H

MOVBX,0405H

XCHGAX,BX

XCHGBL,BH

3、XLAT指令的调试

(1)用E命令从DS:

200地址开始输入数据10H、20H、30H、40H、50H

(2)用A命令输入以下程序段:

MOVBX,200;

将数据的首地址送给BX

MOVAL,4用MOV;

将要查找的数据的偏移地址送给AL

XLAT

;

查看结果寄存器AL中的值,以及从DS:

200开始的存储单元的值。

六、实验报告

写出在DEBUG状态下编写、运行程序段的过程以及调试所中遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。

实验二基本汇编指令的使用

一、知识点

1、最常用的传送指令MOV

可以将立即数/内存单元的值/寄存器的值送给寄存器,或将立即数/寄存器的值送给内存单元,但不允许两个内存单元之间直接传送。

2、常用算术运算指令ADD/ADC/INC、SUB/SBB/DEC/CMP/NEG

两个单字节/单字之间的加法用ADD指令、减法用SUB指令;

多字节/多字之间的加/减,除最低字节/最低字用ADD/SUB指令外,其余字节/字之间的加/减都要用包含进位/借位的ADC/SBB指令。

INC和DEC指令常用于修改计数器或修改指针,常用与循环处理一批数据。

CMP指令常用于比较两个数的关系,为下一步的条件转移做准备(后跟条件转移指令)。

3、常用逻辑运算指令AND/OR/NOT/XOR/TEST

AND指令常用于给一个数据的某几位清零;

OR指令常用于给一个数据的某几位置1;

XOR指令常用于将一个数据某几位翻转;

NOT指令常用于将一个数据所有位取反;

TEST指令常用于测试一各数据的某一位或某几位的值,后跟条件转移指令。

4、常用移位指令SHL/SHR/SAR/ROL/ROR/RCL/RCR

SHL和SAL功能相同,都是将操作数左移一位或几位,移出的空位补0;

SHR和SAR功能不同,虽都是将操作数右移一位或几位,但左边移出的空位分别补0和1(SHR要补0,SAR补1)。

二、实验目的及要求

1、继续熟悉汇编语言调试环境Debug的使用,掌握常用调试命令。

2、用基本指令编写的程序段,并在Debug环境中调试,从实践中加深对基本汇编语言指令的执行过程的理解。

3、实验前要做好充分准备,包括汇编程序段清单、调试步骤、调试方法,以及对程序结果的分析等。

三、实验内容

1、单步调试以下程序段,给出每条指令执行后AL的值,以及CF、ZF、SF、OF的状态。

MOVAL,89H

ADDAL,AL

ADDAL,9DH

CMPAL,0BCH

SUBAL,AL

DECAL

INCAL

2、编写程序段,分别完成11223344H与55667788H的加/减计算,并调试、观察结果。

3、单步调试以下程序段,给出每条指令执行后AL的值,以及CF、ZF、SF、OF的状态。

MOVAX,1470H

MOVBX,3060H

ANDAX,BX

ORAX,BX

XORAX,AX

NOTAX

TESTAX,0F0F0H

4、设(AX)=1234H,写出执行下列每条指令后AX寄存器的内容,并观察CF的变化。

SHLAX,1

MOVCL,2

SHLAX,CL

SHRAX,1

ROLAX,1

MOVCL,3

ROLAX,CL

RCRAX,1

RCRAX,CL

四、实验步骤

1、利用DEBUG的A命令输入待调试的程序段。

2、利用单步执行命令T逐条执行指令,观察寄存器及相关状态位的值。

以实验内容2中的加法为例,实现加法运算:

注:

下划线部分为程序员输入的内容。

(1)-A

1373:

0100MOVAX,3344;

DX.AX<

-11223344H

0103MOVDX,1122

0106ADDAX,7788;

DX.AX+55667788H->

DX.AX

0109ADCDX,5566

010D

-T=100

AX=3344BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000

DS=1373ES=1373SS=1373CS=1373IP=0103NVUPEIPLNZNAPONC

0103BA2211MOVDX,1122

AX=3344BX=0000CX=0000DX=1122SP=FFEEBP=0000SI=0000DI=0000

DS=1373ES=1373SS=1373CS=1373IP=0106NVUPEIPLNZNAPONC

0106058877ADDAX,7788

AX=AACCBX=0000CX=0000DX=1122SP=FFEEBP=0000SI=0000DI=0000

DS=1373ES=1373SS=1373CS=1373IP=0109OVUPEINGNZNAPENC

010981D26655ADCDX,5566

AX=AACCBX=0000CX=0000DX=6688SP=FFEEBP=0000SI=0000DI=0000

DS=1373ES=1373SS=1373CS=1373IP=010DNVUPEIPLNZNAPENC

010D0000ADD[BX+SI],ALDS:

结果:

DX.AX=6688AACCH

五、拓展题:

1、编写程序段:

将DX.AX中的双字右移一位。

2、编写程序段:

将AX寄存器的最低4位置1,最高3位清0,第7、8、9位取反,其余位不变。

设AX中原来的值为0AAH。

3、设AX=2AH,BX=30H,编写程序段计算:

AX/BX,并将结果送BX.CX。

六、实验报告:

1、写出源程序段清单、程序说明、执行结果。

2、调试说明。

包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。

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

一.知识点

1、汇编语言源程序的格式

完整的汇编语言源程序由段组成,即代码段、数据段、附加段和堆栈段。

其中,需要独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点。

例如,输出一个字符串的源程序:

.modelsmall;

定义程序的存储模式(小型程序一般采用小模式)

.stack;

定义堆栈段

.data;

定义数据段

stringdb‘Anexample.’,0ah,0dh,’$’;

在数据段中定义要显示的字符串

.code;

定义代码段

.startup;

程序的起始点

leadx,string;

将字符串的起始地址送dx,即设置入口参数

movah,09h;

设置输出字符串的功能调用号

int21h;

功能调用:

显示

.exit0;

程序结束点,返回dos

end;

汇编结束

这是简化段定义的程序格式

2、汇编语言程序的开发过程

一般步骤:

编辑、编译、连接、调试运行

(1)源程序的编辑

源程序文件可以利用任一文本编辑器进行编辑,通常我们用“记事本”。

源程序文件保存时,一般以.asm为文件的后缀名。

具体实现:

如图

在win2000环境下,在“另存为”界面中输入文件全名(example.asm),并且将“保存类型“选择为“所有文件”。

也可以使用.txt后缀名,不过在汇编时要写源文件的全名,否则系统默认的为.asm。

(2)源程序的汇编、连接

汇编是将源程序翻译成由机器代码组成的目标模块文件的过程。

连接程序将一个或多个目标文件和库文件合成一个可执行文件。

MASM6.X提供的ML.EXE可以实现:

先汇编,若没有错误则自动调用LINK.EXE连接程序进行编译;

若有错,则提示错误信息,可利用列表文件查看错误所在位置,并改正错误,重新汇编和连接。

例如,设上面的例题程序文件为EXAMPLE.ASM,并且该文件与ML.EXE等文件都在同一目录(设该目录为当前目录)下,则汇编、连接的命令为:

>

MLEXAMPLE.ASM

运行结果见实验步骤2。

产生:

EXAMPLE.OBJ和EXAMPLE.EXE文件

特别说明:

ML允许汇编和连接多个程序形成一个可执行文件,而且还可以带参数,格式:

ML[/参数选项]文件列表

常用参数选项有:

/c——只汇编源程序,不进行自动连接(注意用小写字母c)

/Fl文件名——创建一个汇编列表文件(扩展名LST),用于查找错误。

Sg——在省城的列表文件中,列出由汇编程序产生的指令

若将字符串的引号改为中文的“‘”后重新用下面命令汇编连接,则结果见实验步骤3。

ML/FlEXAMPLE.ASM

(3)可执行程序的调试

在操作系统提示符下直接输入柯执行文件名即可运行:

EXAMPLE

当出现运行错误时,通常用DEBUG进行调试:

DEBUGEXAMPLE.EXE

然后采用U命令进行反汇编,用T或G命令运行并观察,找出错误所在。

二.实验目的及要求

1.掌握数据定义、段定义的方法

2.熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。

3、熟悉常见Jcc指令、loop指令的使用。

三.实验内容

编程实现:

1、求数组array中的20个字元素的和,并存入变量total中。

其中,数组元素在定义数组时以初值的形式给出。

2、给DX送一个初值,然后判断:

若DX的高4位全为0,则使AX=0;

否则使AX=-1。

3、定义一个字符串string,包含若干字符并且以’$’结尾,用程序统计字符的个数。

以实验内容1为例,介绍实验步骤:

1、编辑源程序:

在记事本中输入如下程序,并存在E:

\MASM6\BIN\EXAM1.ASM中。

2、汇编、编译:

情况1:

没有错误

mlexample.asm

ObjectModules[.obj]:

example.obj

RunFile[example.exe]:

"

example.exe"

ListFile[nul.map]:

NUL

Libraries[.lib]:

DefinitionsFile[nul.def]:

情况2:

源程序中有错误,比如将字符串的引号改为中文的“‘”后重新用下面命令汇编连接。

Microsoft(R)MacroAssemblerVersion6.11

Copyright(C)MicrosoftCorp1981-1993.Allrightsreserved.

Assembling:

example.asm

example.asm(5):

errorA2044:

invalidcharacterinfile

example.asm(8):

errorA2006:

undefinedsymbol:

string

则给出2条错误信息提示,并产生错误列表文件EXAMPLE.LST

在记事本中打开该文件,内容如下:

;

输出一个字符串的源程序:

.modelsmall

.stack

.data

stringdb’Anexample.'

0ah,0dh,'

$'

.code;

.startup;

leadx,string

movah,09h

int21h;

.exit0;

end;

特别提示:

两处错误明显的标在源程序中。

实际上,只有一处错误,后面的错误是由于前面的错误引起的,所以改正错误时要从前往后逐个修改,并且每改完一处就重新存盘、汇编,以提高调试效率。

3、调试:

C:

\masm>

debugexample.exe

-u;

反汇编

1395:

0000BA9713MOVDX,1397

00038EDAMOVDS,DX

00058CD3MOVBX,SS

00072BDASUBBX,DX

0009D1E3SHLBX,1

000BD1E3SHLBX,1

000DD1E3SHLBX,1

000FD1E3SHLBX,1

0011FACLI

00128ED2MOVSS,DX

001403E3ADDSP,BX

0016FBSTI

00178D160400LEADX,[0004];

源程序中的第一条指令

001BB409MOVAH,09

001DCD21INT21

001FB8004CMOVAX,4C00;

对应.exit0指令

-u

0022CD21INT21

……

此时可用debug命令调试该程序了。

4、关于变量名对应的偏移地址

源程序的第一条指令是:

leadx,string

汇编后对应的指令是:

LEADX,[0004]

因此,可看出变量string所对应的偏移地址是:

0004h

如果要查看从string开始的字符串的内容,可用如下命令:

-D04Lc

即查看从04H开始的12个单元的内容。

五、拓展题

1、有两个64位数值,按“小端方式“存放在两个缓冲区buffer1和buffer2种,计算buffer1-buffer2,并将结果存放到变量result中。

2、将DX.AX中的双字右移4位。

六、实验报告

1、写出源程序清单、程序说明、执行结果。

实验四系统功能调用程序的调试与运行

1、常用字符/字符串输入/出系统功能调用

(1)输出一个字符:

DOS功能调用INT21H的02号功能调用

使用格式:

MOVAH,02H;

设置功能调用号AH<

-02H

MOVDL

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1