Autor Thema: Stack definieren  (Gelesen 3681 mal)

Tobsn

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« am: 21. July 2004, 11:41 »
Hallo! ich bins mal wieder!

Ich will einer funktion einen eigenen Stack zuweisen, dafür will ich mit:

[code]mov cx,ss       ; 0x9000
mov bx,sp       ; anfänglich 0x00FF

cli             ; Keine Interrupts!
mov ax, 0x9010  ; Stackadresse
mov ss, ax      ; SS = 9010 (neuer Stack)
mov sp, 0x000F  ; SP = 000F
sti             ; Interrupts zulassen
[\code]

einen neuen Stack definieren, davor speichere ich den alten satckpointer und das alte stacksegment in ax und bx, und push beide dann auf den neunen stack, damit ich sie am ende der funktion wieder runter popen und zum alten stack zurückwechseln kann. Aber wenn ich das Programm laufen lasse rebootet der Pc einfach an dieser stelle. Ich hab schon in Google und im Forum gesucht aber nicht entsprechnendes gefunden, wo liegt der fehler?
danke!

chr15

  • Beiträge: 279
    • Profil anzeigen
    • http://www.clinux.de.vu
Gespeichert
« Antwort #1 am: 21. July 2004, 15:34 »
Wo pusht du den die alten Register-Werte? Ich kann das nicht dehen.

Tobsn

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 21. July 2004, 15:42 »
die push ich erst nach dem code rauf aber das ding is ja das der pc irgendwo während den 4 zweilen wo ich den neuen stack definiere einfach so rebootet.

[code]mov cx,ss       ; Altes Stacksegment retten
mov bx,sp       ; Alten Stackpointer retten

mov dx,ss       ; altes Stacksegment
call Zahl       ; inhalt von ss ausgeben
mov dx,sp       ; Alter Stackpointer
call Zahl       ; inhalt von sp ausgeben
call getkey     ; Warte auf einen Tastendruck

cli             ; Keine Interrupts!
mov ax, 0x9010  ; Stackadresse
mov ss, ax      ; SS = 9010 (neuer Stack)
mov sp, 0x000F  ; SP = 000F
sti             ; Interrupts zulassen

mov dx,ss       ; Neues Stacksegment
call Zahl       ; inhalt von ss ausgeben
mov dx,sp       ; Neuer Stackpointer
call Zahl       ; inhalt von sp ausgeben
call getkey     ; Warte auf einen Tastendruck

mov ax, 0x0000
push ax     ; x und y auf 0 setzen
push cx
push bx
[\code]

ss und sp wird beim das erste mal angezeigt das zweite mal nicht, weil der pc ja rebootet, wenn die die stackdefinition auskommentiere wirds beide male angezeigt

chr15

  • Beiträge: 279
    • Profil anzeigen
    • http://www.clinux.de.vu
Gespeichert
« Antwort #3 am: 21. July 2004, 16:12 »
Also im Moment (bin ein Bisschen übermüdet) fällt mir nur auf, dass je nach der Funktion Zahl der Stck eventuell zu klein sein könnte. Probier mal einen größeren.

chr15

  • Beiträge: 279
    • Profil anzeigen
    • http://www.clinux.de.vu
Gespeichert
« Antwort #4 am: 21. July 2004, 16:13 »
Also im Moment (bin ein Bisschen übermüdet) fällt mir nur auf, dass je nach der Funktion Zahl der Stck eventuell zu klein sein könnte. Probier mal einen größeren.

chr15

  • Beiträge: 279
    • Profil anzeigen
    • http://www.clinux.de.vu
Gespeichert
« Antwort #5 am: 21. July 2004, 16:17 »
Sorry einmal zu viel.......
Kann es sein, das es auf diesem Server hier sehr viele Zeitüberschreitungen gibt?

mastermesh

  • Beiträge: 341
    • Profil anzeigen
    • http://www.kostenloser-laptop.de/
Gespeichert
« Antwort #6 am: 22. July 2004, 13:36 »
Wenn ich mich nicht irre, ist der Server hier ein Opfer vom neuen Beagle...

 

Einloggen