Wie öffnet man eine .bin Datei im Kernel und führt sie dann aus? [NASM]

Hallo, ich möchte Programme in meinem OS erstellen, die aber unabhängig vom Kernel sind. Ich versuche z.B.:ein kleines Hallo Welt Programm zu öffnen. Es ist auch in NASM geschrieben und auch in einer .bin Datei. Mein einziges Problem ist: Ich versuche diese Datei genauso zu öffnen, wie der Bootloader den Kernel. Aber leider funktioniert nach irgendwelchen Gründen nicht. Was genau habe ich falsch gemacht?
Code:
mov ax, 0x1000
mov es, ax
mov ds, ax

mov ax, 0x2200
mov es, ax
mov ds, ax
push ax
mov ax, 0
push ax
retf

mov [bootdrive], dl
call load

bootdrive db 0

load:
mov ah, 0
mov dl, [bootdrive]
int 13h

load1:
mov ax, 0x2200
mov es, ax
xor bx, bx

mov ah, 2
mov al, 5
mov cx, 2
mov dh, 0
int 13h

times 512 - ($ - $$) hlt

Hier noch meine Makefile.sh:
Code:
nasm -f bin -o a.bin a.asm
nasm -f bin -o b.bin b.asm
nasm -f bin -o e.bin e.asm
cat a.bin b.bin e.bin  >d.img
qemu -fda d.img
 
egal, hab schon gelöst. aber ich habe noch eine andere frage:
warum springt der kernel gleich zur ladeadresse, obwohl ich ihm begehlt habe, dass er erst zum hauptkernel springen soll?
hier:
Code:
mov ax, 0x1000
mov es, ax
mov ds, ax

jmp loop

load:
	xor ax, ax ; 1
	int 0x13 ;3
	; 1 - 3 : we must initialize the first floppy drive
        mov bx, 0x2200 ; ax is get the wort 0x1000(kernel address
	mov ah, 2 ;the function to search for the kernel, begins
	mov al, 5 ;we search 5 sectors
	mov cx, 2 ; we search in 2 cylinder
	mov dh, 0 ; page number : 9
	mov dl, [bootdrive]
	int 13h ; interrupt nummer
	


loop:
mov ah, 0Eh
mov al, 'A'
int 10h
xor ah, ah
int 16h
jmp load

    
times 512 - ($ - $$) hlt
 
Hi

ohne jetzt lästig sein zu wollen, aber meinst du nicht, das du vor einer Prozessverwaltung dich zuerst einmal um das Dateisystem kümmern solltest? (sowie unzählige andere Sachen und, wenn man es ernst meint, auch die übliche C-Funktionensammlung?)

Gruß
 
1.ich werde das os 100% auf nasm schreiben, also brauche ich dieses extra c-funktionensammlung nicht
2.kanst du mir mal das FAT12 erklären, auf lolwelvel kapiere ichs irgendwie nicht
 
1: Ich rede ja auch nicht vom OS. Aber hattest du nicht vor, das dieses Programme ausführen kann?.
Ich würde mich sehr ärgern, wenn ich auf Windows alles in Assembler programmieren müsste ( :D ) .

Nein, im Ernst: Warum willst du 100% Asm verwenden? Sowas wie puts, gets etc in Asm zu schreiben ist nicht schwer; und es hilft dir ja dann auch.
Wenn du Funktionen wie printf hast (statt immer einen kompletten Absatz zum Ausgeben einer Hex-Zahl) kannst du erstens schneller programmieren und zweitens wird er Code leicher lesbar.
Vollkommen egal, ob du in C oder Asm weiterschreibst.

2: Hast du dir die englische Wikipedia einmal angeschaut?
Der Aufbau ist dort erstaunlich detailliert beschrieben...
Wenns dann noch Unklarheiten gibt, findet man unten auch einen Link zur Spezifikation.
http://en.wikipedia.org/wiki/File_Allocation_Table

Gruß
 
das problem ist, ich habe mal versucht ein c kernel zu machen, aber es ging nicht, weil der booltoader es irgendwie nicht laden konnte(es kamm eine error message, dass _main nicht gefunden werden konnte). wenn du mir beschreibst, was ich falsch gemacht habe und wie ichs machen soll, dann würde ich gerne auf c ein kernel machen.
 
100% C geht auch nicht.

Das Grundgerüst zum Starten muss in Asm sein.
Wenn das gestartet ist, kann C weitermachen.

Das _main nicht gefunden wurde, hört sich aber irgendwie nach einer Linkermeldung an.
Die Fehlermeldung ist beim Kompilieren gekommen, oder?
Dann hast du den Compiler falsch aufgerufen.
Es darf nicht (wie bei jedem normalen Windows/Linux-Programm) gelinkt werden.
Wie du das machst, hängt vom verwendeten Compiler ab.

Gruß
 
egal, vergesen wirs(c kernel). aber wie benutze ich jetzt das fat12 dateisystem? also wie solls im code stehen?(und bitte keine Tabellen mehr, ich weiß nichtmal, was offset bedeutet)
 
Dann kann ich nur noch empfehlen, dir dringendst Grundlagen von Assembler anzueignen.

Wie hast du denn bis jetzt programmiert? Bzw. wo hast du Asm gelernt, ohne dabei das Wort offset kennenzulernen?

...Vielleicht solltest darüber nachdenken, in die Stellenangebote zu schreiben.
Wenn dein "wie solls im Code stehen" in ein paar Minuten geschrieben wäre, würde ich es ja machen, aber da werden auch ein paar Stunden lange nicht reichen.

Noch ein Vorschlag: Konzentrier dich fürs Erste auf einen Bereich.
Keine Prozessverwaltung schreiben wollen, während man es nicht schafft, C-Code auszuführen, und nebenbei auch noch Grafikkarte und Festplatte ins kleinste Detail behandeln wollen.
Das geht nicht. Man kann nicht eben mal Windows allein in ein paar Tagen schreiben.
Wenn du es nicht langsam angehst, wirst du nie vom Fleck kommen.
 
Zurück