4.1 一个程序从写出到执行的过程
1.编写汇编源程序
2.对源程序进行编译连接
使用汇编语言的编译程序对源程序文件中的源程序进行编译产生目标文件,再用连接程序对目标文件进行连接,生成可在操作系统中直接运行的可执行文件。
可执行文件包含两部分
程序和数据 相关描述信息
3.执行可执行文件中的程序
4.2 源程序
1.伪指令
没有对应的机器码,不被CPU执行,由编译器执行。
(1)表示一个段
XXX segment
:
XXX ends
一个汇编程序是由多个段组成的,这些段被用来存放代码、数据或当作栈空间使用。
(2)end
汇编程序的结束标记,编译器在编译的过程中,如果碰到了伪指令end,就结束对源程序的编译。
(3)assume
assume可以将有特定功能的段和相关的段寄存器关联起来。
2.源程序中的“程序”
源程序:将源程序文件中所有内容称为源程序。
程序:将源程序中由计算机执行、处理的数据称为程序。
3.标号
这个段的名称将被编译、连接程序处理为一个
4.程序的结构
5.程序的返回
存在可执行文件中的机器码应该怎样得到运行呢?
一个程序P2在可执行文件中,必须有一个正在运行的P1,将P2从可执行文件中加载到内存,将CPU的控制权交给P2,P2开始运行,P1暂停运行,直到P2运行完,将CPU的控制权还给P1,P1继续运行。
一个程序结束后,将CPU的控制权返还给使它运行的程序,这个过程角程序返回。
mov ax,4c00H
int 21H
这两条指令实现的功能就是程序返回。
6.语法错误与逻辑错误
4.3 编辑源程序
4.4 编译
编译过程会生成目标文件(.obj)、列表文件(.lst)、交叉引用文件(.crf)
4.5 连接
连接过程会生成可执行文件、映像文件。输入库文件的名称。
连接的作用:
1.当源程序很大时,需要将源程序分为几个源程序,分别编译,生成目标文件,最终连接到一起。
2.当源程序调用了某个库文件中的子程序,需要将目标文件和库文件连接到一起。
3.目标文件中有些内容不能直接生成可执行文件,连接文件将这些内容处理为最终的可执行信息。所以有一个源程序文件且没有调用库文件的目标文件也要进行连接处理。
4.6 谁将可执行文件中的程序装载进入内存并使它运行?
在Dos中直接执行1.exe时,是正在运行的command,将1.exe中的程序加载进内存。command设置CPU的cs:ip指向程序的第一条指令,使程序得以运行。程序运行后,返回command中,CPU继续运行command。
4.7 程序执行过程的跟踪
当DOS运行一个程序的时候command放弃了CPU的控制权,但是debug并不放弃对CPU的控制,这样我们可以通过debug看到程序单步执行的过程。
.exe中的程序加载过程
程序加载后,ds存放着程序所在内存区的段地址,这个内存区的前256个字节存放的是PSP,DOS利用PSP和被加载程序进行通信。256个字节向后存放的是程序。