![]() |
Assembler: Oberste 2 Elemente des Stacks auslesen
Hey there
Ich mache meine ersten Gehversuche mit dem Inline-Assembler, komme nun aber nicht weiter.
Delphi-Quellcode:
Wie lese ich die obersten zwei Elemente (die ich vorhin gepusht habe) auf dem Stack aus? Irgendwie so sollte es doch gehen, oder?
procedure Test(var L, R: Integer);
asm mov R, [esp]; mov L, [esp+4]; end; Greets Shaman |
Re: Assembler: Oberste 2 Elemente des Stacks auslesen
Nun, erstmal der Code:
Delphi-Quellcode:
Erklärung: durch das var wird der Compiler angewiesen, Pointer auf die Variablen zu übergeben. Parameterübergabereihenfolge ist EAX, EDX, ECX, Stack; von links nach rechts. Hier sind nur zwei Parameter, also sind die in EAX und EDX.
procedure Test(var L, R: Integer);
asm mov ecx, [esp] mov [eax], ecx mov ecx, [esp+4] mov [edx], ecx end; Da du immer nur einen Pointer dereferenzieren (die []) kannst, musst du einen Umweg über ein Hilfregister gehen, hier eben ECX. PS: kann auch sein, das es [esp-4] sein muss, hab schon so ewig nix mehr mit Assembler gemacht :duck: |
Re: Assembler: Oberste 2 Elemente des Stacks auslesen
Danke, genau das hatte ich mir versucht zu ergoogeln :thumb:
Zitat:
Zitat:
|
Re: Assembler: Oberste 2 Elemente des Stacks auslesen
Der Stack wächst nach unten: das aktuelleste Element (Stacktop) hat die niedrigste Speicheradresse ;)
|
Re: Assembler: Oberste 2 Elemente des Stacks auslesen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz