1. 汇编负责启动,堆栈初始化,系统运行段划分等关键代码,c语言用在算法,逻辑等与硬件关联不大的地方
2. CPU上电后会从IO空间的某地址取第一条指令。但此时:PLL没有启动,CPU工作频率为外部输入晶振频率,非常低;CPU工作模式、中断设置等不确定;存储空间的各个BANK(包括内存)都没有驱动,内存不能使用。在这种情况下必须在第一条指令处做一些初始化工作,这段初始化程序与操作系统独立分开,称之为bootloader。
一个嵌入式Bootloader最初始部分的代码几乎必须是用汇编语言写成的,因为开发板刚上电后没有准备好C程序运行环境,比如堆栈指针SP没有指到正确的位置。汇编代码应该完成最原始的硬件设备初始化,并准备好C运行环境,这样后面的功能就可以用C语言来写了。
3. 因為有些動作, 像 Coprocessor 及 status register 的操作, User Mode/Supervisor Mode 的切換, SVC/IRQ/FIRQ/USER Stack 的設定, C language 都沒有相對應的 keyword, 所以只能用 Assembly 來實現.