私はリアルモードOSで作業していました。アセンブリで書いて、NASMでフラットな.bin実行ファイルにコンパイルしています。
私はCにOSの一部を書くのが好き、と私は最初の文字列にアクセスし、印刷したいの実験プログラム(ctest.c)を書いただろう:私はこれをコンパイル
16ビット.com CプログラムのリアルモードOS
void test();
int main() { test(); return 0; }
char msg [] = "Hello World!";
void test() {
_asm
{
mov si, word ptr [msg]
mov al, [si]
mov ah, 0eh
int 10h
}
for(;;);
}
をOpen Watcom v1.9ではwcl ctest.c -lr -l=COM
を使用しています。これによりctest.comが作成されます。 NASMアセンブリで書いたカーネルは、このプログラムを0x2010:0x0000にロードし、DSとESを0x2000:0x0000に設定して0x2010:0x0000にジャンプします。これは、アセンブリで書かれ、nasm -f bin test.asm -o test.com
でコンパイルされた.COMプログラムを呼び出す方法です。
OSをテストすると(Bochsを使用)、ctest.comを正常に読み込みますが、msg []の一部ではない無意味な文字が出力されます。
誰もこれについて何か提案はありますか?私は文字列がちょうど間違った場所で初期化されていると思う。私はこれを16ビットOSとして保存したいと考えています。
ありがとう!
.comメモリイメージの最初の128バイトには、CP/Mと同様のオペレーティングシステムデータが含まれています。 DOSはそれに依存します。次の128バイトにはコマンドラインが含まれています。実行は0x100から開始されます。 –