我一直在研究一個實模式操作系統,在彙編中編寫和編譯爲帶有NASM的flat .bin可執行文件。
我還想寫一些操作系統的C,所以寫了一個實驗計劃(ctest.c),我想訪問一個字符串,並打印第一個字符:
在實模式下的16位.com C程序操作系統
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。這就是我一直致電.COM程序編寫並編譯爲nasm -f bin test.asm -o test.com
。
當我測試操作系統(使用Bochs)時,它成功加載ctest.com,但打印出一個不含msg []的無意義字符。
有沒有人對此有任何建議?我認爲字符串剛剛在錯誤的地方被初始化。我想保留這個16位操作系統。
謝謝!
.com存儲器映像的前128個字節包含操作系統數據,與CP/M類似。 DOS取決於它。接下來的128個字節包含命令行。執行從0x100開始。 – 2012-03-24 20:11:57