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

Moh*_*nde 0 c assembly bootloader

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

Ben*_*igt 7

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

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

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

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

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