从引导加载程序调用32位或64位程序

时间:2012-10-29 04:49:50

标签: c assembly bootloader

互联网上似乎有很多关于编写以下3个引导加载程序的相同信息:

  1. 无限循环jmp $
  2. 打印单个字符
  3. 打印“Hello World”。
  4. 这太棒了,我已经完成了这三个版本,但没有遇到什么麻烦。

    我想在C中编写一些32位或64位代码并对其进行编译,并从引导程序中调用该代码...基本上是一个引导加载程序,例如,将计算机设置为运行一些简单的数字模拟。例如,我将首先列出素数,然后可能是用户的一些输入/输出可能会计算傅里叶变换。我不知道。

    我还没有找到关于如何执行此操作的任何信息,但在开始之前我已经可以预见到一些问题了。

    首先,编译C程序会将其编译为多个不同文件中的一个,具体取决于目标。对于Windows,它是一个PE文件。对于Linux,它是一个.out文件。这些文件都完全不同。在我的实例中,目标不是Windows或Linux,它只是我在引导程序中编写的内容。

    其次,实际代码在哪里?引导加载程序正好是512字节,但我用C编写的程序肯定会编译成更大的程序。它需要坐在我的(虚拟)硬盘上,可能在某种文件系统中(我甚至没有定义过!)我需要将这个文件中的信息加载到内存中才能考虑执行它。但根据我的理解,所有这些都比12行“Hello World”引导程序复杂许多,更复杂。

    所以我的问题是:如何从我的16位引导程序中调用大型32位或64位程序(用C / C ++编写)。

1 个答案:

答案 0 :(得分:4)

这是一个很大的话题。

您应该首先学习进入并了解protected mode