Stehe momentan vor einem Rätsel, bezogen auf den Intel x86 Assembler-Befehl (Mnemonic) PUSHA (den gibt es ab 80186/V20).
Der rettet tatsächlich die Register AX bis DX sowie BP,SI und DI. Allerdings auch den Stackpointer SP, was irgendwie aus folgendem Grund keinen Sinn macht:
Ich habe versucht, den PUSHA Befehl durch einzelne PUSH Register Befehle zu ersetzen.
Das wollte ich dann auch testen.
Also alle oben genannten Register auf einen bestimmten (vordefinierten) Wert gesetzt, dann PUSHA ausführen lassen.
Danach die oben genannten Register auf Null setzen und danach POPA ausführen.
Von der Theorie her wären dann die ursprünglichen Registerwerte wieder wie vor dem PUSHA.
Stimmt aber nicht, den Stackpointer (SP) darf man ja gar nicht verändern, weil der ja von PUSHA und POPA selbst verändert wird.
Warum wird also das Register SP überhaupt vom PUSHA Befehl gerettet, wenn man den gar nicht anfassen darf (weil sonst das POPA ins Nirwana abdriftet) ?
Was haben sich die Intel Ingenieure dabei gedacht ??