汇编语言程序的上机过程
1、一、 建立汇编语言的工作环境
为运行汇编语言程序至少要在磁盘上建立以下文件:
1、 编辑程序,如EDIT.EXE
2、 汇编程序,如MASM.EXE
3、 连接程序,如LINK.EXE
4、 调试程序,如DEBUG.COM
必要时,还可建立如CREF.EXE,EXE2BIN.EXE等文件。

2、二、在计算机上运行汇编语言的步骤
1、 用编辑程序建立ASM源文件,以ASM作为扩展名
2、 用汇编程序把ASM文件转换成OBJ文件
3、 用连接程序把OBJ文件转换成可执行文件
4、 在DOS提示符下直接键入可执行文件名即可执行该程序

3、三、 建立ASM文件
建立ASM文件的编辑程序可以是DOS自身带的编辑痕各程序EDIT.EXE,在DOS提示符下键入EDIT命令即可出现EDIT界面,其操作如下:
D:\>edit
源程序输入完后,以ASM作为扩展名进行保存,假设所保存的文件名为:ex.asm。
ASM源文件的格式1:
;定义数据段,如果需要的话,其中segment和ends是一对伪操作,表示段的开始和结束
data segment ;数据段开始
;定义数据段肺游宿的主体,如定义变量
data ends ;数据段结束
;定义附加段,如果需要的话
extra segment ;附加段开始
;定义附加段的主体,如定义变量
extra ends ;附加段结束
;定义代码段,必须的
code segment ;代码段开始
main proc far ;程序的主体部分,proc和endp这一对伪操作表示一个程序模块的开始和结束
assume ds:data, es:extra, cs:code ;assume 伪操作指定某个段分配给哪个段寄存器
start: ;程序的入口地址
push ds ;保存原数据段
sub ax,ax ;ax寄存器捧脾清零,作为数据段0偏移地址
push ax ;数据段0偏移地址压入堆栈中
mov ax,data
mov ds,ax ;把数据段地址装入数据段寄存器ds
mov ax,extra
mov es,ax ;把附加段地址装入附加段寄存器es
;自己所要实现的功能源代码在此添加
ret ;程序结束后返回DOS
main endp ;程序的主体部分结束
code ends ;代码段结束
end start ;汇编程序的结束,程序在start处开始执行
ASM源文件的格式2:
;定义数据段,如果需要的话,其中segment和ends是一对伪操作,表示段的开始和结束
data segment ;数据段开始
;定义数据段的主体,如定义变量
data ends ;数据段结束
;定义附加段,如果需要的话
extra segment ;附加段开始
;定义附加段的主体,如定义变量
extra ends ;附加段结束
;定义代码段,必须的
code segment ;代码段开始
main proc far ;程序的主体部分,proc和endp这一对伪操作表示一个程序模块的开始和结束
assume ds:data, es:extra, cs:code ;assume 伪操作指定某个段分配给哪个段寄存器
start: ;程序的入口地址
mov ax,data
mov ds,ax ;把数据段地址装入数据段寄存器ds
mov ax,extra
mov es,ax ;把附加段地址装入附加段寄存器es
;自己所要实现的功能源代码在此添加
mov ax,4c00h ;程序结束后返回DOS
int 21h
main endp ;程序的主体部分结束
code ends ;代码段结束
end start ;汇编程序的结束,程序在start处开始执行
该步以及以下几步在电脑上一边讲解,一边演示给同学们看。





4、四、 用MASM程序产生OBJ文件
源文件建立后,就要用汇编程序对源文件汇编,汇编后产生二进制目标文件(以OBJ作为扩展名),其操作如下:
D:\>masm ex.asm
汇编程序输入的是ASM文件,其输出文件可以是3个,第一个是OBJ文件,这是我们汇编的主要目的。
第二个是LIST文件,称为列表文件,这个文件列出源程序和机器语言程序清单,并给出符号表,因而可使程序调试更加方便,这个文件可有可无,如果不需要,则可对[NUL.LST]直接按回车键。LST清单的最后部分为段名表和符号表,表中分别给出段名、段的大小及有关属性,以及用户定义的符号名、类型和属性。
第三个是CRF文件,这个文件用来产生交叉引用表REF,对于一般程序不需要建立此文件。为了建立交叉引用表,必须调用CREF程序。
至此,汇编过程已经完成了。但是,汇编程序还有另一个重要功能,可以给出源程序的出错信息。警告信息(warning errors)指出汇编程序所认为的一般性错误,严重警告错误(severe errors)则指出汇编程序认为已使汇编程序无法进行正确汇编的错误。除给出错误的个数外,汇编程序还给出出错信息,包括出错的行和错误类型。当然汇编程序只能给出程序中的语法错误,至于程序的算法或编制程序中的其他错误则程序的调试时去解决。

5、五、 用LINK程序产生EXE文件
在DOS提示符下键入LINK命令即可,具体的操作如下:
D:\>link ex.obj
LINK程序有两个输入文件OBJ和LIB。OBJ是我们需要连接的目标文件,LIB则是程序中需要用到的库文件,如果程序中没有用到库文件,则直接按回车健。LINK程序有两个输出文件EXE和MAP文件,EXE文件就是可执行文件,MAP文件是连接程序的列表文件,又称为连接映像,它给出每个段在存储器中的分配情况。


6、六、 程序的执行
在DOS提示符下直接键入可执行的文件名即可,具体的操作如下:
D:\>ex

7、七、 举例
下面这个源代码的功能是在屏幕上显示一个字符串“This is my first ASM program.”。
data segment
string db 'This is my first ASM program.',13,10,'$' ;字符串以’$’符号结尾,以单引号括起来
data ends
code segment
main proc far
assume cs:code,ds:data ;assume 伪操作指定某个段分配给哪个段寄存器,但它不能把段地址装入段寄存器中
start: ;程序的入口地址
push ds ;save old data segment
sub ax,ax ;ax寄存器清零,作为数据段0偏移地址
push ax ;零偏移地址入栈
mov ax,data
mov ds,ax ;把数据段地址装入数据段寄存器ds
lea dx,string ;把字符串首地址装入dx寄存器,或写成mov dx, offset string
mov ah,9 ;DOS功能调用,在屏幕上显示字符串
int 21h ;DOS中断
ret ;return to DOS
main endp
code ends
end start ;汇编的结束,程序在此执行
