私はブートローダーを書いていますが、私がしていることが正しいかどうかわかりません。まず、このバッチスクリプトを使用してブートローダーをコンパイルしています。
dm\bin\dmc.exe -msdo -c -cpp bootloader.cpp
masm\bin\ml.exe -c bootloaderASM.asm
dm\bin\link.exe /BINARY bootloaderASM.obj bootloader.obj
私はDMCのコンパイラとリンカをmasm615アセンブラと一緒に使用していますが、それらはすべて16ビットである必要があります(DMCは16と32の両方です)。アセンブリファイルbootloaderASM.asmで、「org 07C00」を追加すると、出力ファイルbootloaderASM.sysは07C00まで0で埋められ、その後、期待されるコードが埋められます。ただし、削除すると、出力ファイルは次のようになります。期待される。私が理解したように、org命令は、ベースが07C00になるように、命令で使用されるアドレスを調整するだけです。出力ファイルをゼロで埋めてはいけないと思いますか?
コンパイラとアセンブラからの.objファイルは問題ないようです。0x07c00まで先行ゼロは含まれていませんが、リンカーからの最終出力は何が問題なのかです。
さて、リンカーの問題はありますか?どうすれば修正できますか/別の(16ビット)リンカーを提案しますか?また、ブートローダーのorg命令を単に無視しても大丈夫ですか?
また、ブートローダーを読み取り、仮想ハードドライブのブートセクターに書き込むプログラムを作成しました。リンカー出力の先行ゼロを無視するように変更するだけで機能しますか?
ありがとうございました。