Also:
Es gibt im Speicher ein Bereich, das heißt "Stack", und ist meistens ganz oben in der freien Memory (=Speicher)
Dazu gibt's auch einen Zeiger, (Stackpointer), der zu Beginn mit der OBERSTEN Adresse von diesem Bereich geladen wird.
So.
Wenn man nun ein Register "retten" will, d.h. man will den Inhalt sichern, weil man dieses Register eine Zeitlang für was anderes braucht (Manche Subroutinen tun sowas) sagt man laut und deutlich "PUSH register"
Die CPU subtrahiert nun 1 von dem "Stackpointer" und schreibt den Inhalt des Register dorthin, wo der "Stackpointer" nun hinzeigt.
Nun kann man ohne gewissenbisse das Register vernudeln.
Recht's einem, sagt man "POP register"
Die CPU kopiert nun den Wert von dort, wo der Stackpointer hinzeigt, wieder ins register und addiert 1 auf den Pointer.
Nun ist wieder alles so, wie es Vor dem PUSH war.
Klaro ?
Weil das also ein "FIrst-in Last-Out" Speicher ist, sind im Code PUSH und POP gewissermassen gespiegelt drin, z;b,
*lufthol*Code:PUSH r1 retten (=save) PUSH r2 retten (=save) CALL subroutine ;(die kann nun diese beiden register für sonstwas verwenden) POP r2 wiederherstellen (=restore) POP r1 wiederherstellen (=restore) ; jetzt ist alles wie vorher
hilft dir das ?
EDIT:
@fluchtpunkt: sorry
@janb auch sorry, ich war wohl am langsamsten
Lesezeichen