工学汇编程序实验指导140.docx

上传人:b****5 文档编号:6432288 上传时间:2023-01-06 格式:DOCX 页数:25 大小:52.35KB
下载 相关 举报
工学汇编程序实验指导140.docx_第1页
第1页 / 共25页
工学汇编程序实验指导140.docx_第2页
第2页 / 共25页
工学汇编程序实验指导140.docx_第3页
第3页 / 共25页
工学汇编程序实验指导140.docx_第4页
第4页 / 共25页
工学汇编程序实验指导140.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

工学汇编程序实验指导140.docx

《工学汇编程序实验指导140.docx》由会员分享,可在线阅读,更多相关《工学汇编程序实验指导140.docx(25页珍藏版)》请在冰豆网上搜索。

工学汇编程序实验指导140.docx

工学汇编程序实验指导140

组成原理与汇编

8088/8086汇编语言实验指导

仰恩大学计算机学院电子工程系

一、 实验目的

1.初步了解8086/8088汇编程序的基本结构,利用WindowsXP附件的写字板编辑简单的

汇编语言源程序,形成扩展名为.ASM的文本文件格式(即汇编源程序)。

2.学习宏汇编程序MASM.EXE,连接程序LINK.EXE,调试程序DEBUG.EXE的使用。

3.在微机上、在MasmforWindows集成实验环境下,运行并调试8086/8088汇编源程序。

二、上机前的准备

1.PC机的操作系统可以是Windoes98,也可以是WindowsXP。

2.硬盘上安装MasmforWindows集成实验环境软件,上面应有MASM、LINK、DEBUG等文件,

还应有足够的空间以容纳你的汇编源程序。

3.学习以上三个文件的使用方法,准备好上机的源程序并认真去读懂它。

三、用“写字板”编辑汇编的源程序

1.用“写字板”编辑好源文件LH,LH假设为李华同学的源程序文件名(下同),则文件名是

LH.ASM,文件的扩展名一定要用.ASM。

然后保存在C:

盘的目录下。

2.编辑你的源程序时,注意不要有空行、光标也不要超过最后一行。

四、MASM.EXE编译程序的运行

在MasmforWindows集成实验环境中打开LH.ASM文件,然后在点击运行项,在其下拉菜单中点击编译成目标文件(OBJ),如果你输入的文件完全正确,将在下面的栏中显示:

编译源程序C:

\>LH.ASM

编译成功

汇编的目的是要形成目标文件,即机器代码文件,也就是LH.OBJ文件。

该文件不是文本文件,因此用编辑软件是看不到的,看到的只是一些乱码。

五、LINK.EXE生成可执行文件的运行

在MasmforWindows集成实验环境中点击运行项,在其下拉菜单中点击生成可执行文件(EXE),如果你输入的文件完全正确,将在下面的栏中显示:

编译源程序C:

\>LH.ASM

生成EXE文件成功

对LH.OBJ文件连接的主要目的是要生成LH.EXE文件。

扩展名为.EXE文件是在DOS状态下的可执行文件。

你只要键入LH.EXE文件的文件名LH就可以运行文件。

六、DEBUG.EXE调试程序的运行

DEBUG是调试程序,它是对EXE文件进行调试。

在MasmforWindows集成实验环境中点击运行项,在其下拉菜单中点击DEBUG调试,在屏幕上出现如下信息:

-

上面的‘-’是DEBUG状态下的提示符,表示目前系统在DEBUG的控制之下。

我们主要学习

DEBUG的Q,R,U,G,D,E,F,T命令。

这些命令的使用方法是在‘-’提示符后键入相应

命令的字母,如:

-Q

回车后就立即返回DOS状态。

上面各命令分别解释如下:

1.-Q表示退出DEBUG状态。

2.-R显示CPU中除FLAG寄存器外的14个寄存器的内容,对于FLAG寄存器只显示它的OF,

DF,IF,SF,ZF,AF,PF,CF的状态。

它是用两个字母来表示是0还是1的。

表示的字母

如下:

标志位名

OF

DF

IF

SF

ZF

AF

PF

CF

为1对应符

OV

DN

EI

NG

ZR

AC

PE

CY、

为0对应符

NV

UP

DI

PL

NZ

NA

PO

NC

如想查看某一寄存器的内容,可在-R后键入寄存器名,如:

-RAX

AX2B6F

1200

上面第二行2B6F为AX中的内容,第三行冒号后的1200为你键入的要修改的内容。

3.-U它是反汇编调试命令。

(选看)

因为被调试的程序LH.EXE是机器码语言,必须翻译成汇编语言程序人们才好读懂。

注意反汇编的范围是在本段内。

该命令有下面三种格式:

-U-----(它是将当前CS:

IP所指的地址开始的机器码反汇编32个字节指令。

-U地址-----(地址是反汇编开始的地址,可以是偏移地址也可以是逻辑地址。

如:

-U2A[002A是反汇编开始的偏移地址]

-U11D0:

0100[11D0:

0100是反汇编开始的逻辑地址])

-U地址1地址2-----(从地址1反汇编到地址2,如:

-U105F[从当前段的偏移地址0010反汇编到005F]

-U01F5:

105F[从01F5段的0010偏移地址开始反汇编到本段

的005F为止]

4.-G它是设置断点及启动程序运行命令。

它有三种格式:

-G-----(断点是程序结束,它从当前CS:

IP所指地址开始直到程序结束。

-G=地址-----(从指定的地址开始直到程序结束)

-G=地址1地址2----(从指定的地址1开始运行到地址2结束)

5.-D它是显示内存单元内容命令。

它有两种格式:

-D地址-----(显示从当前地址开始的内存128个字节的内容,如:

-DDS:

00[显示从DS所表示的数据段段地址,偏移地址0000开始

的128个字节的内容])

-D地址1地址2-----(显示从地址1开始到地址2所有单元的内容,如:

-DDS:

00FF

[显示从DS所表示的数据段段地址,偏移地址0000开始到

偏移地址为00FF结束的所有单元的内容])

6.-E一次修改一个内存单元内容命令。

格式为:

-E地址-----(命令输入后显示该地址所指示单元的内容,此时可键入要修改的

内容。

修改后可按回车键或空格键,按回车键为结束修改,按空

格键可继续修改下一单元的内容)

7.-F将内存中若干个连续单元赋与同一数值,也就是修改。

常用该命令给内存某一区域清零。

如:

-FDS:

003F00-----(将地址为DS:

0000~DS:

003F的64个单元内容设为00H,也就是对这64个单元清零)

8.-T执行一条或多条指令的命令,也可称为单步执行命令。

格式:

-T-----(命令后面没有参数,表示执行当前CS:

IP为地址所指的一条指令)

-T地址-----(执行地址所指的一条指令)

-T地址|n-----(执行以当前地址开始的n条指令)

实验一:

运行一个简单的汇编语言源程序

1.实验目的:

1)通过运行一个简单的汇编语言源程序,了解8086/8088汇编语言源程序的逻辑结构。

2)初步掌握汇编语言源程序上机汇编、调试、运行的过程。

2.实验程序:

下面是一个16位二进制加法的源程序:

STACKSEGMENTPARASTACK'STACK'

DW256DUP(?

);设置堆栈段

TOPLABELWORD

STACKENDS

DATASEGMENT

DTADW2C3BH

DTBDW0A6DFH;设置数据段

DTCDW?

DATAENDS

COSEGSEGMENT

ASSUMECS:

COSEG,SS:

STACK,DS:

DATA;规定COSEG是代码段,STACK堆栈段,DATA是

START:

MOVAX,STACK;数据段

MOVSS,AX;设置堆栈段的段地址

MOVAX,TOP

MOVSP,AX;设置堆栈指针

MOVAX,DATA;

MOVDS,AX;设置数据段段地址

MOVBX,DTA

MOVCX,DTB;16位二进制加法

ADDBX,CX

MOVDTC,BX

MOVAH,4CH

INT21H;返回DOS操作系统

COSEGENDS

ENDSTART

3.目标文件与列表文件

汇编后要生成目标文件(.OBJ文件),列表文件(.LST文件)。

最重要的是目标文

件,它是源程序的机器码文件,它将通过LINK文件的连接生成可以运行的执行文件,

即.EXE文件。

汇编后生成的列表文件(也就是.LST文件)如下,列表文件是为程序的

设计者进行观察、分析用的。

1.Microsoft(R)MacroAssemblerVersion5.00

2.0000STACKSEGMENTPARASTACK'STACK'

3.00000100DW256DUP(?

4.0200TOPLABELWORD

5.0200STACKENDS

6.0000DATASEGMENT

7.00002C3BDTADW2C3BH

8.0002A6DFDTBDW0A6DFH

9.0004?

?

?

?

DTCDW?

10.0006DATAENDS

11.0000COSEGSEGMENT

ASSUMECS:

COSEG,SS:

STACK,DS:

DATA

12.0000B8----RSTART:

MOVAX,STACK

13.00038ED0MOVSS,AX

14.000536:

A10200RMOVAX,TOP

15.00098BE0MOVSP,AX

16.000BB8----RMOVAX,DATA

17.000E8ED8MOVDS,AX

18.00108B1E0000RMOVBX,DTA

19.00148B0E0002RMOVCX,DTB

20.001803D9ADDBX,CX

21.001A891E0004RMOVDTC,BX

22.001EB44CMOVAH,4CH

23.0020CD21INT21H

24.0022COSEGENDS

25.ENDSTART

在上面的列表文件中的第22~24行是列表程序的核心部分,这一部分对应着用户源程序重要

执行的代码段。

我们观察第20行:

20.001803D9ADDBX,CX

“0018(16进制)”是“ADDBX,CX”这条指令在代码段中的偏移地址,它的段地址要通过

连接后生成的.EXE文件在运行时由操作系统来决定。

“03D9”是这条指令的机器码,“03”是操作

码,表示进行加法运算。

“D9”是操作码字节,它表示源操作数是“CX寄存器”,目的操作数是“BX

寄存器”。

再观察第12行:

12.0000B8----RSTART:

MOVAX,STACK

偏移地址是“0000”,表示“MOVAX,STACK”是代码段的第一条指令,“B8”是操作码,表示

要将堆栈段“STACK”的段地址给“AX寄存器”。

“----R”表示浮动的地址,因为堆栈段的段地

址要通过连接运行时由操作系统来决定。

4.上机操作

1).编辑:

用“写字板”编辑好上例源文件存在C:

\>目录下.TEST1.ASM

2).汇编:

在MasmforWindows集成实验环境中打开TEST1.ASM文件,然后在点击运行项,在其下拉菜单中点击编译成目标文件(OBJ),如果你输入的文件完全正确,将在下面的栏中显示:

编译源程序C:

\>TEST1.ASM

编译成功

3).连接:

在MasmforWindows集成实验环境中点击运行项,在其下拉菜单中点击生成可执行文件(EXE),如果你输入的文件完全正确,将在下面的栏中显示:

编译源程序C:

\>TEST1.ASM

生成EXE文件成功

4).调式:

在MasmforWindows集成实验环境中点击运行项,在其下拉菜单中点击DEBUG调试,在屏幕上出现如下信息:

-

(1)用–U命令观察文件,注意文件的终止地址.

(2)用–T命令观察命令执行情况,单步执行.

(3)用–G命令运行程序:

-G00终止地址

(4)用–D命令观察内存的情况:

-DDS:

00

5)在DEBUG状态下,用E命令改变两个加数的大小,再运行后,用同样方法观察运算结果。

5.思考题:

如何编写32位的加法(或减法)程序?

实验二:

DEBUG命令的使用

1.实验目的:

DEBUG的R,U,G,D,E,F,T,Q命令的使用方法。

1).-R显示CPU中除FLAG寄存器外的14个寄存器的内容,

如想查看某一寄存器的内容,可在-R后键入寄存器名,如:

-RAX

AX2B6F

1200

上面第二行2B6F为AX中的内容,第三行冒号后的1200为你键入的要修改的内容。

2).-U它是反汇编调试命令。

-U-----(它是将当前CS:

IP所指的地址开始的机器码反汇编32个字节指令。

-U地址1地址2-----(从地址1反汇编到地址2,如:

-U002F[从当前段的偏移地址0000反汇编到002F]

3).-G它是设置断点及启动程序运行命令。

4).-D它是显示内存单元内容命令。

它有两种格式:

-D地址-----(显示从地址开始的内存128B的内容,如:

-DDS:

00[显示从DS段地址,偏移地址0000开始的128个字节的内容])

5).-E一次修改一个内存单元内容命令。

格式为:

-E地址

6).-F将内存中若干个连续单元赋与同一数值,也就是修改。

常用该命令给内存某一区域清零。

如:

-FDS:

003F00-----(将地址为DS:

0000~DS:

003F的64个单元内容设为00H)

7).-T称为单步执行命令。

格式:

-T-----(命令后面没有参数,表示执行当前CS:

IP为地址所指的一条指令)

-T地址-----(执行地址所指的一条指令)

8).–Q表示退出DEBUG状态。

2.实验程序:

将自然增减的31个数据(00H-0FH-00H)写入内存,内存的首地址为20000H,源程序如下:

STACKSEGMENTSTACK

DW64DUP(?

);设置堆栈段

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,SS:

STACK

MAINPROCFAR

START:

MOVAX,2000H;数据段段地址

MOVDS,AX

MOVSI,0;数据段偏移地址

MOVCL,0FH;

XORAX,AX;0AX

A1:

MOV[SI],AL

INCAL

INCSI;递增00—0FH

DECCL

JNZA1;CL=0,结束循环

MOVCX,10H

A2:

MOV[SI],AL

INCSI

DECAL;递减0F--00H

LOOPA2;CX=0,结束循环

INT20H;程序结束

MAINENDP

CODEENDS

ENDSTART

上机操作:

1).编辑:

用“写字板”编辑好源文件存在C:

\>目录下.TEST2.ASM

2).汇编:

在MasmforWindows集成实验环境中打开TEST2.ASM文件,然后在点击运行项,在其下拉菜单中点击编译成目标文件(OBJ),如果你输入的文件完全正确,将在下面的栏中显示:

编译源程序C:

\>TEST2.ASM

编译成功

3).连接:

在MasmforWindows集成实验环境中点击运行项,在其下拉菜单中点击生成可执行文件(EXE),如果你输入的文件完全正确,将在下面的栏中显示:

编译源程序C:

\>TEST2.ASM

生成EXE文件成功

4).调式:

在MasmforWindows集成实验环境中点击运行项,在其下拉菜单中点击DEBUG调试,在屏幕上出现如下信息:

-

(1)用–U命令观察文件,注意文件的终止地址.

(2)用–T命令观察命令执行情况,单步执行.

(3)用–G命令运行程序:

-G001F

(4)用–D命令观察内存的情况:

-DDS:

00

3.思考题:

在实验程序TEST2.ASM基础上,写出将内存单元(0000H—000FH)的内容送到(0030H—003FH)的程序,并存在C:

\>目录下.TEST21.ASM。

实验报告中写出汇编及连接通过的源程序,写出用DEBUG观察到内存(0000H—003FH)的内容。

实验三:

变量的属性

1.实验目的:

1)通过本实验初步了解汇编语言源程序的结构。

认识和理解变量的五个属性

----SEG,OFFSET,TYPE,LENGTH,SIZE。

主要是前面三个属性。

2)学会在DEBUG下调试程序,了解变量在内存中存放的情况。

2.上机程序:

下面是列表程序(去掉了一些不重要的部分),下面列表程序的右边部分是要从键盘输入

的源程序。

1NAMEPROPERTYOFVAIRIABLE

20000STACKSEGMENTPARASTACK'STACK';堆栈段的起始伪指令

3000000C8[STAPNDB256DUP(?

);设置堆栈区的长度

TOP=LENGTHSTAPN;使堆栈指针指向栈底

800C8STACKENDS;堆栈段中止的伪指令

90000DATASEGMENT;数据段的起始伪指令

10000020DATA1DB20H;本数据段有11个变量

110001A204FF00DATA2DW0A204H,-100H

120005FD05DATA3DB(-1*3),(15/3)

13000745230100DATA4DD12345H

14000B30313233DATA5DB'0123'

15000F414200430044DATA6DW'AB','C','D'

160015?

?

DATA7DB?

170016?

?

?

?

?

?

?

?

DATA8DD?

18001A000D[DATA9DB10DUP(?

2200270003[DATA10DB2DUP(0CH,0DH,2DUP(00,0EEH))

3100390002[DATA11DW2DUP(?

35003DDATAENDS;数据段中止的伪指令

360000COSEGSEGMENT;码段(程序段)开始伪指令

37ASSUMECS:

COSEG,SS:

STACK,DS:

DATA,ES:

DATA

380000B8----RSTART:

MOVAX,STACK;将堆栈段的段地址给SS

3900038ED0MOVSS,AX

400005B800C8MOVAX,TOP;将堆栈指针给SP

4100088BE0MOVSP,AX

42000AB8----RMOVAX,DATA;将数据段的段地址给DS

43000D8ED8MOVDS,AX

44000F8EC0MOVES,AX;将数据段的段地址给ES

450011BB----RMOVBX,SEGDATA4;将DATA4的段地址给BX

460014891E001ARMOVWORDPTRDATA9,BX;BX中的内容给DATA9

470018BB0007RMOVBX,OFFSETDATA4;DATA4的偏移地址给BX

48001B891E001ERMOVWORDPTRDATA9+2,BX;BX中的内容给DATA9+2

49001FB204MOVDL,TYPEDATA4;DATA4的类型给DL

50002188160022RMOVDATA9+4,DL;DL中的内容给DATA9+4

510025B201MOVDL,LENGTHDATA4;DATA4的长度给DL

52002788160023RMOVDATA9+5,DL;DL中的内容给DATA9+5

53002BB204MOVDL,SIZEDATA4;DATA4的尺寸给DL

54002D88160024RMOVDATA9+6,DL;DL中的内容给DATA9+6

550031B103MOVCL,LENGTHDATA10;DATA10的长度给CL

560033880E0025RMOVDATA9+7,CL;CL中的内容给DATA9+7

570037B103MOVCL,SIZEDATA10;DATA10的尺寸给CL

580039880E0026RMOVDATA9+8,CL;CL中的内容给DATA9+8

59003DA10001RMOVAX,DATA2;变量DATA2的内容给AX

60004003060003RADDAX,DATA2+2;(AX)+变量DATA2+2给

AX

610044A30039RMOVDATA11,AX;AX中的内容给变量DATA11

6200478B160001RMOVDX,DATA2;变量DATA2的内容给DX

63004B2B160003RSUBDX,DATA2+2;(DX)-变量DATA2+2给

DX

64004F8916003BRMOVDATA11+2,DX;DX中的内容给变量DATA11+2

650053B44CMOVAH,04CH;准备返回DOS

660055CD21INT21H;返回DOS

670057COSEGENDS;码段到此结束的伪指令

68ENDSTART;程序到此结束的伪指令

3.实验成功后认真填写下表:

变量

名称

偏移

地址

内容

变量

名称

偏移

地址

内容

变量

名称

偏移

地址

内容

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

当前位置:首页 > 工程科技 > 能源化工

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

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