如何启动我的简单 hello world 程序?
How to boot my simple hello world program?
假设,我有一个内置于 C
中的简单 Hello world
程序。现在如何在启动我的电脑时启动它?
我的愿望是做一个简单的hello world操作系统。
我对 C
和 C++
很了解,我该如何启动它?请告诉我。我需要为此学习汇编语言吗?
如果是,那么在 Assembly 里面我需要先了解什么?我应该去哪里组装(NASM
、MASM
等等)?
不胜感激!
您可以通过编写一个简单的引导加载程序来完成此操作。 This OSdev article 向您展示了一种解决方法。
关于语言: 任何编译语言 (C/C++) 都会被编译成机器码,同样可以 1-1 映射到汇编指令。因此,原则上您可以在 C/C++ 中编写大部分引导加载程序。
打印: "booting your own code" 的挑战当然是你没有任何驱动程序或任何标准库(所以,没有 printf
-函数或 cout
)。然而,在 x86 中,低内存的某些部分(从 0xa0000
开始)在您启动时直接映射到视频内存,这意味着您写入这部分内存的字节将自动以文本的形式出现在屏幕上。
选择 assembler: 这真的只是一个品味问题。对于简单的汇编语言引导加载程序,您需要避免对生成的二进制文件进行任何特定格式设置。 nasm -f bin myfile.asm -o myBootsector
只会 assemble 将代码转换为原始二进制文件。
This post 有更多详细信息。
假设,我有一个内置于 C
中的简单 Hello world
程序。现在如何在启动我的电脑时启动它?
我的愿望是做一个简单的hello world操作系统。
我对 C
和 C++
很了解,我该如何启动它?请告诉我。我需要为此学习汇编语言吗?
如果是,那么在 Assembly 里面我需要先了解什么?我应该去哪里组装(NASM
、MASM
等等)?
不胜感激!
您可以通过编写一个简单的引导加载程序来完成此操作。 This OSdev article 向您展示了一种解决方法。
关于语言: 任何编译语言 (C/C++) 都会被编译成机器码,同样可以 1-1 映射到汇编指令。因此,原则上您可以在 C/C++ 中编写大部分引导加载程序。
打印: "booting your own code" 的挑战当然是你没有任何驱动程序或任何标准库(所以,没有 printf
-函数或 cout
)。然而,在 x86 中,低内存的某些部分(从 0xa0000
开始)在您启动时直接映射到视频内存,这意味着您写入这部分内存的字节将自动以文本的形式出现在屏幕上。
选择 assembler: 这真的只是一个品味问题。对于简单的汇编语言引导加载程序,您需要避免对生成的二进制文件进行任何特定格式设置。 nasm -f bin myfile.asm -o myBootsector
只会 assemble 将代码转换为原始二进制文件。
This post 有更多详细信息。