2024年4月18日发(作者:)
实验一 DOS环境下的汇编语言编程环境使用(基础与验证型)
一、实验要求和目的
1、掌握汇编语言程序设计的基本方法和技能;
2、熟练掌握使用全屏幕编辑程序EDIT编辑汇编语言源程序;
3、熟练掌握宏汇编程序MASM的使用;
4、熟练掌握连接程序LINK的使用。
二、软硬件环境
1、硬件环境:微机CPU 486以上,500MB以上硬盘,32M以上内存;
2、软件环境:装有MASM 6.15、DEBUG、LINK、EDIT等应用程序。
三、实验涉及的主要知识单元
1、汇编语言源程序的汇编过程
汇编语言源程序的汇编过程是是利用汇编程序(MASM)对已编辑好的源程序文件(.ASM)
进行汇编,将源程序文件中以ASCII码表示的助记符指令逐条翻译成机器码指令,并完成源
程序中的伪指令所指出的各种操作,最后可以建立3个文件:扩展名为 .OBJ的目标文件、
扩展名为 .LST 的列表文件和扩展名为 .CRF 的交叉索引文件。目标文件是必须建立的,它
包含了程序中所有的机器码指令和伪指令指出的各种有关信息,但该文件中的操作数地址还
不是内存的绝对地址,只是一个可浮动的相对地址。列表文件(.LST)中包含了源程序的全
部信息(包括注释)和汇编后的目标程序,列表文件可以打印输出,可供调试检查用。交叉索
引文件(.CRF)是用来了解源程序中各符号的定义和引用情况的。.LST和.CRF两个文件不
是必须建立的,可有有无,可以通过汇编时的命令加以选择。
在对源程序文件(ASM文件)汇编时,汇编程序将对ASM文件进行两遍扫描,若程序文
件中有语法错误,则结束汇编,汇编程序将指出源程序中存在的错误,这时应返回编辑环境
修改源程序中的错误,再经过汇编,直到最后得到无错误的目标程序,即OBJ文件。因此,
汇编程序的主要功能可以概括为以下三点: (1) 检查源程序中的语法错误,并给出错误信
息;(2) 产生目标程序文件(OBJ文件),并可给出列表文件(.LST文件);(3) 展开宏指令。
汇编程序是系统提供的用于汇编的系统软件,目前常用的汇编程序有Microsoft公司推
出的宏汇编程MASM(MACRO ASSEMBLER)和BORLAND公司推出的TASM(TURBO ASSEMBLER)两
种。Microsoft公司推出有宏汇编程序MASM和小汇编程序ASM两种,二者的区别在于:MASM
有宏处理功能,而ASM没有宏处理功能,因此,MASM比ASM的功能强大,但MASM
需要占据较大的内存空间,当内存空间较小时(如64 KB),只能使用ASM。
2、目标程序的连接过程
汇编后产生的目标程序(OBJ文件)并不是可执行程序文件(EXE文件),还不能直接运行,
它必须通过连接程序(LINK)连接成一个可执行程序后才能运行。连接程序进行连接时,其输
入有两个部分:一是目标文件(.OBJ),目标文件可以是一个也可以是多个,可以是汇编语言
经汇编后产生的目标文件,也可以是高级语言(例如C语言)经编译后产生的目标文件;另一
是库文件(.LIB),库文件是系统中已经建立的,主要是为高级语言提供的。连接后输出两个
文件,一是扩展名为 .EXE的可执行文件,另一个是扩展名为 .MAP 的内存分配文件,它是
连接程序的列表文件,又称为连接映像(Link Map),它给出每个段在存储器中的分配情况,
该文件可有可无。连接程序给出的“无堆栈段的警告性错误”并不影响程序的运行。所以,
到此为止,连接过程已经结束,可以在操作系统下执行该.EXE程序了。
3、汇编语言和DOS操作系统的接口
编写的汇编语言源程序是在DOS环境下运行时,必须了解汇编语言是如何同DOS操作
系统接口的。
用编辑程序把源程序输入到机器中,用汇编程序把它转换为目标程序,用连接程序对其
进行连接和定位时,操作系统为每一个用户程序建立了一个程序段前缀区PSP,其长度为
256个字节,主要用于存放所要执行程序的有关信息,同时也提供了程序和操作系统的接口。
操作系统在程序段前缀的开始处(偏移地址0000H)安排了一条INT 20H软中断指令。INT 20H
中断服务程序由DOS提供,执行该服务程序后,控制就转移到DOS,即返回到DOS管理
的状态。因此,用户在组织程序时,必须使程序执行完后能去执行存放于PSP开始处的INT
20H指令,这样便返回到DOS,否则就无法继续键入命令和程序。
DOS在建立了程序段前缀区PSP之后,将要执行的程序从磁盘装入内存。在定位程序
时,DOS将代码段置于PSP下方,代码段之后是数据段,最后放置堆栈段。内存分配好之
后,DOS就设置段寄存器DS和ES的值,以使它们指向PSP的开始处,即INT 20H的存放
地址,同时将CS设置为PSP后面代码段的段地址,IP设置为指向代码段中第一条要执行的
指令位置,把SS设置为指向堆栈的段地址,让SP指向堆栈段的栈底,然后系统开始执行
用户程序。为了保证用户程序执行完后能返回到DOS状态,可使用如下两种方法。
(一)标准方法
首先将用户程序的主程序定义成一个FAR过程,其最后一条指令为RET。然后在代码
段的主程序(即FAR过程)的开始部分用如下三条指令将PSP中INT 20H 指令的段地址及偏
移地址压入堆栈:
PUSH DS ;保护PSP段地址
MOV AX,0 ;保护偏移地址0
PUSH AX
这样,当程序执行到主程序的最后一条指令RET时,由于该过程具有FAR属性,故存
在堆栈内的两个字就分别弹出到CS和IP,从而执行INT 20H指令,使控制返回到DOS状
态。返回DOS的标志就是程序运行完后出现一个DOS的标识符,如C:>。
(二)非标准方法
也可在用户的程序中不定义过程段,只在代码段结束之前(即CODE ENDS之前)增加两
条语句:
MOV AH,4CH
INT 21H
则程序执行完后也会自动返回DOS状态。


发布评论