学习了底层之后,会有一个疑问,为什么我程序运行main函数就会自己去运行了?其实这个事情是编译器帮你做的,编译器帮你加了些许指令,下面就简单介绍下
在TC 2.0的编译器下,tc.exe文件会把c0s.obj目标文件和我们自己写的.obj的目标文件一起进行连接,生成.exe文件,按照这样的方法生成的.exe文件中程序的运行过程如下所示
- 1、c0s.obj里面的程序会先执行,然后进行相关的初始化,比如:申请资源,设置DS、SS等寄存器
- 2、c0s.obj里的程序调用main函数,这样用户程序就会从main函数开始执行了
- 3、用户程序从main函数返回到c0s.obj程序当中
- 4、c0s.obj的程序接着运行,进行相关资源的释放,环境恢复等工作
- 5、c0s.obj的程序调用DOS的int 21h例程的4ch号功能,程序返回
其实C程序必须从main函数开始执行是C语言的规定,但其实这个规定不是在编译的时候保证的,也不是在连接的时候保证的,而是用下面的机制所保证的
C开发系统提供了用户写的应用程序正确运行所必须的初始化和程序返回等相关程序,这程序就放在相关的.obj文件当中
之后就是需要将这些文件和我们写的.obj文件进行一起连接,然后才可以生成可以正确运行的.exe文件
还有就是在C语言开发系统提供的.obj文件里面的程序是要对main函数进行调用