マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

DS、ESに値を代入すると落ちる

DS、ESに値を代入すると落ちる。GDTの設定は以下の通り。setGDTの引数はインデックス、ベース、リミット、アクセス権の順になっている。

g_GDTManager->setGDT(7, (uint32_t)data, segsize - 1, 0x4092);

dataは

char* data = new char[segsize];

としていてsegsizeはhrb形式ファイルのヘッダにあるOSが用意するデータセグメントの大きさである。この値は4096となっている。この状態でDS、ESに7 * 8を入れると落ちる。ちなみに、SS、FS、GSにも同じ値を入れている。qemuのエラーメッセージは


(qemu) qemu: fatal: Trying to execute code outside RAM or ROM at 0xa0000000
というもの。なんかアドレスが綺麗な値になってるけど、どこかで指定していただろうか?ソースやMakefile中、どこにも0xa0000000なんて値はでてきてないようだが…。うーんわからん