Autor Thema: externe Unterprogramme mit NASM  (Gelesen 5488 mal)

bscreator

  • Gast
Gespeichert
« am: 26. February 2009, 18:04 »
Hallo liebe OS-Coder,

Also, da ich mein OS komplett in Assembler coden will, bekomm ich langsam Probleme mit der 128 KBit begrenzung des Code- bzw. Datensegments.
Daher will ich einige Funktionen in Prozeduren coden, die sich in einer externen Datei befinden sollen.
(Durch das arbeiten mit Unterprogrammen in externen Files bekommen diese ihr eigenes Codesegment, wodurch die Größe nur noch durch den Hauptspeicher begrenzt wird)

Wie man Dateien einbindet in NASM weiss ich, leider hab ich nichts über das Erstellen von Prozeduren gefunden, nur was über Makros.

Hat jemand von euch Erfahrung im Erstellen von externen Unterprogrammen (Prozeduren) mit NASM ?

Thanks,
bsc

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 26. February 2009, 18:13 »
So, erstmal die Kristallkugel rausholen...

Du bist im Real Mode? Da hast du eine Beschränkung von 64k pro Segment, ja. Du willst das umgehen, indem du Teile des Codes in andere Segmente auslagerst. Geht irgendwie, ja. Aber das heißt in erster Linie, daß du das Segment wechseln mußt, wenn du dort reinspringst und daß du damit keinen einfachen Funktionsaufruf mehr hast, sondern irgendwelche anderen Konstruktionen.

Besonders spaßig wird das nicht werden, wenn du es auf diese Art machst. Mit einem 32-Bit-Modus würdest du dir vermutlich einen größeren Gefallen tun als jetzt mit Hacks um die Beschränkungen herumzuarbeiten - das war schon zu DOS-Zeiten nichts schönes.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

bscreator

  • Gast
Gespeichert
« Antwort #2 am: 27. February 2009, 19:59 »
Das mit dem "nicht spaßig werden" hab ich mir schon gedacht, allerdings ist es leider so, dass ich noch ein paar Versuche im Real Mode machen möchte (keine Ahnung warum, fragt mich nicht, weil ich es selber nicht weiss)

Gibt es sonst noch irgendeine andere Möglichkeit, diese Begrenzungen zu umgehen (Ohne den Real Mode verlassen zu müssen) ?

Vielen Dank,
bsc

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 27. February 2009, 22:50 »
Nein, im Real Mode wirst du die 64k-Segmente nicht los. Du mußt entweder raus aus dem Real Mode oder mit ständigem Segmentwechsel arbeiten.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 27. February 2009, 23:37 »
Besorg dir einen Assembler, der mit dieser verstaubten Technologie umgehen kann. TASM oder MASM für DOS sollten das können. Oder nutz C. Der TCC (von Borland) kann das wohl auch managen. Google ist dein Freund. Wenn du an alte C-Compiler von Microsoft kommst, würd ich davon ausgehen, dass die das auch können.

Du kannst dir auch eine eigene Programmiersprache entwickeln, die dir Hilfskonstrukte anbietet. Vielleicht kannst du aus den Anforderungen an eine derartige Programmiersprache auch Makrobefehle für NASM entwerfen. Dann erfordert es nur noch Disziplin deinerseits, dich dieser Steinzeittechnologie zu unterwerfen.

Oder mach es wie die echten Assemblerprogrammierer: von Hand.
Dieser Text wird unter jedem Beitrag angezeigt.

bscreator

  • Gast
Gespeichert
« Antwort #5 am: 28. February 2009, 20:41 »
Danke, damit kann ich viel anfangen.
Aber zuerst einmal :
Wie kann ich eine eigene Programmiersprache (Assemblersprache) entwickeln, bzw. wo fang ich da eigentlich an ?

Was für eine Art von Programmiersprache brauch ich da, um eine eigene zu entwickeln  (Hochsprache, Assemblersprache...) ? 

Was meinst Du mit
Zitat
...wie die echten Assemblerprogrammierer: von Hand ?
[/b]
Ein Segmentwechsel ist nur mit einem FAR-Jump möglich, oder ?

Vielen Dank für eure Beiträge,
bsc

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 28. February 2009, 22:42 »
Du fängst am besten am Anfang an, der da das Nachdenken über das Problem wäre. Dabei solltest du dir immer das Ziel vor Augen halten: Du möchtest die Begrenzung von 64 KB (128 KB wenn Code und Daten getrennt sind) aufheben, und lieber die kompletten 640 KB deines PCs nutzen. Wenn du damit fertig bist, kannst du einen Compiler/Assembler in der Sprache, die deiner Meinung nach am besten dafür geeignet ist, umsetzen. Das ist natürlich eine, die du kennst. Eine neue lernen macht ja keinen Sinn.

Ja, Segmentwechsel macht man in der Regel mit einem Far-Jump. Außerdem kannst du das ganze noch durch ein Far-Return oder einen Interrupt-Aufruf/-Return erreichen, aber das hat eigentlich keine Vorteile gegenüber einem Far-Jump. Das meine ich mit von Hand.
« Letzte Änderung: 28. February 2009, 22:48 von PorkChicken »
Dieser Text wird unter jedem Beitrag angezeigt.

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 01. March 2009, 12:02 »
ein FAR-Call gibt's natürlich auch

ob sich ein eigener Compiler für
Zitat
ein paar Versuche im Real Mode
lohnt, ist allerdings fragwürdig.(na gut, bei mir passen die auch dicke in 64KB ;) )
« Letzte Änderung: 01. March 2009, 12:09 von MNemo »
„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

 

Einloggen