通过Assembler在引导加载程序级别执行C程序

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

我不确定“丢失的stdio.h ”是什么意思,但许多C运行时函数,包括那些在stdio.h原型的函数,都是使用系统调用实现的。 如果没有运行OS,那些系统调用将不起作用。

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

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

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

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