0

我在汇编程序中编写了一个自定义(非常基本的“Hello world!”)引导加载程序,我想在其中执行一个 C 程序。C 程序会工作,还是由于stdio.h文件丢失而失败?以及如何将 C 程序与引导加载程序捆绑到单个 .bin 文件到dd闪存驱动器/CD 中?

4

1 回答 1

7

我不确定您所说的“丢失stdio.h”是什么意思,但是许多 C 运行时函数,包括在 中原型化的函数,stdio.h都是使用系统调用实现的。如果没有操作系统运行,这些系统调用将无法工作。

可以编写在没有操作系统的情况下运行的 C 代码,例如,大多数常见的引导加载程序只有少量的汇编程序,大部分是 C 代码。诀窍是避免使用运行时库。系统调用(例如显示)的替代方法是 BIOS 调用和特定于硬件的 I/O。

仅举一个例子,除了动态分配之外,fopen在读模式下还需要以下低级操作:

  • 从存储中读取数据块
  • 读取文件系统元数据(通常是超级块和根目录)
  • 处理文件系统元数据以找出文件内容的存储位置
  • 创建一个 FILE 对象,该对象包含足够的信息freadfgetc查找磁盘上的数据

您没有操作系统来帮助解决这些问题,您的 C 代码将需要实现驱动程序(可能调用 BIOS)以进行块读取,并实现其他步骤的行为。

于 2011-05-29T17:03:30.803 回答