我在网上看到了很多教程,其中assembly language
与C
一起使用以构建新的内核映像。但我不明白为什么要求汇编,而C Compiler
可以从c代码生成asm
。
使用assembly
代码编程内核的原因是什么?如何在C
下开发内核而无需在asm中编写代码?
答案 0 :(得分:2)
你没有定义用C语言制作内核对你意味着什么。
您可以在C代码中使用asm
语句或声明embed assembler(但这是“作弊”而且不再是可移植C)。
但你不能在纯可移植C中编写整个multi-tasking内核,因为有些东西(特别是那些操纵任务或continuations或call stacks或interrupts - 即{ {3}} - 或scheduler)无法用C编码。请注意,即使virtual memory也无法在纯C中实现。
请参阅longjmp(3) wiki并阅读OSDEV
在Operating Systems : Three Easy Pieces操作系统中研究现有调度程序,中断处理程序,VM子系统等的源代码(并问自己如何在C中重新编码汇编代码他们正在使用)。其中需要汇编程序(不仅仅是“性能”或“可读性”原因)。