为什么bootloader在汇编?

dou*_*leE -2 c embedded

我已经阅读了几个嵌入式项目,并且在所有这些项目中,引导加载程序是用汇编而不是C编写的.这有什么理由吗?

R..*_*R.. 6

通常至少入口点存根以及可能转换到真实内核需要在汇编中编写,因为它们涉及在C中无法表示的控制传递/调用约定约束.例如,如果引导加载程序需要初始化在堆栈可用之前指向ram的堆栈指针,如果没有笨拙的编译器扩展,这不能用C表示.但是,通常可以将写入的数量保持为非常小并且与这些类型的边界隔离.如果引导加载程序的其余部分也是用asm编写的,那通常表明作者很难评估成本(维护,错误等)与收益(可能更小的尺寸).