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



## TheComputaNerd (22. Februar 2011)

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?

```
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:

```
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
```


----------



## TheComputaNerd (22. Februar 2011)

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:

```
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
```


----------



## sheel (22. Februar 2011)

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ß


----------



## TheComputaNerd (23. Februar 2011)

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


----------



## sheel (23. Februar 2011)

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 (  ) .

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ß


----------



## TheComputaNerd (23. Februar 2011)

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.


----------



## sheel (23. Februar 2011)

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ß


----------



## TheComputaNerd (23. Februar 2011)

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)


----------



## sheel (23. Februar 2011)

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.


----------



## TheComputaNerd (23. Februar 2011)

man 
1.ich weiß, dass man windows in einpaar tagen nicht schreiben kann
2.ich bin kein träumer
3.hab im internet auf wikibooks gelernt


----------



## TheComputaNerd (23. Februar 2011)

und erklär mir jetzt, was offset bedeutet


----------



## sheel (23. Februar 2011)

http://board.raidrush.ws/showthread.php?t=751179

War gar nicht schwer, das zu finden...


----------



## BassBox (23. Februar 2011)

*Wie öffnet man eine .bin Datei im K ...*

Nun, ich musste mich auch einige Tage mit Fat-12 auseinandersetzten um einen passablen Treiber zu proggen. ich bin gerade mit der Implementierung von exe beschäftigt, weil ich bereits einen ganzen Haufen Funktionen für C definiert habe, und mich mit Jloc und sowas nich auseinandersetzen will lass ich den Code einfach in exe Übersetzten und dan von meinem Os ausführen (arbeite im Pmode mit Multitasking). Natürlich u™H\È¿ˆZXÚZXÚ\ˆ\È[ÈÛÛˆ›ÙÜ˜[[H›ÛˆYZ[™[HÔËQ[][]ÜˆHÝ\[‹X™\ˆXÚÙ[›™HÙZ[™[ˆÈÛÛ\[\ˆ\ˆHÓÓHÛÛ\[Y\ˆ˜[È™[X[™Z[™[ˆÙ[›™[ˆÛÛH¹™HXÚ\È™]Ù[›ˆZ\ˆZˆ™[X[™ØÚXÚÝˆÛÛ\][™\™XÚÙ\™\ˆ˜][ˆZ[™\ˆš]˜]˜XÚšXÚ[Ü™Ù[ˆ˜XÚZ]YÈ\›9]\›‹‚‚“Â˜\ÜÐ›Þ


----------



## sheel (24. Februar 2011)

Hi

irgendwas ist an deinem Beitrag danebengegangen. Ich sehe 3 Zeilen normal und dann nurnoch Sonderzeichen.

Oder liegts an mir? Wäre nett, wenn noch jemand sagt, wie es bei ihm ausschaut.

Gruß


----------



## BassBox (24. Februar 2011)

Oh, wie blöd. Ich habe die Antwort von meinem I-Phone mit tuts-mobile geschrieben. Bin wohl mit dem Zug beim senden in ein Funkloch gefahren. Aber das wichtigste was da stand war ob jemand von euch einen c compiler kennt der zu com compiliert.


----------

