汇编语言程序的上机过程
的有关信息介绍如下:
本处文档结合大学阶段《微机原理与接口技术》,汇编语言也是大学阶段重要的计算机语言,希望借实验说明让大家更好理解汇编语言这一块。
一、建立汇编语言的工作环境
为运行汇编语言程序至少要在磁盘上建立以下文件:
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 ;汇编的结束,程序在此执行



