Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 链接到内核_C++_Assembly_Operating System_Kernel_Iostream - Fatal编程技术网

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++方面的高级知识,并且至少具备一些汇编方面的知识)

    *如果您在自己的库中编程,则忽略第一条语句

    希望这有帮助

    -阿德里安