C++中的引导加载程序

nos*_*e25 7 c++ assembly bootloader

我通过在软盘上制作一个小的装配引导加载程序,并且想知道是否可以在c ++中创建引导加载程序,如果是这样,我可以从哪里开始?据我所知,我不确定它甚至会使用int main().

谢谢你的帮助.

Mat*_*ery 9

如果您正在编写引导加载程序,那么您实际上就是从零开始:将一小段代码加载到内存中并执行.您可以用C++编写大部分引导加载程序,但是您需要首先引导自己的C++运行时环境.

装配是第一阶段的唯一选择,因为您需要为运行更高级别的任何东西建立一个合理的环境.做足够的运行C代码非常简单 - 你需要:

  • 代码和数据加载到正确的地方;
  • 可能还有一部分数据区必须进行零初始化;
  • 您需要将堆栈指针指向堆栈的适当内存区域.

然后,您可以在适当的位置(例如main())跳转到代码,并期望基本语言功能可以工作.(可能已经实现或链接的标准库的任何功能可能需要在此阶段进行额外的初始化.)

为C++获得合适的环境需要更多的努力,因为它需要更多的初始化,并且还具有需要运行时支持的核心语言功能(同样,这是在考虑库特性之前).这些包括:

  • 运行静态构造函数;
  • 内存分配支持newdelete;
  • 支持运行时类型信息(RTTI);
  • 支持例外;
  • 可能还有其他一些我忘记提及的事情.

在C环境启动并运行之前,这些都不是必需的,因此处理这些的代码可以用C而不是汇编程序编写(甚至可以用不使用上述功能的C++子集编写).

(相同的原则适用于嵌入式系统,这种系统使用C++并不常见,但只能以有限的方式使用 - 例如没有异常和/或RTTI,因为没有实现运行时支持.)