c++ - 关于写操作系统的问题

标签 c++ c assembly operating-system real-mode

<分区>

我有一些关于编写操作系统的非常具体的问题,希望能得到解答:

  1. 如果我使用 GRUB 作为引导加载程序,我需要编写多少汇编代码来加载最小的 C 内核?

  2. 我的内核将用 C 编写,它将加载一个我用 C++ 编写的命令行 shell,它不会调用任何 API 仅调用标准库,我是否需要重写整个 C++ 标准库以这样做?

  3. 我可以用 C++ 编写视频、键盘和软盘驱动程序吗?

  4. GCC 和 G++ 是否输出 16 位实模式代码?

  5. 我可以在 Windows 上使用 Mingw 编写这一切,还是必须在 Linux 上编写?

  6. 我是否需要处于实模式才能直接写入显存?

如果有人能回答我的问题,我将不胜感激

最佳答案

1:您应该只需要少量程序集来处理引导过程和加载 C 代码。我认为不应超过 20-30 行。

2-4:我还没有真正将 C++ 用于 OS 开发,但我想我记得读过它需要做更多的工作才能让它在某个地方运行。抱歉,我无法提供更多帮助。

5:您“可以”使用 MinGW 做到这一点,但根据我的经验,它通常会使事情变得复杂。我永远无法真正让 Windows 环境正常工作,但我也毫不费力地放弃了。

编辑:这里是一些示例程序集的链接。这就是我曾经不得不使用的: http://www.jamesmolloy.co.uk/tutorial_html/2.-Genesis.html

如果您对此类内容完全感兴趣,该站点的其余部分也是一个很好的教程。

关于c++ - 关于写操作系统的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7456469/

相关文章:

c++ - 为什么 g++ 使用 movabs 和一个奇怪的常量来进行简单的归约?

c++ - 如何阻止 CMake 将特定于平台的标志传递给编译器?

Java Out Of Band(称为 "urgent data")数据

c - 编译C代码时出错

从 uint16_t 转换并转换为 int16_t

delphi - 程序集和 64 位整数 - 从 pascal(delphi 6) 创建?

assembly - ARM: "STMDB SP!, {R0-R8}"(又名PUSH {R0-R8})是原子操作吗?

c++ - sort() 函数中的赋值操作

PHP exec 和 C++ 程序无限运行

c++ - sizeof 没有返回正确大小的 LPVOID 变量