汇编实验一.docx

上传人:b****5 文档编号:8171162 上传时间:2023-01-29 格式:DOCX 页数:18 大小:210.24KB
下载 相关 举报
汇编实验一.docx_第1页
第1页 / 共18页
汇编实验一.docx_第2页
第2页 / 共18页
汇编实验一.docx_第3页
第3页 / 共18页
汇编实验一.docx_第4页
第4页 / 共18页
汇编实验一.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

汇编实验一.docx

《汇编实验一.docx》由会员分享,可在线阅读,更多相关《汇编实验一.docx(18页珍藏版)》请在冰豆网上搜索。

汇编实验一.docx

汇编实验一

汇编语言程序设计

实验报告

实验名称

上机过程及顺序结构与分支结构程序设计实验

班级

软信0903

学号

20093660

姓名

周强强

日期

2011-4-10,2011-4-19

成绩

评阅人

软件学院

一、实验目的与意义

1、掌握汇编语言程序设计的基本方法和技能;

2、熟练掌握使用全屏幕编辑程序EDIT编辑汇编语言源程序;

3、熟练掌握宏汇编程序MASM的使用;

4、熟练掌握连接程序LINK的使用。

5、掌握分支程序的结构

6、掌握分支程序的设计、调试方法

二、实验环境

上机号:

24#

操作系统:

windowsxpprofessionalsp2

软件环境:

Editplus+MASM+LINK+DEBUG

三、实验的预习内容

汇编程序上机的主要分为编辑,汇编,连接,执行等几个步骤

汇编语言的工作环境

为了运行汇编语言程序磁盘上应该有下列文件:

MASM.EXE

LINK.EXE

CREF.EXE

DEBUG.COM或DEBUG.EXE

1、汇编语言源程序的汇编过程

汇编语言源程序的汇编过程是是利用汇编程序(MASM)对已编辑好的源程序文件(.ASM)进行汇编,将源程序文件中以ASCII码表示的助记符指令逐条翻译成机器码指令,并完成源程序中的伪指令所指出的各种操作,最后可以建立3个文件:

扩展名为.OBJ的目标文件、扩展名为.LST的列表文件和扩展名为.CRF的交叉索引文件。

目标文件是必须建立的,它包含了程序中所有的机器码指令和伪指令指出的各种有关信息,但该文件中的操作数地址还不是内存的绝对地址,只是一个可浮动的相对地址。

列表文件(.LST)中包含了源程序的全部信息(包括注释)和汇编后的目标程序,列表文件可以打印输出,可供调试检查用。

交叉索引文件(.CRF)是用来了解源程序中各符号的定义和引用情况的。

.LST和.CRF两个文件不是必须建立的,可有有无,可以通过汇编时的命令加以选择。

在对源程序文件(ASM文件)汇编时,汇编程序将对ASM文件进行两遍扫描,若程序文件中有语法错误,则结束汇编,汇编程序将指出源程序中存在的错误,这时应返回编辑环境修改源程序中的错误,再经过汇编,直到最后得到无错误的目标程序,即OBJ文件。

因此,汇编程序的主要功能可以概括为以下三点:

(1)检查源程序中的语法错误,并给出错误信息;

(2)产生目标程序文件(OBJ文件),并可给出列表文件(.LST文件);(3)展开宏指令。

汇编程序是系统提供的用于汇编的系统软件,目前常用的汇编程序有Microsoft公司推出的宏汇编程MASM(MACROASSEMBLER)和BORLAND公司推出的TASM(TURBOASSEMBLER)两种。

Microsoft公司推出有宏汇编程序MASM和小汇编程序ASM两种,二者的区别在于:

MASM有宏处理功能,而ASM没有宏处理功能,因此,MASM比ASM的功能强大,但MASM需要占据较大的内存空间,当内存空间较小时(如64KB),只能使用ASM。

2、目标程序的连接过程

汇编后产生的目标程序(OBJ文件)并不是可执行程序文件(EXE文件),还不能直接运行,它必须通过连接程序(LINK)连接成一个可执行程序后才能运行。

连接程序进行连接时,其输入有两个部分:

一是目标文件(.OBJ),目标文件可以是一个也可以是多个,可以是汇编语言经汇编后产生的目标文件,也可以是高级语言(例如C语言)经编译后产生的目标文件;另一是库文件(.LIB),库文件是系统中已经建立的,主要是为高级语言提供的。

连接后输出两个文件,一是扩展名为.EXE的可执行文件,另一个是扩展名为.MAP的内存分配文件,它是连接程序的列表文件,又称为连接映像(LinkMap),它给出每个段在存储器中的分配情况,该文件可有可无。

连接程序给出的“无堆栈段的警告性错误”并不影响程序的运行。

所以,到此为止,连接过程已经结束,可以在操作系统下执行该.EXE程序了。

3、汇编语言和DOS操作系统的接口

编写的汇编语言源程序是在DOS环境下运行时,必须了解汇编语言是如何同DOS操作系统接口的。

用编辑程序把源程序输入到机器中,用汇编程序把它转换为目标程序,用连接程序对其进行连接和定位时,操作系统为每一个用户程序建立了一个程序段前缀区PSP,其长度为256个字节,主要用于存放所要执行程序的有关信息,同时也提供了程序和操作系统的接口。

操作系统在程序段前缀的开始处(偏移地址0000H)安排了一条INT20H软中断指令。

INT20H中断服务程序由DOS提供,执行该服务程序后,控制就转移到DOS,即返回到DOS管理的状态。

因此,用户在组织程序时,必须使程序执行完后能去执行存放于PSP开始处的INT20H指令,这样便返回到DOS,否则就无法继续键入命令和程序。

DOS在建立了程序段前缀区PSP之后,将要执行的程序从磁盘装入内存。

在定位程序时,DOS将代码段置于PSP下方,代码段之后是数据段,最后放置堆栈段。

内存分配好之后,DOS就设置段寄存器DS和ES的值,以使它们指向PSP的开始处,即INT20H的存放地址,同时将CS设置为PSP后面代码段的段地址,IP设置为指向代码段中第一条要执行的指令位置,把SS设置为指向堆栈的段地址,让SP指向堆栈段的栈底,然后系统开始执行用户程序。

 

四、实验的步骤与调试方法

1、实验步骤图

五、实验数据与实验结果

1、实验一,题目一中教材P51页程序编辑、连接、单步执行后的输出结果

2、用E命令修改结果(修改0B6B:

0001的数据68为32)

用G命令查看结果(查看地址为0B6B:

0010处的情况)

1、用A命令修改程序(修改ADD为SUB)

程序执行SUB结果为

实验一,题目二(正数、负数、DW、DD)

4个数的存储情况

实验二,顺序结构程序设计实验

十进制输出

十六进制输出

实验三、分支程序设计实验

1、最后输出结果为2D(空格),而-1H,-13H,-7H(内存地址为0000,0001,0002)这组数据比较后的结果就是输出空格

2、源程序分配内存连续可以知道

DATA2DB1H,13H,7H

DATA3DB-9H,3H,-8H

这两组数据的地址依次是0003,0004,0005,0006,0007,0008)

所以在debug中使用A命令进行如下修改

将地址0003,0004,0005对应的三个数即是1H,13H,7H进行比较,并输出结果为2B,如下图单步执行结果

2B所对应的即是“+”

继续修改地址为0006,0007,0008对应的数为-9H,3H,-8H

可以预料输出结果为空格

下面进入debug修改

修改完以后再单步执行输出结果如下

DL,20就是把空格输出,而题意就是异号的数比较输出空格

 

六、实验用程序清单

实验一,题目1:

;----------------------------------------------------------

;东北大学20093660

;版权所有1990-2012

;----------------------------------------------------------

;QQ9156571

;-----------------------------------------------------------

DSEGSEGMENT;数据段开始

DATA1DB26H,15H;原始数据

DATA2DW0H;保存结果单元

DSEGENDS;数据段结束

SSEGSEGMENTSTACK;堆栈段开始

SKTOPDB20DUP(0)

SSEGENDS;堆栈段结束

CSEGSEGMENT;代码段开始

ASSUMECS:

CSEG,DS:

DSEG

ASSUMESS:

SSEG

START:

MOVAX,DSEG;初始化数据段基址

MOVDS,AX

MOVAX,SSEG;初始化堆栈段基址

MOVSS,AX

MOVSP,SIZESKTOP

MOVAL,DATA1;取第一个数据

ADDAL,DATA1+1;与第二个数相加

MOVBYTEPTRDATA2,AL;保存结束

MOVAH,4CH;返回DOS

INT21H

CSEGENDS;代码段结束

ENDSTART;源程序结束

实验一,题目2:

;----------------------------------------------------------

;东北大学20093660

;版权所有1990-2012

;----------------------------------------------------------

;QQ9156571

;-----------------------------------------------------------

DSEGSEGMENT

NUMDB00H,-8H

ASCDW2011H

USRDD20093660H

DSEGENDS

SSEGSEGMENTSTACK

SKTOPDB20DUP(0)

SSEGENDS

CSEGSEGMENT

ASSUMECS:

CSEG,DS:

DSEG

ASSUMESS:

SSEG

START:

MOVAX,DSEG

MOVDS,AX

MOVAX,SSEG

MOVSS,AX

MOVSP,SIZESKTOP

MOVAL,NUM

MOVAH,NUM+1

MOVCX,ASC

MOVAH,4CH

INT21H

CSEGENDS

ENDSTART

实验二:

;----------------------------------------------------------

;东北大学20093660

;版权所有1990-2012

;----------------------------------------------------------

;QQ9156571

;-----------------------------------------------------------

DSEGSEGMENT

NUMDB0,1D,4D,9D,16D,25D,36D,49D,64D,81D

DSEGENDS

SSEGSEGMENTSTACK

SKTOPDB20DUP(0)

SSEGENDS

CSEGSEGMENT

ASSUMECS:

CSEG,DS:

DSEG

ASSUMESS:

SSEG

START:

MOVAX,SEGNUM;初始化

MOVDS,AX

MOVAX,SSEG

MOVSS,AX

MOVSP,SIZESKTOP

MOVBX,OFFSETNUM;制表

MOVAH,01H;输入一个数,存在AL中

INT21H

SUBAL,'0';用ASCII减去

XLAT;获取输出结果存在AL中

MOVAH,0

PUSHAX;保存AX

MOVDL,0DH;输出一个回车换行

MOVAH,02H

INT21H

MOVDL,0AH

MOVAH,02H

INT21H

POPAX

MOVBL,16D;以16进制显示结果

;MOVBL,10D;以10进制显示结果

DIVBL

PUSHAX

MOVDL,AL;输出高位的数字

ADDDL,30H

MOVAH,02H

INT21H

POPAX;输出低位的数字

MOVDL,AH

ADDDL,30H

MOVAH,02H

INT21H

MOVAH,4CH;程序退出

INT21H

CSEGENDS

ENDSTART

实验三

;----------------------------------------------------------

;东北大学20093660

;版权所有1990-2012

;----------------------------------------------------------

;QQ9156571

;-----------------------------------------------------------

DSEGSEGMENT

DATA1DB-1H,-13H,-7H

DATA2DB1H,13H,7H

DATA3DB-9H,3H,-8H

DSEGENDS

SSEGSEGMENTSTACK

SKTOPDB20DUP(0)

SSEGENDS

CSEGSEGMENT

ASSUMECS:

CSEG,DS:

DSEG

ASSUMESS:

SSEG

START:

MOVAX,DSEG

MOVDS,AX

MOVAX,SSEG

MOVSS,AX

MOVSP,SIZESKTOP

MOVAL,DATA1;读入所有的数据

MOVAH,DATA1+1

MOVBL,DATA1+2

TESTAL,AL

JSNTIVE

TESTAH,AH

JSNULL

TESTBL,BL

JSNULL

MOVDL,2BH;输出"+"(+号的ASCII为2B)

JMPMOVE

NTIVE:

TESTAH,AH

JNSNULL

TESTBL,BL

JNSNULL

MOVDL,2DH;输出"-"(-号的ASCII为2D)

JMPMOVE

NULL:

MOVDL,20H;输出空格""(空格的ASCII为20)

MOVE:

MOVAH,02H;输出DL

INT21H

MOVAH,4CH

INT21H

CSEGENDS

ENDSTART

七、思考题

1.按照操作顺序写出上机操作的步骤;

2.上机操作的步骤与顺序可以调整吗?

为什么?

上机操作的步骤与顺序不可以调整,汇编语言程序设计只能按照先编辑源代码,连接,运行,debug的顺序,如果调整顺序以后,程序执行会出错。

3.写出用DEBUG中的E命令修改内存单元内容的两种方法;

E+address或者Eaddress[list]

4.写出用DEBUG中的A命令修改指令的方法及应注意的问题;

Aaddress

Address指令

需要注意的是指令后面必须跟操作数

5.总结DEBUG中E、D、U命令的功能;

E(键入)

将数据输入到内存中指定的地址。

D(转储)

显示一定范围内存地址的内容。

U(反汇编)

反汇编字节并显示相应的原语句,其中包括地址和字节值。

反汇编代码看起来象已汇编文件的列表。

 

6.总结DEBUG中P、G、T命令的功能;

P(执行)

执行循环、重复的字符串指令、软件中断或子例程;或通过任何其他指令跟踪。

G(转向)

运行当前在内存中的程序。

T(跟踪)

从当前段地址开始执行指定的代码数,每执行一次显示所有寄存器(包括标志寄存器)的值。

7.写出数据定义伪指令DB、DW和DD存储整数的格式;

DB12H

DW1234H

DD12345678H

8.同一个正数分别用DB、DW和DD定义,存储格式有何变化?

所占用的内存大小不同,DB为一个字节,DW为两个字节,DD为三个字节,高地址存高位,低地址存地位,高位补0

9.同一个负数分别用DB、DW和DD定义,存储格式有何变化?

所占用的内存大小不同,DB为一个字节,DW为两个字节,DD为三个字节,高地址存高位,低地址存地位,高位补F

10.自定义标号分别用DW和DD定义,存储格式有何变化?

DW存储的是偏移量,占用两个字节;DD存储的是段寄存器与偏移量,占四个字节,高位存段寄存器,低位存偏移量。

11.DB、DW和DD在定义数据串时有何不同?

DB定义数据串时,每个数据占用一个字节内存单元;DW定义数据串时,每个数据占用两个字节内存单元;DD定义数据串时,每个数据占用四个字节内存单元

12.说明十六进制数转换为ASCII码的方法;

将16进制数除以16,商与余数分别加上0的ASCII码,分别输出。

13.字符串(例如“Microsoft”)使用什么数据定义伪指令?

为什么?

用DB定义数据项为ASCII常数时,DB伪指令中可用引号括起任意多个(不超过一个逻辑行)字符,而在其他数据定义伪指令中,只能用引号括起最多2个字符。

14.顺序结构的程序能有多个出口吗?

为什么?

不能。

一个顺序程序只能有一个出口。

八、结束语

通过这两次的程序设计实践,学习了汇编程序设计的基本方法和技能,基本操作和设计流程,熟悉掌握使用全屏幕编辑程序EDIT编辑汇编语言源程序,掌握宏汇编程序MASM的使用,掌握连接程序LINK的使用,掌握分支程序的结构,掌握分支程序的设计、调试方法。

熟悉了汇编语言程序设计中用到的常用命令,如A,E,U,T等。

实验过程中发现了一些粗心的问题,比如有时候汇编时输入法为中文,结果导致编译不通过,老是有错误。

最后在同学的帮助下才发现那个微小的错误。

以后的编程过程中一定要注意输入的符号的半角全角状态。

九、参考文献

1、XX一下你就知道

2、《汇编语言程序设计》齐志儒主编东北大学出版社出版

3、XX百科

4、《汇编语言程序设计实验指导书》

 

实验成绩

考查内容

分数

得分

做好实验内容的预习,写出预习报告

10

了解实验题目的调试方法

10

按实验要求预先设计好程序

10

认真记录实验数据并分析实验结果

10

实验后按要求书写实验报告,记录实验用数据及运行结果

30

创新能力强,在实验中设计的程序有一定的通用性,算法优化

20

实验过程中,具有严谨的学习态度,认真、踏实、一丝不苟的科学作风

10

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

当前位置:首页 > 表格模板 > 合同协议

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

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