第四章:第一个程序03
让编程改变世界
Change the world by program
可执行文件中的程序装入内存并运行的原理
在DOS中,可执行文件中的程序P1若要运行,必须有一个正在运行的程序P2 ,将 P1 从可执行文件中加载入内存,将CPU的控制权交给它,P1才能得以运行。 当P1运行完毕后,应该将CPU的控制权交还给使它得以运行的程序P2。1.exe的执行过程
1)我们在提示符“G:TRY”后面输入可执行文件的名字“1”,按Enter键。 2)1.exe中的程序运行; 3)运行结束,返回,再次显示提示符“G:TRY”。 执行第(1)步操作时,有一个正在运行的程序将1.exe中的程序加载入内存,这个正在运行的程序是什么? 它将程序加载入内存后,如何使程序得以运行? 执行第(3)步操作,程序运行结束后,返回到哪里?知识扩充:
操作系统的外壳 操作系统是由多个功能模块组成的庞大 、复杂的软件系统。任何通用的操作系统 ,都要提供一个称为shell(外壳)的程序 ,用户(操作人员)使用这个程序来操作计算机系统工作。 DOS中有一个程序command.com ,这个程序在 DOS 中称为命令解释器,也就是DOS系统的shell。 (1)我们在DOS中直接执行 1.exe 时,是正在运行的command将1.exe中的程序加载入内存。 (2)command设置CPU的CS:IP指向程序的第一条指令(即程序的入口),从而使程序得以运行。 (3)程序运行结束后,返回到command中,CPU继续运行command。汇编程序从写出到执行的过程
[kml_flashembed publishmethod="static" fversion="8.0.0" movie="http://blog.fishc.com/wp-content/uploads/2012/07/4_一个源程序从写出到执行的过程.swf" width="400" height="300" targetclass="flashmovie" wmode="transparent"]
程序执行过程的跟踪
为了观察程序的运行过程 ,我们可以使用Debug。 Debug 可以将程序加载入内存,设置CS:IP指向程序的入口,但Debug并不放弃对CPU 的控制,这样,我们就可以使用Debug 的相关命令来单步执行程序 ,查看每条指令指令的执行结果。接下来可以用R命令看一下各个寄存器的设置情况:
[caption id="attachment_312" align="aligncenter" width="300"]
在DOS系统中.EXE文件中的程序的加载过程如下
[caption id="attachment_313" align="aligncenter" width="300"]