我搜索了有关此的信息但没有找到任何信息。
这个想法是:
如果我用 C 或任何其他语言编写程序,我还需要做什么才能在 BIOS 中识别并作为 DOS 程序或只是提示程序启动?
我在使用 ISO 和 Rufus 启动带有 Windows 的闪存驱动器后得到了这个想法,它将一些代码放入闪存驱动器中以便 BIOS 识别并运行,所以我想对我的程序执行相同的操作,例如例子。
提前致谢!
一个有趣但相当具有挑战性的练习!
BIOS 将从引导设备中获取特定区域,称为主引导记录。在具有操作系统和一个或多个分区的“正常”情况下,MBR 需要确定在哪里可以找到操作系统,将其加载到内存中,并将控制权传递给它。那时,常规启动顺序开始,稍后操作系统将运行并能够与您交互。有关初始活动的更多详细信息,请参见此处
现在,出于教育目的,这并不是绝对必要的。您可以编写一个仅读取磁盘固定部分的 MBR(BIOS 具有允许您从磁盘读取原始扇区的功能,磁盘可以被视为一堆扇区,每个扇区包含 512 字节信息)并启动该代码。您可以在此处以及基本上在任何开源操作系统中找到开源 MBR 。
这是“简单”的部分,因为现在您可能想做一些有趣的事情。除非您想亲自与硬件的各个部分进行交互,否则您将不得不依赖 BIOS 提供的服务来与键盘、屏幕和磁盘进行交互。传统上有关 BIOS 服务的最佳来源是 Ralf Brown 的中断列表。
一个具体的考虑因素:您的 C 编译器附带一个标准库,并且该库需要特定的操作系统来执行其许多操作(例如,要执行到屏幕的输出,它将要求操作系统执行该输出,而操作系统通常会使用 BIOS 或对硬件的某些直接访问来执行该任务)。因此,在采用上面解释的路线时,您还需要找到一种方法来用一些使用 BIOS 的服务来替换这些服务,仅此而已 - 即或多或少重写标准库。
简而言之,为了获得可用的东西,您将编写操作系统的基本部分......