Ich lerne gerade über den Stapel (x86). Ich weiß, es ist ein Datenstapel, der nach dem LIFO-Prinzip arbeitet. Ich kenne die grundlegenden Operationen in Bezug auf den Stapel sind Push (um einen Wert an der Spitze des Stapels hinzuzufügen) und Pop (um einen Wert zu entfernen). ESP ist der Hinweis darauf, wo wir uns jetzt auf dem Stack befinden. Nun, für das, was ich nicht verstehe:Grundlegende Verwendung Stapel
Beispiel:
Push 4
Push ebx
Push eax
Die obigen Anweisungen werden einen Stapel erzeugen, wie folgt:
8 eax <-- ESP
4 ebx
0 4
Mit dem ESP zeigt auf dem letzten Mehrwert eax .
Wenn wir nun diese Anweisungen mit der Pop-Operation erweitern möchten wir etwas bekommen wie:
Push 4
Push ebx
Pop ebx
Push eax
Die Anweisungen oben führen sollen (wenn ich richtig bin) in Stapeln folgenden (zum ersten drei Befehlen):
4 (ebx)
0 4 <-- ESP
Ebx wird vom Stack entfernt und das ESP wurde für 4 Bit nach unten bewegt. Nun den Stapel nach all Anweisungen ausführen:
4 eax <-- ESP
0 4
ich alles hoffen, bis hier richtig ist, wenn nicht Kommentare sind mehr als willkommen ;-) jetzt für den Befehl mov edx, [ebx, + 04], beginnend mit dem ersten Stapel in diesem Post. Ist das Ergebnis dieser folgenden:
16 eax
8 edx <-- ESP
4 ebx
0 4
Es befindet sich auf ebx + 4 Bits en Schreib edx dort startet den vorherigen Wert (EAX) nach oben bewegt wird, oder wird es eax mit edx ersetzen?
Eine zweite Frage ist (mehr allgemein), wie Arrays auf dem Stack initiiert, adressiert und entfernt werden.
Ich entschuldige mich für diese lange Frage, aber ich möchte die (Grundlagen der) Stapel verstehen. Vielen Dank.
Der Vermutungsteil ist korrekt. Die Frage ist jedoch nicht klar. Meinst du "mov edx, [esp + 4]"? – ruslik
Nur um klarzustellen: 'ebx' ist keine Adresse, es ist ein Register. 'push ebx' platziert seinen Inhalt auf den Stapel und nicht auf das Register. '[ebx + 4]' ist nur eine Speicheradresse, die nichts mit Stack zu tun hat. Außerdem ist der Stapel im Speicher (und es ist kontinuierlich!), So dass Sie nicht etwas in der Mitte einfügen können. Es ist ein Array, keine Liste. – ruslik