私は(具体的かつGCC)Cを言うと思いますが、この目的のために最も一般的に使用されるコンパイラです。
最近のコンパイラでは、 "セグメント化された16ビット"はサポートされていません。このコードは512バイトに収まる必要があります。これらの理由から、 "PC BIOS"用の独自のブートローダを書く人は、GRUBのようなものを使うのではなく、方言(NASM、FASM、GAS)を使う傾向があります。
これは他の言語(および他のコンパイラ)を使用できないことを意味するものではありません。私は人々がさまざまな言語(Pascal、C++、C#など)でカーネルを書くのを見てきました。また、低レベルのコード(ブートコードやカーネルなど)にも制限されています。それを超えると、ドライバ、ファイルシステム、GUI、アプリケーションなど、より高いものにはほとんど何でも使用できます。また、カーネルやOSの上位に使用する独自の言語を発明する人もいます。
私は代替的だが潜在的に優れた言語について意見があります。私の意見では、「潜在的に優れている」というのは、多くの異なる言語の存在がIT産業に及ぼしている、「タバコの塔」コスト(ほとんどのプログラマが言語の違いでほとんどのソースコードを読むことができない)全体。 OSプロジェクトの場合、代替言語には理論的な利点があるかもしれませんが、実際には、言語に精通している人の数を減らし、ボランティアできるようにするというデメリットがあります。バグなど)、またはその後、ボランティアが何千人ものドライバーに貢献する必要がある場合)。
私は普通の古いアセンブラを使っています(ブートコード、カーネルコード、ドライバなど)。私はそれをお勧めしません。他のどの言語よりもアセンブリの経験が豊富で、より高いレベルの言語を使用しない理由があり、移植性が問題になることがない限り、
OSプロジェクトを構成する異なる/別のバイナリの大部分をコンパイルするために、フリーでオープンソースのコンパイラとしてGCCをお勧めします。しかし、私は非標準の言語拡張と "実装定義"の動作(どの言語とどのコンパイラを使用するかにかかわらず)の使用を避けることも推奨します。そうすれば、いつでも他のコンパイラに切り替えることができます理由)より簡単に。
[標準のリファレンス](http://wiki.osdev.org/C%2B%2B_Bare_Bones)...ブートローディングのために少しのアセンブラが必要です。また、カスタムリンカースクリプトが必要です基本的にC++を主要な開発言語として使用するのを止めるものは何もありません。あなたはライブラリを持っていなくても、そのことを念頭に置いてください。 –
コンパイラのランタイムサポートライブラリ(たとえばCRT)を移植して、この新しいオペレーティングシステムで動作させようとしています。最初にCバージョンを移植することをお勧めします。それははるかに小さいです。そして、はい、この鶏と卵の問題は、通常、このようなプロジェクトを早く終了させます。 –
マスターブートレコードの内容をビルドするためにC(単独でも* shudder * C++)コンパイラを使用することができれば驚くでしょう。スペースの量は小さく、あなたはそれのすべてのインチが必要になります。これが神がアセンブラを作った理由です。 MBRがディスクから任意の大きなチャンクを読み取ることができる場合は、好きなようにチャンクを構築することができます。読み込んで、その初期化ポイントにジャンプします。 –