【问题标题】:How to boot my simple hello world program? [closed]如何启动我简单的 hello world 程序? [关闭]
【发布时间】:2015-05-13 08:43:45
【问题描述】:

假设,我有一个简单的Hello world 程序,它内置在C 中。现在我如何在启动我的电脑时启动它?

我的愿望是做一个简单的 hello world 操作系统。 我对CC++ 非常了解,我该如何启动它?请告诉我。我需要为此学习汇编语言吗?

如果是,那么在 Assembly 中我需要首先了解什么?我应该去哪里组装(NASMMASM 等)?

我们将不胜感激!

【问题讨论】:

  • 我认为“我如何编写自己的操作系统以及它的引导加载程序”对于 SO 来说太宽泛了。
  • @Lundin 我有点怀疑......请告诉我,这里将使用什么编程语言来引导程序? C,C++ 或带有 NASM 或 MASM 的汇编器?
  • @Rajkumar 很抱歉在这里打破你的泡沫,但你问“怎么做”这一事实意味着你对计算机系统的理解不够深入,无法做到这一点.通常你会在启动后使用操作系统来运行你的进程。编写自己的引导加载程序是完全不同的事情
  • @Pandrei 一个“hello world”引导加载程序只不过是几行汇编。这个问题其实很简单。
  • @AlfredBratterud:几行汇编,BIOS 中断/视频内存的解释,磁盘 MBR 的解释,如何在不清除分区的情况下将代码放入其中的解释表,以及如何回到你的操作系统的解释,但它仍然无法在任何地方获得 OP。链接到 OSDev 并关闭问题基本上是唯一明智的做法。 ;)(此外,我怀疑 OP 使用 <stdio.h>... 写了他的“Hello world”)

标签: c++ c assembly boot


【解决方案1】:

您可以通过编写一个简单的引导加载程序来做到这一点。 This OSdev article 向您展示了一种解决方法。

关于语言:任何编译语言 (C/C++) 都会被编译成机器码,机器码同样可以 1-1 映射到汇编指令。因此,原则上您可以用 C/C++ 编写大部分引导加载程序。

打印:“启动您自己的代码”的挑战当然是您将没有任何驱动程序或任何标准库(因此,没有 printf-function 或 cout) .然而,在 x86 中,低内存的某些部分(从0xa0000 开始)在您启动时直接映射到显存,这意味着您写入这部分内存的字节将自动以文本形式出现在屏幕上。

汇编程序的选择:这真的只是个人喜好问题。对于简单的汇编语言引导加载程序,您需要避免生成的二进制文件的任何特定格式。 nasm -f bin myfile.asm -o myBootsector 只会将代码组装成原始二进制文件。

This post 有更多详细信息。

【讨论】:

  • 请给我解开这个疑问,这里将使用什么编程语言来引导? CC++Assembler with MASM or NASM?请告诉我?
  • 当您启动时,CPU 会看到机器代码 - 就像编译后的 C/C++。
  • 那么,我可以改用 C/C++ 来学习Assembler吗?
  • @Rajkumar:请点击答案中的第一个链接。 OSDev 是一个专门回答您提出的问题的网站。
  • 您需要在引导扇区的末尾附加一个引导签名,并编写自己的“打印”功能。纯 C 应该是可能的,但我建议学习它所需要的小汇编程序。如果您在内核中做的不仅仅是“Hello world”,那么您将需要它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-11
  • 1970-01-01
相关资源
最近更新 更多