我想建立一個像操作系統一樣的舊的16位DOS操作系統。幫助建立一個16位的操作系統
我的例子內核代碼:
asm(".code16\n");
void putchar(char);
int main()
{
putchar('A');
return 0;
}
void putchar(char val)
{
asm("movb %0, %%al\n"
"movb $0x0E, %%ah\n"
"int $0x10\n"
:
:"r"(val)
) ;
}
這是我如何編譯:
nasm -f bin -o ./bin/boot.bin ./source/boot.asm
gcc -nostdinc -fno-builtin -I./include -c -o ./bin/kernel.o ./source/kernel.c
ld -Ttext=0x9000 -o ./bin/kernel.bin ./bin/kernel.o -e 0x0
dd if=/dev/zero of=./bin/empty.bin bs=1440K count=1
cat ./bin/boot.bin ./bin/kernel.bin ./bin/empty.bin|head -c 1440K > ./bin/os
rm ./bin/empty.bin
和我在虛擬機上運行。
當我爲恆定值putchar函數(在內核代碼)......即是這樣的:
void putchar()
{
char val = 'A';
asm("movb %0, %%al\n"
"movb $0x0E, %%ah\n"
"int $0x10\n"
:
:"r"(val)
) ;
}
然後正常工作。但是當我將參數傳遞給它時(這是在前面的代碼中),那麼它爲任何字符打印一個空格。 我該怎麼辦?
你的意思是,「一個像dos的16位操作系統」,或者「一個16位DOS操作系統」? – 2010-04-26 12:29:39
err ...我不應該使用'dos'這個詞。讓它只是一個16位的基本操作系統。 :-) – brainbarshan 2010-04-26 12:33:33
啊!代碼大牆! – Earlz 2010-04-26 23:26:16