Autor Thema: nasm coding: kernel zu groß  (Gelesen 4260 mal)

Snake707

  • Beiträge: 20
    • Profil anzeigen
    • Spezi-OS
Gespeichert
« am: 26. April 2007, 17:57 »
Hallo,

ich habe mal eine Frage. Wir mein team und ich hatten gedacht, es wäre eine gute Idee die verschiedenen Teile unserer API in verschiedenen asm dateien unterzubringen. Zum beispiel:
kernel.asm
--> tastatur.asm (via %include "tastatur.asm");

Wir haben allerdings erst sehr spät festgestellt, dass der Kernel dann auf einmal mehr als 5Kb groß ist und nicht mehr praktikabel.

Meine Fragen nun:
1. Warum wird der Kernel so groß (wir haben wirklich nicht viel code geschrieben (jedenfalls keine 5kb)).
2. Kann ich das irgendwie umgehen?
3. Muss ich zu 2. die Funktionen in die kernel.asm verfrachten?

thx für die kompetente hilfe

mfg Snake707
SpeziOS und meine Freundin sind leider unvereinbar. Schade. Obwohl sie auch auf die Spezi geht. Nunja Chemiker und Biologen.

Physik ist nach wie vor die wichtigste Wissenschaft

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 26. April 2007, 20:03 »
1. 5KB sind schätz ich mal 2000 Assemblerbefehle, die man schnell erreichen kann. Vielleicht habt ihr doch zu viel Code und Daten? Welches Format nutzt ihr für den Kernel? Wie linkt ihr den Kernel?

2. Kommt auf die Ursache an.

3. Nein, in der Regel macht es keinen Unterschied in welchen Objektdateien der Code liegt.
« Letzte Änderung: 27. April 2007, 00:00 von PorkChicken »
Dieser Text wird unter jedem Beitrag angezeigt.

FalShen

  • Beiträge: 73
    • Profil anzeigen
    • ScénOS
Gespeichert
« Antwort #2 am: 27. April 2007, 15:48 »
5 KB?  Ist das jetzt ein 16 bit/real mode Kernel?
Wenn man mal bedenkt, dass M$-DOS 1 schon mehr brauchte (und der Funktionsunfang war nicht so groß), solltet ihr etwas mehr voranschlagen als 5 KB.
Durch %include wird die datei nur verlinkt, soll heißen der nasm preprozessor fügt die datei ein also ob ihr den Code direkt dort geschrieben hättet, also erhöht höchstens die Lesbarkeit.
versuchen könntet ihr noch optimierung an einigen stellen, also zeilen sparen, oder halt variablen sparen.

Snake707

  • Beiträge: 20
    • Profil anzeigen
    • Spezi-OS
Gespeichert
« Antwort #3 am: 29. April 2007, 12:09 »
Das ist es ja gerade:

Der kernel an sich bracht im moment: knapp 300 Byte. Wenn ich dann %include verwende, passiert auch nicht mehr, wenn die Dateien leer sind. Nun habe ich einfach eine klitzekleine Funktion hinzugefügt: 10 Zeilen. Schon wird der Kernel um ein vielfaches größer.

Wir nutzen einfach das bin format für unseren Kernel. Den pappen wir dann zusammen mit dem bootloader in ein image und schreiben es auf diskette.

mfg Snake707
SpeziOS und meine Freundin sind leider unvereinbar. Schade. Obwohl sie auch auf die Spezi geht. Nunja Chemiker und Biologen.

Physik ist nach wie vor die wichtigste Wissenschaft

FreakyPenguin

  • Administrator
  • Beiträge: 301
    • Profil anzeigen
    • toni.famkaufmann.info
Gespeichert
« Antwort #4 am: 29. April 2007, 12:41 »
Könnte es sein, dass ihr einige der Dateien mehrfach included?

Warum benutzt du denn überhaupt include?
Hier wäre ein Linker imho die bessere Lösung.

Snake707

  • Beiträge: 20
    • Profil anzeigen
    • Spezi-OS
Gespeichert
« Antwort #5 am: 29. April 2007, 12:57 »
ach thx freaky

Das war das Problem. In der includierten Datei, war eine include anweisung, die ich eigentlich auskommentieren wollte.

Danke für die Hilfe
SpeziOS und meine Freundin sind leider unvereinbar. Schade. Obwohl sie auch auf die Spezi geht. Nunja Chemiker und Biologen.

Physik ist nach wie vor die wichtigste Wissenschaft

FreakyPenguin

  • Administrator
  • Beiträge: 301
    • Profil anzeigen
    • toni.famkaufmann.info
Gespeichert
« Antwort #6 am: 29. April 2007, 13:07 »
Ich würde dir trotzdem ans empfehlen, die ganze Sache zu linken. Damit hast du auch mehr kontrolle.

FalShen

  • Beiträge: 73
    • Profil anzeigen
    • ScénOS
Gespeichert
« Antwort #7 am: 30. April 2007, 15:52 »
Linken is kompliziert wenn es ein 16 bit os ist, weil die meisten linker (ld usw.) erstellen schon automatisch 32 bit binaries aus den obj-dateien.

@Snake707: Einfach dranpappen ist zwar für den Anfang, wenn man einfach mal was zum laufen bringen will (sprich 'Hallo Welt') schön und schnell, aber wenn du und dein Team da was richtiges zustande bringen wollt, dann programmiert erstmal einen FAT12-Bootloader (oder nehmt den der hier in den wiki-links steht).
Ihr müsst bedenken dass 5 KB wirklich höchstens ausreichen um eine Konsole ohne Funktionalität zu erstellen. Dateioperationen, Speichermanagement und so weiter sind wichtige Funktionen die auch in Assembler viel Platz brauchen.
Wenn du willst kannst du dich mal mit mir in Verbindung setzen (messenger adressen stehen links) und dann kannst du mir mal erzählen was ihr machen wollt und ich helf euch mal ;)

(edit) Ein zu großer Kernel wäre im real mode alles was über 64 KB hinausgeht.

Snake707

  • Beiträge: 20
    • Profil anzeigen
    • Spezi-OS
Gespeichert
« Antwort #8 am: 30. April 2007, 21:42 »
Nunja,

eigentlich sollte es für den einstieg, es ist unser erstes Projekt zusammen, ein kleines 16-Bit RealMode OS werden, da wir selbst gesehen haben, dass ein 32-Bit Protected Mode OS für den Anfang wohl zu kompliziert ist.
Angefangen haben wir in Assembler, aber es gibt da für mich einige Probleme

1. Wir wollen auch irgendwann mal in c (ist für mich schöner) schreiben
2. Es soll mehr können als nur ein paar shell Befehle abzuarbeiten
3. Haben wir noch einige offene Fragen, was das Know-Hwo angeht
4. Bin ich der einzige der sich in seiner Freizeit darüber gedanken macht
5. Bin ich ein wenig frustriert^^

nunja ich bin dankbar für jede Hilfe

Achso, wir wollen ein OS schreiben, dass sich gut eignet für Simulationen, dass heißt, dass der Real Mode schon eher eine Notlösung darstellt, da keiner von uns wirklich weiß, wo er anfangen soll beim Protected Mode (beziehungsweiße die Theorie halbwegs verstanden hat, aber die Umsetzung als zu kompliziert erachtet).

Nunja ich wünsche allen eine Gute nacht
SpeziOS und meine Freundin sind leider unvereinbar. Schade. Obwohl sie auch auf die Spezi geht. Nunja Chemiker und Biologen.

Physik ist nach wie vor die wichtigste Wissenschaft

FalShen

  • Beiträge: 73
    • Profil anzeigen
    • ScénOS
Gespeichert
« Antwort #9 am: 30. April 2007, 21:52 »
Wisst ihr überhaupt was das Ziel ist?
Meld dich, ich mach bei eurem Team mit... wenn ich darf ;)

 

Einloggen