C++ 链接到内核
请问,有人知道如何将引导与内核链接吗?例如,我有以下引导代码:C++ 链接到内核,c++,assembly,operating-system,kernel,iostream,C++,Assembly,Operating System,Kernel,Iostream,请问,有人知道如何将引导与内核链接吗?例如,我有以下引导代码: [BITS 16] [ORG 0x7C00] [global start] [extern _main] start: call _main cli hlt 我建议看一下(user786653也发布了这篇文章)…它有很多有用的资源帮助您编写操作系统 如果你真的想从头开始使用16bit汇编,并且你想使用32位C++代码,你必须做以下步骤: 创建引导加载程序的第一阶段(一个加载引导加载程序其余部分的小文件)。它必须正好是51
[BITS 16]
[ORG 0x7C00]
[global start]
[extern _main]
start:
call _main
cli
hlt
<对于我的C++文件:
#include <iostream>
#include <string>
int main()
{
std::cout << "Hello World" << std::endl;
return 0;
}
#包括
#包括
int main()
{
std::cout从中查看。但是您的代码目前远不能使用iostream
首先,您不能使用C/C++标准库,因为在业余操作系统中,它不存在*
第二,你的C++代码看起来是32位格式,而汇编代码是16位格式的。除非两个都是32,否则不能链接。< /P>
我建议看一下(user786653也发布了这篇文章)…它有很多有用的资源帮助您编写操作系统
如果你真的想从头开始使用16bit汇编,并且你想使用32位C++代码,你必须做以下步骤:
创建引导加载程序的第一阶段(一个加载引导加载程序其余部分的小文件)。它必须正好是512字节
创建引导加载程序的第二阶段(这个阶段设置GDT,启用A20线路,并切换到32位保护模式…-它还可以设置视频模式,获取RAM信息,并将其传递到32位内核…)
创建一个32位内核存根(在C/C++中,最好是C)。这将为操作系统的内核创建主环境
编写一些C/C++标准库例程。String.h是您的主要优先级(C++上的CString)。另外,Stdio.h文件也很有用(C++上的CStdio)
在内核存根的主函数中,调用打印例程
(注意:要做到这一点,您必须具备C/C++方面的高级知识,并且至少具备一些汇编方面的知识)
*如果您在自己的库中编程,则忽略第一条语句
希望这有帮助
-阿德里安