汇编实验报告代码例文.docx

上传人:b****8 文档编号:11048877 上传时间:2023-02-24 格式:DOCX 页数:17 大小:19.73KB
下载 相关 举报
汇编实验报告代码例文.docx_第1页
第1页 / 共17页
汇编实验报告代码例文.docx_第2页
第2页 / 共17页
汇编实验报告代码例文.docx_第3页
第3页 / 共17页
汇编实验报告代码例文.docx_第4页
第4页 / 共17页
汇编实验报告代码例文.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

汇编实验报告代码例文.docx

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

汇编实验报告代码例文.docx

汇编实验报告代码例文

  汇编语言程序设计实验报告

  实验名称

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

  班

  级

  学

  号

  姓

  名

  日

  期

  成

  绩

  评

  阅

  人

  软件学院

  一、实验目的与意义1、掌握汇编语言程序设计的基本方法和技能;2、熟练掌握使用全屏幕编辑程序EDIT编辑汇编语言源程序;3、熟练掌握宏汇编程序MASM的使用;4、熟练掌握连接程序LINK的使用。

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

  二、实验环境上机号24#操作系统windowsxpprofessionalsp2

  软件环境Editplus+MASM+LINK+DEBUG

  三、实验的预习内容汇编程序上机的主要分为编辑,汇编,连接,执行等几个步骤

  汇编语言的工作环境

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

  MASM.EXELINK.EXECREF.EXEDEBUG.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(TURBO

  ASSEMBLER)两种。

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个字节,主要用于存放所要执行程序的有关信息,同时也提供了程序和操作系统的接口。

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

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

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

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

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

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

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

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

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

1的数据68为32)

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

1处的情况)

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

  程序执行SUB结果为

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

  4个数的存储情况

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

  十进制输出

  十六进制输出

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

  1、最后输出结果为2D(空格),而-1H,-13H,-7H(内存地址为,1,2)这组数据比较后的结果就是输出空格2、源程序分配内存连续可以知道DATA2DB

  1H,13H,7HDATA3DB

  -9H,3H,-8H这两组数据的地址依次是3,4,5,6,7,8)

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

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

  2B所对应的即是“+”继续修改地址为6,7,8对应的数为-9H,3H,-8H可以预料输出结果为空格下面进入debug修改

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

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

  六、实验用程序清单实验一,题目1

  ;----------------------------------------------------------;东北大学29366;----------------------------------------------------------;QQ9156571;-----------------------------------------------------------DSEGSEGMENT

  ;数据段开始DATA1DB

  26H,15H

  ;原始数据DATA2DW

  H

  ;保存结果单元DSEGENDS

  ;数据段结束SSEGSEGMENTSTACK

  ;堆栈段开始SKTOPDB

  2DUP()SSEGENDS

  ;堆栈段结束

  CSEGSEGMENT

  ;代码段开始

  ASSUME

  CS:

CSEG,DS:

DSEG

  ASSUME

  SS:

SSEG

  START:

  MOV

  AX,DSEG

  ;初始化数据段基址

  MOV

  DS,AX

  MOV

  AX,SSEG

  ;初始化堆栈段基址

  MOV

  SS,AX

  MOV

  SP,SIZESKTOP

  MOV

  AL,DATA1

  ;取第一个数据

  ADD

  AL,DATA1+1

  ;与第二个数相加

  MOV

  BYTEPTRDATA2,AL;保存结束

  MOV

  AH,4CH

  ;返回DOS

  INT

  21HCSEGENDS

  ;代码段结束

  END

  START

  ;源程序结束

  实验一,题目2

  ;----------------------------------------------------------;东北大学29366;----------------------------------------------------------;QQ9156571;-----------------------------------------------------------DSEGSEGMENTNUMDBH,-8H

  ASCDW211HUSRDD29366HDSEGENDS

  SSEGSEGMENTSTACKSKTOPDB2DUP()SSEGENDS

  CSEGSEGMENT

  ASSUME

  CS:

CSEG,DS:

DSEG

  ASSUME

  SS:

SSEG

  START:

MOV

  AX,DSEG

  MOV

  DS,AX

  MOV

  AX,SSEG

  MOV

  SS,AX

  MOV

  SP,SIZESKTOP

  MOV

  AL,NUM

  MOV

  AH,NUM+1

  MOV

  CX,ASC

  MOV

  AH,4CH

  INT

  21HCSEGENDS

  END

  START

  实验二

  ;----------------------------------------------------------;东北大学29366;----------------------------------------------------------;QQ9156571;-----------------------------------------------------------DSEGSEGMENTNUMDB

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

  SSEGSEGMENTSTACKSKTOPDB

  2DUP()SSEGENDS

  CSEGSEGMENT

  ASSUME

  CS:

CSEG,DS:

DSEG

  ASSUME

  SS:

SSEGSTART:

  MOV

  AX,SEGNUM

  ;初始化

  MOV

  DS,AX

  MOV

  AX,SSEG

  MOV

  SS,AX

  MOV

  SP,SIZESKTOP

  MOV

  BX,OFFSETNUM

  ;制表

  MOV

  AH,1H

  ;输入一个数,存在AL中

  INT

  21H

  SUB

  AL,""

  ;用ASCII减去

  XLAT

  ;获取输出结果存在AL中

  MOV

  AH,

  PUSH

  AX

  ;保存AX

  MOV

  DL,DH

  ;输出一个回车换行

  MOV

  AH,2H

  INT

  21H

  MOV

  DL,AH

  MOV

  AH,2H

  INT

  21H

  POP

  AX

  MOV

  BL,16D

  ;以16进制显示结果

  ;MOV

  BL,1D

  ;以1进制显示结果

  DIV

  BL

  PUSH

  AX

  MOV

  DL,AL

  ;输出高位的数字

  ADD

  DL,3H

  MOV

  AH,2H

  INT

  21H

  POP

  AX

  ;输出低位的数字

  MOV

  DL,AH

  ADD

  DL,3H

  MOV

  AH,2H

  INT

  21H

  MOV

  AH,4CH

  ;程序退出

  INT

  21HCSEGENDS

  END

  START实验三

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

  ;东北大学29366;----------------------------------------------------------;QQ9156571;-----------------------------------------------------------DSEGSEGMENTDATA1DB

  -1H,-13H,-7HDATA2DB

  1H,13H,7HDATA3DB

  -9H,3H,-8HDSEGENDSSSEGSEGMENTSTACKSKTOPDB

  2DUP()SSEGENDSCSEGSEGMENT

  ASSUME

  CS:

CSEG,DS:

DSEG

  ASSUME

  SS:

SSEGSTART:

  MOV

  AX,DSEG

  MOV

  DS,AX

  MOV

  AX,SSEG

  MOV

  SS,AX

  MOV

  SP,SIZESKTOP

  MOV

  AL,DATA1

  ;读入所有的数据

  MOV

  AH,DATA1+1

  MOV

  BL,DATA1+2

  TEST

  AL,AL

  JS

  NTIVE

  TEST

  AH,AH

  JS

  NULL

  TEST

  BL,BL

  JS

  NULL

  MOV

  DL,2BH

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

  JMP

  MOVENTIVE:

  TEST

  AH,AH

  JNS

  NULL

  TEST

  BL,BL

  JNS

  NULL

  MOV

  DL,2DH

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

  JMP

  MOVENULL:

  MOV

  DL,2H

  ;输出空格""(空格的ASCII为2)

  MOVE:

  MOV

  AH,2H

  ;输出DL

  INT

  21H

  MOV

  AH,4CH

  INT

  21HCSEGENDS

  END

  START

  七、思考题按照操作顺序写出上机操作的步骤;

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

为什么?

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

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

  或者Eaddress[list]

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

  需要注意的是指令后面必须跟操作数总结DEBUG中E、D、U命令的功能;E(键入)

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

  D(转储)

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

  U(反汇编)

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

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

  总结DEBUG中P、G、T命令的功能;P(执行)

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

  G(转向)

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

  T(跟踪)

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

  写出数据定义伪指令DB、DW和DD存储整数的格式;DB12HDW1234HDD12345678H同一个正数分别用DB、DW和DD定义,存储格式有何变化?

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

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

所占用的内存大小不同,DB为一个字节,DW为两个字节,DD为三个字节,高地址存高位,低地址存地位,高位补F1.自定义标号分别用DW和DD定义,存储格式有何变化?

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

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

DB定义数据串时,每个数据占用一个字节内存单元;DW定义数据串时,每个数据占用两个字节内存单元;DD定义数据串时,每个数据占用四个字节内存单元1说明十六进制数转换为ASCII码的方法;将16进制数除以16,商与余数分别加上的ASCII码,分别输出。

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

为什么?

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

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

为什么?

不能。

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

  八、结束语通过这两次的程序设计实践,学习了汇编程序设计的基本方法和技能,基本操作和设

  计流程,熟悉掌握使用全屏幕编辑程序EDIT编辑汇编语言源程序,掌握宏汇编程序MASM的使用,掌握连接程序LINK的使用,掌握分支程序的结构,掌握分支程序的设计、调试方法。

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

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

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

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

  九、参考文献1、XX一下你就知道2、《汇编语言程序设计》齐志儒主编东北大学出版社出版3、XX百科4、《汇编语言程序设计实验指导书》

  实验成绩

  考查内容分数得分做好实验内容的预习,写出预习报告1

  了解实验题目的调试方法1

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

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

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

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

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

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

当前位置:首页 > 高等教育 > 经济学

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

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