c - 为什么引导加载程序是在汇编中?

标签 c embedded

我读过几个嵌入式项目,在所有这些项目中,引导加载程序都是用汇编语言而不是 C 语言编写的。这有什么原因吗?

最佳答案

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

关于c - 为什么引导加载程序是在汇编中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35589378/

相关文章:

java - 欧氏除法中的位补运算符

c - 函数错误: double[] to double?

embedded - 充分利用糟糕的 "checksum"算法

floating-point - 在 Cortex M0 上,浮点比较与整数比较的开销有多大?

linux - 使用 GDB 将正在运行的进程 STDOUT/STDERR 重定向到 SSH STDOUT

c - 如何使用 fseek 将位置指针移动到文件中的下一行

c - 在数组中使用 memcpy 删除

c - goto 的可接受用途是什么?

c++ - sprintf 缓冲区全局数据溢出 - 如何检测它,Windows

c - 什么 C 源代码将编译为针对 GOT 中另一个指针的调用 *get_func@GOTPCREL(%rip) 和 cmp?