2017-09-27 62 views
0

我在網上看到很多教程,其中assembly languageC一起使用,以構建新的內核映像。但我不明白爲什麼要裝配,而C Compiler可以從c代碼生成asm是否可以在不使用asm代碼的情況下創建內核映像?

使用assembly代碼進行內核編程的原因是什麼?以及如何在C下開發內核而不需要在asm中編寫代碼?

+1

我不認爲這是你的意思,我不知道任何方式使它工作,但是,理論上你可能會強制編譯器生成你想要的代碼。否則,我不認爲操作系統可以支持中斷,任務切換和許多其他功能。 –

+0

我不確定[爲什麼程序集需要啓動任何操作系統內核](https://stackoverflow.com/questions/22794239/why-assembly-needed-to-kick-start-any-os-kernel)是一個確切的副本。另一個問題更關注*初始化*和*啓動*內核。 –

回答

2

你沒有定義什麼讓C中的內核對你意味着什麼。

您可以在C代碼中使用asm語句或聲明到embed assembler(但這是「作弊」並且不再是可移植的C語言)。

但你不能寫在純移植的C整個multi-tasking內核,因爲有些東西(特別是那些操縱任務或continuationscall stacksinterrupts - 即scheduler - 或virtual memory)不能在C.通知進行編碼,即使longjmp(3)不能在純C.

來實現查看OSDEV wiki和讀Operating Systems : Three Easy Pieces

研究還現有調度器的源代碼,中斷處理程序,VM的子系統。 ...在free software操作系統(問自己如何重新編碼他們正在使用的彙編代碼)。彙編程序是必需的(不僅僅是或者不是爲了「性能」或「可讀性」的原因)。

+0

我閱讀了「Operating Systems:Three Easy Pieces」這本書的VM/sched部分,但是我仍然沒有理解爲什麼這些情況需要asm。 – Kais

+0

內核是多任務處理。 – Kais

+1

嘗試用純C編寫你的調度程序,你將無法做到這一點。 –

相關問題