Einen Stack einrichten
-
Hallo Zusammen,
ich hab erst vor kurzem mit Assembler begonnen, hab jedoch noch nie einen Stack selbst eingerichtet- ich habe dazu ein Beispiel unter www.os-devel.org gefunden (ein Bootloader). Der Coder richtet den Stack folgendermaßen ein:
; stack einrichten
cli ; Interrupts aus
mov ax, 0x9000 ; Stacksegment
mov ss, ax
mov sp, 0xff
stiAber warum setzt er das StackSegment-Register auf 0x9000 ?? Warum genau auf diesen Wert ? Und warum den Ofset (also den Stackpointer) auf 0xff ?
Wäre echt nett, wenn ihr mir helfen könntet.
Schönen Gruß
Christoph
-
Du kannst dein Stacksegment auch auf 0x9500 setzen, wenn du willst. Aber er hat sich nunmal für 0x9000 entschieden. Beachte, dass du aufpassen musst wo du den Stack hinsetzt, sonst überschreibst du noch wichtige Sachen des BIOS oder womöglich deines Kernels.
Den Stackpointer solltest du lieber auf 0 setzen, sonst sind da ein paar Bytes unbenutzt, was ziemlich schade wär, wo wir doch so wenig davon haben
-
Stackpointer auf 0xff ist soundso ein riesiger Schwachsinn! Was soll das denn? Ist ja nichtmal aligned. Und 256 Bytes Stack ist schon ein bisschen sehr wenig...
-
So, und um dem jetzt noch eins draufzusetzen:
Die Interrupts hier extra auszuschalten ist auch eher unnuetz, denn bei mov ss, x werden die Interrupts bis nach Ausfuehrung der naechsten Instruktion abgeschaltet.
-
Was es nicht alles gibt...
Ich hab das immer nur mit cli/sti gesehen.