0

カスタム (非常に基本的な「Hello world!」) ブートローダーをアセンブラーで作成しました。その中で C プログラムを実行したいと考えています。C プログラムは動作しますか、それともファイルが失われたために失敗しstdio.hますか? また、C プログラムとブートローダーを単一の .bin ファイルにバンドルしddて、フラッシュ ドライブ/CD に保存するにはどうすればよいでしょうか?

4

1 に答える 1

7

「失われた」とはどういう意味かわかりませんstdio.hが、 でプロトタイプ化されたものを含む多くの C ランタイム関数は、stdio.hシステム コールを使用して実装されています。OS が実行されていないと、これらのシステム コールは機能しません。

OS なしで実行する C コードを作成することは可能です。たとえば、最も一般的なブートローダーには、ごくわずかな量のアセンブラーと大部分が C コードしかありません。秘訣は、ランタイム ライブラリの使用を避けることです。syscall に代わるものとして、例えば表示などがありますが、これは BIOS 呼び出しとハードウェア固有の I/O です。

ほんの一例を挙げると、動的割り当てに加えてfopen、読み取りモードでは次の低レベル操作が必要です。

  • ストレージからのデータ ブロックの読み取り
  • ファイル システム メタデータの読み取り (多くの場合、スーパーブロックとルート ディレクトリ)
  • ファイル システム メタデータを処理して、ファイル コンテンツが保存されている場所を特定する
  • ディスク上のデータを検索するのfreadに十分な情報を含む FILE オブジェクトを作成するfgetc

それを支援するOSがありません。Cコードは、ブロック読み取り用のドライバー(おそらくBIOSを呼び出す)を実装し、他のステップの動作を実装する必要があります。

于 2011-05-29T17:03:30.803 に答える