NASM にブートローダーを書きました。これは、64kb のプログラム データをディスクからメモリにロードし、アドレス 0060:0000 [SEG:OFF] で開始します。私は自分のプロジェクトのこの部分をアセンブリでコードを書く (NASM) ことでテストし、それをディスクに入れました。正常に動作します!
完全なプロジェクトは、アセンブリで完全に記述するには少し複雑です。そこで、インライン アセンブリで C を使用することにしました。このために、open-watcom-c-win32-1.9 という名前の環境をダウンロードします。 RAW BIN ファイルを作成するためのいくつかの WatCom コンパイラとリンカー ディレクティブをテストするための単純な C コードがあります。bin ファイルは生成されますが、ブート ローダーがメモリにロードした後は実行されません。セグメント値とオフセット値を設定するために多くの wlink ディレクティブを試しましたが、うまくいきません。
void main()
{
__asm
{
mov ah, 0x0E
mov al, '!'
int 0x10
}
}
問題は、コードの生成中にコンパイラとリンカが間違ったセグメントとオフセット アドレスを使用することだと思います。いずれにせよ、Wlink は次のエラーをドロップするためです。
警告!W1023 開始アドレスが見つかりません。0000:0000 を使用しています
セグメントオフセットアドレスを正しく設定する方法はわかりませんが、作業プログラムには必要です。セグメント : オフセットが宣言された C ソース コードから 16 ビット リアル モードの RAW BIN ファイルを生成するために使用する WatCom ディレクティブの種類について質問があります。WatComで可能ですか、それとも他のものを使用する必要がありますか?