为什么启动文件通常用汇编而不是 C 写?

为什么启动文件通常用汇编而不是 C 写?

难度:★
本文首发于「OneChan」,未经授权禁止转载。


前两篇文章我们聊了向量表和复位流程。有读者看完后问了一个很实在的问题:

“既然Reset_Handler里调了SystemInit__main,这两个都是 C 函数,那为什么Reset_Handler自己不能用 C 写?”

这个问题问到了汇编和 C 的本质边界。

答案是:不是不想用 C,是在那个时间点,C 语言运行所需的“基础设施”还没搭好。用 C 写启动代码,就像要求一个还没学会走路的小孩去跑马拉松——它连站都站不稳。

今天我们把这个问题彻底讲透。


一、C 函数运行需要什么条件?

先看一个最简单的 C 函数:

voidmy_function(void){