4.1 一个源程序从写出到执行的过程
做一个程序从写出到执行分为以下步骤。
第一步:编写汇编源程序。
第二步:对源程序进行编译连接。
使用汇编语言编译程序对源程序文件中的源程序进行编译,产生目标文件。再用连接程序对目标文件进行连接,生成可以在操作系统中直接运行的可执行文件。
可执行文件包含两部分内容:
- 程序(从源程序中的汇编指令翻译过来的机器码)以及数据(原程序中定义的数据)
- 相关的描述信息
第三步:执行可执行文件中的程序。
操作系统依照可执行文件中的描述信息,将可执行文件中的机器码和数据加载入内存,并进行相关的初始化(比如设置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所执行,由编译器来执行的命令,编译器根据伪指令来进行相关的编译工作。
代码示例中的伪指令详解:
- segment 与 ends指令
这是一对成对使用的伪指令,其在可被编译器编译的汇编程序时必须要用到的一对伪指令。其功能是定义一个段。
一个有意义的汇编程序中至少有一个段,用来存放代码。
- end
end是汇编程序结束的标记,结束对源程序的编译。否则,编译器在编译程序时,无法知道程序在何处结束。
- assume
假设某一段寄存器和程序中的某一个用segment…ends定义的段相关联。
源程序中的程序
源程序包括伪指令与汇编指令。
将源程序文件的所有内容称为源程序,将原程序中最终由计算机执行、处理的指令或数据成为程序。