Masm First Program
下面我们来描述一下,汇编语言程序从写出到最终执行的简要过程。具体步骤如下:
第一步:编写汇编程序。文件格式:文件名.masm
第二步:对源程序进行编译连接。
使用汇编语言编译程序对源程序文件中的源程序进行编译,产生目标文件;再用连接程序对目标文将进行连接,生成可操作系统中直接运行的可执行文件。
可执行文件包括两部分,①程序(从源程序中的汇编指令翻译过来的机器码)和(源程序中定义的数据)②相关的描述的消息(比如,程序有多大、有占用多少内存空间等)。
第三步:执行可执行文件中的程序。
操作系统依照可执行文件中的描述信息,将可执行文件中的机器码和数据加载入内存,并进行相关的初始化,然后由CPU执行程序。
整个执行过程,如下图描述:
现在给出一段简单的程序来讲述相关内容。
assume cs:codeseg
codeseg segment
mov ax,0123H
mov bx,0456H
add ax,bx
add ax,ax
mov ax,4c00H
int 21H
codeseg ends
end
说明:
⒈ 伪指令
在汇编语言源程序中,包括两种指令,一种是汇编指令,一种是伪指令。汇编指令是有对应的机器码的指令,可以被编译位机器指令,最终为CPU所执行。而伪指令没有对应的机器指令,最终不被CPU所执行。而是被编译器执行的指令。
上一实例中,segment和ends 一对编写汇编程序必须使用的伪指令,其功能是定义一个段,segment表示为段开始,ends 表示为段结束,在定义一个段时必须有一个名称来作为标识。end是一个汇编程序的结束标记,编译器在编译汇编程序的过程中,如果碰到伪指令end,就结束对源程序的编译。assume表示假设某一段寄存器和程序中的某一个用segment ...ends定义的段相关联。
⒉源程序中的“程序”
用汇编语言写的程序,包括伪指令和汇编指令,源程序中的汇编组成了最终由计算机执行的程序,而源程序中的伪指令是由编译器来处理的。
⒊程序的结构
汇编程序结构同我们了解的高级程序有一些不一样,前者由代码、数据、运算法则等组成,后者由一些段构成的,其中段中存放代码、数据、或将某个段当作栈空间。
4.程序返回
汇编程序执行过程,最先一汇编指令的形式存在源程序中,经编译、链接转变为机器吗,存储在可执行文件中。对于一个单系统(如DOS)而言,执行程序过程如下:P2在可执行文件中,这必须有一个正在运行的程序P1,将P2从执行文件中加载入内存后,将CPU的控制权交给P2,P2才能得以运行。P2开始运行后,P1暂停运行。待P2运行完毕后,应该将CPU 的控制权还给使它得以运行的程序P1,此后,P1继续运行。
现在我们知道一个程序结束后,将CPU的控制权交还给使它得以运行的程序,被称作程序返回。
前面我们熟悉的两条指令:
mov ax,4c00H
int 21H
以上其实现的功能就是程序返回,解释将后续揭晓。
了解了汇编源程序的后来,下面来说一下源程序的编译事项。主要了解如何编译源程序和在编译过程中产生的相关文件。
编译源文件方式:使用编译器(masm.exe)执行汇编源程序。执行完成后,将生成3个文件分别是目标文件(.obj)也是我们需要最终结果、列表文件(.lst)、交叉引用文件(.crf),后两个文件只是中间结果。
通过对源程序的编译,我们还需要做的是连接编译成功的目标文件。
连接执行方式:使用连接工具(link.exe)执行一生成的obj文件。这一步是将目标文件与系统可执行文件相结合,使其可被系统运行。
连接目标程序成功后,将生成系统可执行文件(.exe)。
对于上面的简述,进而知道汇编程序从写出到执行的过程简要描述如下:
注:在初次学习汇编时请勿使用IDE工具,尽量使用masm、link、debug等