3 つの質問があります。
- C ソース コードをマシン コードにコンパイルするには、どのコンパイラを使用できますか? また、どのように使用できますか?
- どのアセンブラを使用できますか? また、それを使用して ASM を機械語にアセンブルするにはどうすればよいですか?
- (オプション) どのようにマシン コードを適切なアドレスに配置することをお勧めしますか (つまり、ブートローダーのマシン コードはブート セクタに配置する必要があります)?
私の目標: 基本的なオペレーティング システムを作成しようとしています。これは、個人的に作成されたブートローダーとカーネルを使用します。また、Linux カーネル (つまりドライバー) から少しずつ取り出して、カーネルに統合することも試みました。私は、最近のほとんどのコンピューターでメモリをいじるための 32 ビット DOS ライクなオペレーティング システムを作成したいと考えています。私のオペレーティング システムはそれを必要とするほど動的ではないので、私は自分のオペレーティング システム用の実行形式を作成するつもりはないと思います。
私の状況: Intel Celeron CPU を搭載した x86-64 Windows 8 ラップトップで実行しています。セキュアブートを使用していると思います。Intel Core I3 CPU を搭載した x86-64 デスクトップでオペレーティング システムをテストします。私は、オペレーティング システムとその技術について平均的な理解を持っています。私は、このプロジェクトに必要な C、ASM、およびコンピューター理論を知っています。また、私が 16 歳で、コンピューター サイエンスに関する正式な教育を受けていないことも注目に値すると思います。
私の調査: C が通常何にコンパイルされるかを Google で検索した後、マシン コード、バイナリ、プレーン バイナリ、生のバイナリ、アセンブリ、および再配置可能なオブジェクト コードに及ぶ答えを見つけました。私が理解しているアセンブリは、通常、PE 形式の実行可能ファイルにアセンブルします。Cygwin、GCC C、および MingW C コンパイラについて聞いたことがあります。アセンブラーに関しては、FASM、MASM、および NASM について聞いたことがあります。OSDevやOSDeverなどの Web サイトを検索しました。
私が試したこと: GCC をセットアップし (悪夢)、クロスコンパイラーを作成しようとしました (別の悪夢)。
結論: おわかりのように、私はコンパイラ、アセンブラ、および実行形式についてさまざまな混乱を抱えています。私の質問に答えて、私の無知を払拭してください。これらはおそらく、履歴書に OS を載せることを妨げている唯一の理由です。申し訳ありませんが、もっと多くのリンクを含めることができましたが、stackoverflow では 2 つ以上作成することはできませんでした。ありがとうございます!