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
    sti

    Aber 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.


Anmelden zum Antworten