如何通过BIOS制作程序运行?

How to make a program run by BIOS?

我搜索了有关此的信息,但没有找到任何信息。

想法是:

如果我用 C 或任何其他语言编写程序,我还需要做什么才能在 BIOS 中识别它并将其作为 DOS 程序或提示程序启动?

我在使用 ISO 和 Rufus 启动带有 windows 的闪存驱动器后得到了这个想法,它在闪存驱动器中放置了一些代码供 BIOS 识别它和 运行,所以我例如,我想对我的程序做同样的事情。

提前致谢!

一个有趣但颇具挑战性的练习!

BIOS 将从引导设备中获取特定区域,称为主引导记录。在具有 OS 和一个或多个分区的 "normal" 情况下,MBR 将需要弄清楚在哪里可以找到 OS,将其加载到内存中,并将控制权传递给它。届时常规启动顺序开始,稍后 OS 将变为 运行 并能够与您交互。有关初始活动的更多详细信息,请参见 here

现在,出于教育目的,这并不是绝对必要的。您可以编写一个只读取磁盘固定部分的 MBR(BIOS 具有允许您从磁盘读取原始扇区的功能,磁盘可以被认为只是一堆扇区,每个扇区包含512 字节的信息)并启动该代码。您可以找到开源 MBR here 并且基本上可以在任何开源 OS.

中找到

那是 "easy" 部分,因为现在您可能想做一些有趣的事情。除非你想自己与硬件的每个部分进行交互,否则你将不得不依赖 BIOS 提供的服务来与键盘、屏幕和磁盘进行交互。关于 BIOS 服务的传统最佳来源是 Ralf Brown 的 interrupt list.

一个具体的注意事项:您的 C 编译器带有一个标准库,该库将需要一个特定的 OS 用于它的许多操作(例如,要执行屏幕输出,它会询问操作系统来执行该输出,OS 通常会使用 BIOS 或对硬件的一些直接访问来执行该任务)。因此,按照上面解释的路线,您还需要找出一种方法来用一些使用 BIOS 的服务替换这些服务,仅此而已 - 即,或多或少地重写标准库。

简而言之,要获得可用的东西,您将编写操作系统的基本部分...

实际上 BIOS 将在未来两年内消亡(在此日期之后 INTEL 将不再支持任何 BIOS)因此您可能想学习 UEFI 标准。 v2.4 的 UEFI 允许编写和添加自定义 UEFI 应用程序。 (顺便说一句,UEFI 计算机上的 "traditional" BIOS 设置通常作为自定义 UEFI 应用程序实现)。