汇编语言_第4章 第一个程序

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

- 第一步:编写汇编源程序。
这一步的工作结果:产生一个存储源程序的文本文件
- 第二步:对源程序进行编译连接
使用汇编语言编译程序对源程序文件中的源程序进行编译,产生目标文件;再用连接程序对目标文件进行连接,生成可在操作系统中直接运行的可执行文件。
可执行文件包含2部分内容:

  • 程序(从源程序中的汇编指令翻译过来的机器码)和数据(源程序中定义的数据)
  • 相关的描述信息(比如,程序有多大、要占用多少内存空间)
    这一步的工作结果:产生一个可在操作系统中运行的可执行文件。

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

在这里插入图片描述

4.2 源程序
在这里插入图片描述
程序说明:
1.伪指令
伪指令:是由编译器来执行的指令,编译器根据伪指令来进行相关的编译工作。
(1)XXX segment … XXX ends
segment和ends 是一对成对使用的伪指令,这是在写可被编译器编译的汇编程序时,必须要用到的一对伪指令。
功能: 定义一个段
segment 说明一个段的开始; ends 说明一个段结束; 一个段必须有一个名称来标识,使用格式为:
段名 segment

段名 ends

一个源程序中所有将被计算机所处理的信息:指令、数据、栈,被划分到不同的段中。一个有意义的汇编程序中至少要有一个段,这个段用来存放代码。

(2)end 汇编程序的结束标记
编译器在编译汇编程序的过程中,如果碰到了伪指令end,就结束对源程序的编译。

(3)assume “假设”
它假设某一段寄存器和程序中的某一个用segment…ends 定义的段相关联。

2.源程序中的“程序”
源程序文件中的所有内容称为源程序,将源程序中最终由计算机执行、处理的指令或数据,称为程序。
在这里插入图片描述

3.标号
在汇编程序中,除了汇编指令和伪指令外,还有一些标号,如 codesg , 一个标号指代了一个地址。
codesg 在 segment 前面,作为一个段的名称,这个段的名称最终将被编译、连接程序处理为一个段的段地址。

4.程序的结构
例:编程运算2^3 .
在这里插入图片描述

5.程序返回
程序返回:一个程序结束后,将CPU的控制权交还给使它得以运行的程序,这个过程称为程序返回。
mov ax,4c00H
int 21H
在此只要知道,在程序的末尾使用这两条指令就可以实现程序的返回。
在这里插入图片描述
6. 语法错误和逻辑错误
程序在编译时被编译器发现的错误是语法错误。
在源程序编译后,在运行时发生的错误是逻辑错误。
例如:程序没有返回,属于逻辑错误。

4.3 编辑源程序
可以用任意的文本编辑器来编辑源程序,最终将程序保存为文件c:/1.asm 。
在这里插入图片描述

4.4 编译
在编译过程中,我提供了一个输入,即源程序文件。最多可以得到3个输出:目标文件(.obj)、列表文件(.list)、交叉引用文件(.crf)
4.5 连接
连接的作用:
(1)当源程序很大时,可以将它分为多个源程序文件来编译,每个源程序编译成为目标文件后,再用连接程序将他们连接到一起,生成一个可执行文件。
(2)程序中调用了某个库文件中的子程序,需要将这个库文件和该程序生成的目标文件连接到一起,生成一个可执行文件。
(3)一个源程序编译后,得到了存有机器码的目标文件,目标文件中的有些内容还不能直接用来生成可执行文件,连接程序将这些内容处理为最终的可执行信息。所以,在只有一个源程序文件,而又不需要调用某个库中的子程序的情况下,也必须用连接程序对目标文件进行处理,生成可执行文件。

注:对于连接的过程,我们要得到的最终结果是 可执行文件。

4.8 谁将可执行文件中的程序装载进入内存并使它运行?
Q4.1:有一个正在运行的程序将1.exe中的程序加载入内存,这个正在运行的程序是什么?它将程序加载入内存后,如何使得程序运行?

  • 在DOS中直接执行1.exe时,是正在运行的command ,将1.exe中的程序加载入内存;
  • command 设置CPU CS:IP指向程序的第一条指令(即程序入口),从而使程序得以运行;

Q4.2:程序运行结束后,返回到哪里?

  • 程序运行结束后,返回到command中,CPU继续运行command。

- 操作系统的外壳
任何通用的操作系统,都要提供一个称为shell(外壳)的程序,用户(操作人员)使用这个程序来操作计算机系统进行工作。
DOS中有一个程序 command.com, 这个程序在DOS中称为命令解释器,即DOS系统的shell。
如果用户要执行一个程序,则输入该程序的可执行文件的名称,command 首先根据文件名找到可执行文件,然后将这个可执行文件中的程序加载入内存,设置CS:IP指向程序的入口。此后,command 暂停运行,CPU运行程序。程序运行结束后,返回到command中,command 再次显示由当前盘符和当前路径组成的提示符,等待用户输入。
在这里插入图片描述

4.9 程序执行过程的跟踪
DOS系统中.exe 文件中的程序加载过程:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意:
在DOS中运行程序时,是command 将程序加载入内存,所以程序运行结束后返回到command中,而在这里是Debug 将程序加载如内存,故程序运行结束后要返回到Debug中。

使用Q命令退出Debug,将返回command中,因为Debug是由command家在运行的。
在DOS中用 debug 1.exe 运行 Debug 对1.exe 进行跟踪时,

  • 程序加载顺序:command 加载 Debug,Debug加载 1.exe 。
  • 程序返回顺序: 从1.exe中的程序返回到Debug,从Debug返回到command。

To be continue…

猜你喜欢

转载自blog.csdn.net/madao1234/article/details/83536088