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,
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
*lufthol*

hilft dir das ?


EDIT:
@fluchtpunkt: sorry
@janb auch sorry, ich war wohl am langsamsten