問題タブ [fat16]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - カーネルではなく自身をロードするブートローダー
私は現在、FAT16 フォーマットのディスクからカーネル (R.BIN) をロードするように設計された、x86 NASM アセンブリで書かれたブートローダーに取り組んでいます。デバッグ用の短いメッセージ (A、B、C、D、J、!; アスタリスクでマークされた行) を組み込んだ後、ブートローダーが次のポイントまでずっと進んでいることを発見しましたロードされたカーネルに完全にジャンプしますが、カーネルにジャンプせず、代わりに自分自身を再度ロードするようです。
ブートローダをテストするために、以下を使用してブートローダを書き込んだ空のイメージをマウントしました:
dd if=LOADER.BIN of=/dev/loop0
(R.BIN もコピーしました) この後、この新しいイメージを保存し、バーチャルボックス。
これは私の完全なコードです:
私が言ったように、ブートローダーは、カーネルにジャンプするまで、すべてを計画どおりに実行しているように見えます。カーネルは、デバッグ メッセージの最初からやり直し、再び循環します。
assembly - FAT16 ブートローダのみ ファイルの最初のクラスタをロード中
現在、カスタム リアルモード x86 カーネルをロードするために作成したブートローダーを修正中です ( SYS.BIN)。ルート ディレクトリと FAT を読み取って、ファイル システムから小さなカーネルをロードするようにしました。ただし、より大きなカーネルでテストを開始したところ、ブートローダーは複数のクラスターをロードしないようです。コードを別の同様のブートローダーと比較して確認しましたが、マルチクラスター ファイルの読み込みに関しては、効果的に同じことを行っているようです。主な違いは、最初の FAT をセグメントにロードし0x3000、ルート ディレクトリをセグメントにロード0x3800して、カーネルからアクセスできるようにすることです。(セグメンテーションをまったく台無しにしましたか?)
NASM でコンパイルし、結果のBOOT.BINファイルを未加工の 32M イメージの最初のセクターに書き込み、それをループ デバイスにマウントし、コピーSYS.BINして、そのループ デバイスの新しいイメージを作成することで、これをテストしていることに言及する必要があります。次に、ハードドライブとして QEMU に投入します。ファイルの最初のクラスターのみをロードしていることは確かです。
特に、問題を引き起こしているコードは次の場所にある可能性が高いと思います。
BPB を含む完全なコードは次のとおりです。
よろしくお願いします。
更新:これを BOCHS デバッガーで実行したところ、プログラムが のように単語をロードしているように見えますが、その後、いくつかの命令の下clusterの0x0003ようになります。.load_cluster0x0000.next_cluster