Hi,
ich versuche gerade meinen C Kernel zum laufen zu bringen.
Ich hab erstmal nur eine PRINT Funktion eingebaut.
Hier mal der Code:
[BITS 16]
EXTERN _main
jmp main_entry
main_entry:
mov ax,cs
mov ds,ax
mov es,ax
cli
mov ss,ax
mov sp,9000h
sti
call _main
jmp $
GLOBAL _prnt
_prnt:
push bp
mov bp,sp
push ax
push si
add bp,4
mov si,[bp]
mov al,[si]
mov ah,0eh
int 10h
pop si
pop ax
pop bp
ret
Kernel:
extern "C" void prnt(char *str);
int main()
{
prnt("W");
return 0;
}
so, nun wird aber kein X ausgegeben, sondern ein S.
So ist es scheinbar auch mit anderen Buchstaben.
Wo liegt da der Fehler?
Erstellen tu ich meinen Kernel mit ner Batchdatei:
cd C:\TC\BIN
nasm -f obj start.asm -o start.obj
tcc -c kernel.cpp
jloc make.txt kernel.bin
Als Emulator hab ich Bochs 2.2.1