汇编语言 4.1 4.2 源程序

4.1 一个源程序从写出到执行的过程

做一个程序从写出到执行分为以下步骤。

第一步:编写汇编源程序。

第二步:对源程序进行编译连接。

使用汇编语言编译程序对源程序文件中的源程序进行编译,产生目标文件。再用连接程序对目标文件进行连接,生成可以在操作系统中直接运行的可执行文件

可执行文件包含两部分内容:

  1. 程序(从源程序中的汇编指令翻译过来的机器码)以及数据(原程序中定义的数据)
  2. 相关的描述信息

第三步:执行可执行文件中的程序。

操作系统依照可执行文件中的描述信息,将可执行文件中的机器码和数据加载入内存,并进行相关的初始化(比如设置CS:IP指向第一条要执行的命令),然后由CPU执行程序。

主要流程如下图:

流程图

4.2 源程序

如下一段简单的汇编语言源程序:

1  assume cs:codesg
2 codesg segment
3
4 mov ax, 0123H
5 mov bx, 0456H
6 add ax, bx
7 add ax, ax
8
9 mov ax, 4c00H
10 int 21H
11
12 codesg ends
13 end

这里4~10行代码称为汇编指令,除去汇编指令以外的其他行称为伪指令。

汇编指令是有对应的机器码的指令,可以被编译为机器指令,最终为CPU所执行。

伪指令没有对应的机器指令,最终不被CPU所执行,由编译器来执行的命令,编译器根据伪指令来进行相关的编译工作。

代码示例中的伪指令详解:

  1. segment 与 ends指令

这是一对成对使用的伪指令,其在可被编译器编译的汇编程序时必须要用到的一对伪指令。其功能是定义一个段。

一个有意义的汇编程序中至少有一个段,用来存放代码。

  1. end

end是汇编程序结束的标记,结束对源程序的编译。否则,编译器在编译程序时,无法知道程序在何处结束。

  1. assume

假设某一段寄存器和程序中的某一个用segment…ends定义的段相关联。

源程序中的程序

源程序包括伪指令与汇编指令。

将源程序文件的所有内容称为源程序,将原程序中最终由计算机执行、处理的指令或数据成为程序。