我在Assembler中写了一个自定义(非常基本的“Hello world!”)bootloader,我想在那里执行一个C程序。由于丢失的stdio.h
文件,C程序会工作还是失败?我怎么能将C程序和引导加载程序捆绑到单个.bin文件中dd
到闪存驱动器/ CD?
答案 0 :(得分:7)
我不确定“lost stdio.h
”是什么意思,但许多C运行时函数(包括stdio.h
中的原型函数)都是使用系统调用实现的。如果没有运行OS,那些系统调用将无法正常工作。
可以编写在没有操作系统的情况下运行的C代码,例如,大多数常见的引导加载程序只有少量的汇编程序,而且主要是C代码。诀窍是避免使用运行时库。系统调用的替代方案,例如显示,是BIOS调用和硬件特定的I / O.
举一个例子,除了动态分配外,读取模式下的fopen
需要以下低级操作:
fread
和fgetc
的足够信息,以便在磁盘上查找数据您没有操作系统可以帮助解决这些问题,您的C代码需要实现驱动程序(可能调用BIOS)以进行块读取,并实现其他步骤的行为。