汇编实验报告代码Word文件下载.docx
- 文档编号:17049840
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:18
- 大小:210.17KB
汇编实验报告代码Word文件下载.docx
《汇编实验报告代码Word文件下载.docx》由会员分享,可在线阅读,更多相关《汇编实验报告代码Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。
为了运行汇编语言程序磁盘上应该有下列文件:
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
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:
DSEGSEGMENT
NUMDB00H,-8H
ASCDW2011H
USRDD20093660H
DSEGENDS
SSEGSEGMENTSTACK
SKTOPDB20DUP(0)
SSEGENDS
CSEGSEGMENT
SSEG
MOVAX,DSEG
MOVAX,SSEG
MOVAL,NUM
MOVAH,NUM+1
MOVCX,ASC
MOVAH,4CH
CSEGENDS
ENDSTART
实验二:
NUMDB0,1D,4D,9D,16D,25D,36D,49D,64D,81D
MOVAX,SEGNUM;
初始化
MOVAX,SSEG
MOVSP,SIZESKTOP
MOVBX,OFFSETNUM;
制表
MOVAH,01H;
输入一个数,存在AL中
SUBAL,'
0'
;
用ASCII减去
XLAT;
获取输出结果存在AL中
MOVAH,0
PUSHAX;
保存AX
MOVDL,0DH;
输出一个回车换行
MOVAH,02H
INT21H
MOVDL,0AH
POPAX
MOVBL,16D;
以16进制显示结果
;
MOVBL,10D;
以10进制显示结果
DIVBL
PUSHAX
MOVDL,AL;
输出高位的数字
ADDDL,30H
MOVAH,02H
POPAX;
输出低位的数字
MOVDL,AH
MOVAH,4CH;
程序退出
ENDSTART
实验三
DATA1DB-1H,-13H,-7H
MOVAX,DSEG
读入所有的数据
MOVAH,DATA1+1
MOVBL,DATA1+2
TESTAL,AL
JSNTIVE
TESTAH,AH
JSNULL
TESTBL,BL
MOVDL,2BH;
输出"
+"
(+号的ASCII为2B)
JMPMOVE
NTIVE:
JNSNULL
MOVDL,2DH;
输出"
-"
(-号的ASCII为2D)
NULL:
MOVDL,20H;
输出空格"
"
(空格的ASCII为20)
MOVE:
MOVAH,02H;
输出DL
七、思考题
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
了解实验题目的调试方法
按实验要求预先设计好程序
认真记录实验数据并分析实验结果
实验后按要求书写实验报告,记录实验用数据及运行结果
30
创新能力强,在实验中设计的程序有一定的通用性,算法优化
20
实验过程中,具有严谨的学习态度,认真、踏实、一丝不苟的科学作风
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 实验 报告 代码