您的位置首页百科问答

汇编语言程序的上机过程

汇编语言程序的上机过程

的有关信息介绍如下:

汇编语言程序的上机过程

本处文档结合大学阶段《微机原理与接口技术》,汇编语言也是大学阶段重要的计算机语言,希望借实验说明让大家更好理解汇编语言这一块。

一、建立汇编语言的工作环境

为运行汇编语言程序至少要在磁盘上建立以下文件:

1、编辑程序,如EDIT.EXE

2、汇编程序,如MASM.EXE

3、连接程序,如LINK.EXE

4、调试程序,如DEBUG.COM

必要时,还可建立如CREF.EXE,EXE2BIN.EXE等文件。

二、在计算机上运行汇编语言的步骤

1、用编辑程序建立ASM源文件,以ASM作为扩展名

2、用汇编程序把ASM文件转换成OBJ文件

3、用连接程序把OBJ文件转换成可执行文件

4、在DOS提示符下直接键入可执行文件名即可执行该程序

三、建立ASM文件

建立ASM文件的编辑程序可以是DOS自身带的编辑程序EDIT.EXE,在DOS提示符下键入EDIT命令即可出现EDIT界面,其操作如下:

D:\>edit

源程序输入完后,以ASM作为扩展名进行保存,假设所保存的文件名为:ex.asm。

ASM源文件的格式1:

;定义数据段,如果需要的话,其中segment和ends是一对伪操作,表示段的开始和结束

datasegment ;数据段开始

;定义数据段的主体,如定义变量

dataends ;数据段结束

;定义附加段,如果需要的话

extrasegment ;附加段开始

;定义附加段的主体,如定义变量

extraends ;附加段结束

;定义代码段,必须的

codesegment ;代码段开始

mainprocfar ;程序的主体部分,proc和endp这一对伪操作表示一个程序模块的开始和结束

assumeds:data,es:extra,cs:code ;assume伪操作指定某个段分配给哪个段寄存器

start: ;程序的入口地址

pushds ;保存原数据段

subax,ax ;ax寄存器清零,作为数据段0偏移地址

pushax ;数据段0偏移地址压入堆栈中

movax,data

movds,ax ;把数据段地址装入数据段寄存器ds

movax,extra

moves,ax ;把附加段地址装入附加段寄存器es

;自己所要实现的功能源代码在此添加

ret ;程序结束后返回DOS

mainendp ;程序的主体部分结束

codeends ;代码段结束

endstart ;汇编程序的结束,程序在start处开始执行

ASM源文件的格式2:

;定义数据段,如果需要的话,其中segment和ends是一对伪操作,表示段的开始和结束

datasegment ;数据段开始

;定义数据段的主体,如定义变量

dataends ;数据段结束

;定义附加段,如果需要的话

extrasegment ;附加段开始

;定义附加段的主体,如定义变量

extraends ;附加段结束

;定义代码段,必须的

codesegment ;代码段开始

mainprocfar ;程序的主体部分,proc和endp这一对伪操作表示一个程序模块的开始和结束

assumeds:data,es:extra,cs:code ;assume伪操作指定某个段分配给哪个段寄存器

start: ;程序的入口地址

movax,data

movds,ax ;把数据段地址装入数据段寄存器ds

movax,extra

moves,ax ;把附加段地址装入附加段寄存器es

;自己所要实现的功能源代码在此添加

movax,4c00h ;程序结束后返回DOS

int21h

mainendp ;程序的主体部分结束

codeends ;代码段结束

endstart ;汇编程序的结束,程序在start处开始执行

该步以及以下几步在电脑上一边讲解,一边演示给同学们看。

四、用MASM程序产生OBJ文件

源文件建立后,就要用汇编程序对源文件汇编,汇编后产生二进制目标文件(以OBJ作为扩展名),其操作如下:

D:\>masmex.asm

汇编程序输入的是ASM文件,其输出文件可以是3个,第一个是OBJ文件,这是我们汇编的主要目的。

第二个是LIST文件,称为列表文件,这个文件列出源程序和机器语言程序清单,并给出符号表,因而可使程序调试更加方便,这个文件可有可无,如果不需要,则可对[NUL.LST]直接按回车键。LST清单的最后部分为段名表和符号表,表中分别给出段名、段的大小及有关属性,以及用户定义的符号名、类型和属性。

第三个是CRF文件,这个文件用来产生交叉引用表REF,对于一般程序不需要建立此文件。为了建立交叉引用表,必须调用CREF程序。

至此,汇编过程已经完成了。但是,汇编程序还有另一个重要功能,可以给出源程序的出错信息。警告信息(warningerrors)指出汇编程序所认为的一般性错误,严重警告错误(severeerrors)则指出汇编程序认为已使汇编程序无法进行正确汇编的错误。除给出错误的个数外,汇编程序还给出出错信息,包括出错的行和错误类型。当然汇编程序只能给出程序中的语法错误,至于程序的算法或编制程序中的其他错误则程序的调试时去解决。

五、用LINK程序产生EXE文件

在DOS提示符下键入LINK命令即可,具体的操作如下:

D:\>linkex.obj

LINK程序有两个输入文件OBJ和LIB。OBJ是我们需要连接的目标文件,LIB则是程序中需要用到的库文件,如果程序中没有用到库文件,则直接按回车健。LINK程序有两个输出文件EXE和MAP文件,EXE文件就是可执行文件,MAP文件是连接程序的列表文件,又称为连接映像,它给出每个段在存储器中的分配情况。

六、程序的执行

在DOS提示符下直接键入可执行的文件名即可,具体的操作如下:

D:\>ex

七、举例

下面这个源代码的功能是在屏幕上显示一个字符串“ThisismyfirstASMprogram.”。

datasegment

stringdb'ThisismyfirstASMprogram.',13,10,'$';字符串以’$’符号结尾,以单引号括起来

dataends

codesegment

mainprocfar

assumecs:code,ds:data ;assume伪操作指定某个段分配给哪个段寄存器,但它不能把段地址装入段寄存器中

start: ;程序的入口地址

pushds ;saveolddatasegment

subax,ax ;ax寄存器清零,作为数据段0偏移地址

pushax ;零偏移地址入栈

movax,data

movds,ax ;把数据段地址装入数据段寄存器ds

leadx,string ;把字符串首地址装入dx寄存器,或写成movdx,offsetstring

movah,9 ;DOS功能调用,在屏幕上显示字符串

int21h ;DOS中断

ret ;returntoDOS

mainendp

codeends

endstart ;汇编的结束,程序在此执行