NASM assembliert nicht richtig

S

Schneemann

Routinier
Hi,

Frohes neues Jahr!

Also ich denke hier werden wieder einige rumheulen dass ich mal Google&SuFu benutzen soll. Hab ich gemacht, suche schon seit mehreren Stunden nach einer Lösung.

Also ich will mir einen kleinen bootbaren Kernel mit C (und natürlich ASM) schreiben. Hab ein sehr gutes Tutorial dafür gefunden. Leider ist das Tutorial nur für Windows, ich benutze Suse Linux 10.1 (KDE), deswegen benutze ich ein paar andere Programme usw.
Also ich benutze gcc zum kopilieren des C-Kodes, NASM für das Assemblieren und ld zum Linken.
Also ich habe mir zum assemblieren,kompilieren und linken ein shell-skript geschrieben:
Code:
nasm -f obj -o start.obj start.asm
gcc -c -o kernel.obj kernel.cpp
ld -o kernel.bin start.obj kernel.obj

Ganz einfach. So tut er alles bis beim Linker, da kommt die Fehlermeldung
Code:
start.obj: file not recognized: File format not recognized
Also start.obj wird, wie man sehen kann, aus dem ASM-Code erzeugt. So wie es scheint tut NASM mein Code nicht richtig assemblieren.

Hier ist der C-Code
Code:
extern "C" void prnt(char *var);
extern char boot;

int main() {
  char *str;
  str=&boot;
  prnt(str);
  return 0;
}

Und dass hier ist der ASM-Code
Code:
[BITS 16]
EXTERN _main
start:

jmp 07c0h:main_entry

main_entry:
mov ax,cs
mov ds,ax
mov es,ax
cli
mov ss,ax
mov sp,9000h
sti


mov ah,02h
mov al,1
mov cl,2
mov ch,0
mov dl,0
mov dh,0
lea bx,[kernel]
int 13h


call _main
jmp $

;##Funktion zur Stringausgabe / Begrenzungszeichen: ASCII 0
GLOBAL _prnt
_prnt:
push bp
mov bp, sp
push ax
push si
mov ax, [bp + 4]
mov si,ax

prnt1:
mov al,[si]
cmp al,0
JE prnte
inc si
mov ah,0eh
int 10h
jmp prnt1

prnte:
pop si
pop ax
pop bp
ret

GLOBAL _boot
_boot db "Der erste C Kernel",13,10,0


times 510-($-$$) db 0 ;wichtig: Hier die Datei mit so vielen Bytes füllen, bis es genau 510 sind
dw 0aa55h ;Bootsignatur anhängen
kernel:

Wie bekomm ich NASM dazu eine Datei zu erzeugen die ld versteht, oder wie bekomm ich ld dazu die NASM-Datei zu verstehen?
 

Ähnliche Themen

Displayport + externer Monitor zeigt bei startx nichts erst bei DVI

NagiosGrapher 1.7.1 funktioniert nicht

Schwierigkeiten beim compillieren

Modulfehler?

Ubuntu X / dbus problem

Zurück
Oben