Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1268488
  • 博文数量: 482
  • 博客积分: 13297
  • 博客等级: 上将
  • 技术积分: 2890
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-12 16:25
文章分类

全部博文(482)

文章存档

2012年(9)

2011年(407)

2010年(66)

分类: WINDOWS

2011-12-10 10:32:45

也许大家曾经注意过使用Keil C51来编译链接生成目标代码之后,在我们的主程序之前有些代码不是我们写的,它们从哪里来的?

Keil C51的\C51\LIB目录下有STARTUP.A51和INIT.A51两个文件,前者保存的是启动代码,而后者保存的是初始化代码。这些代码都是在我们的C主程序之前运行的,在复位之后,立即运行的是STARTUP。之后STARTUP调用INIT来初始化程序的全局变量。最后INIT调用C程序的main函数。

这两个文件均为汇编写成,它们都包含在Keil C库中。若我们没有将STARTUP.A51和INIT.A51复制并修改然后包含进我们的project中,则链接器会自动从库文件中把缺省的内容链接进目标代码。

有关STARTUP.A51和INIT.A51的更详细内容可以参考Keil C51 Compiler User's Guide。

====

http://blog.21ic.com/user1/908/archives/2005/1506.html

----------------------------------------------------------------------------------------------

80C51 在电源重置后(Power On Reset)所执行的第一个程序模块并不是使用者的主程序 
main(),而是一个隐藏在KEIL-C51 标准链接库中称为startup.a51 的程序模块。 
startup.a51 的主要工作是把包含idataxdatapdata 在内的内存区块清除为0,并 
且初始化递归指针。接着startup.a51 被执行的仍然是一个隐藏在KEIL-C51 标准链接库 
中称为init.a51 的程序模块。而init.a51 的主要工作则是初始化具有非零初始值设定的 
变量。 

在完成上述的初始化程序之后,80C51 的控制权才会交给main() 开始执行使用者的程序。

====

http://blog.csdn.net/pang123hui/article/details/6955646

阅读(1951) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~