Lets sagen, dass ich eine PROC in My Assembler-Code haben wie so:Dynamische Variablenerstellung in der Baugruppe? (X86 Assembly)
.CODE
PROC myProc
MOV EAX, 00000001
MOV EBX, 00001101
RET
ENDP myProc
Ich möchte 1 MOV in das EAX-Register, und 13 in das EBX-Register in meinem Verfahren bewegen, aber ich Ich möchte zwei Variablen lokal zu meinem PROC erstellen, var a den Wert 1 zuweisen und var b den Wert 13, und von dort MOVing [a] in EAX und [b] in EBX. Ich habe schon viele Ideen dazu hatte, vielleicht Platz für die Variablen auf dem Stapel zu schaffen, oder so etwas wie:
.CODE
PROC myProc
PUSH ESP
PUSH EBP
MOV ESP, 00000001
MOV EBP, 00001101
MOV EAX, [ESP]
MOV EBX, [EBP]
ENDP myProc
Aber noch ist nicht wirklich dynamische Variable Schöpfung, ich bin nur das Schreiben und Lesen von Daten zurück und zwischen den Registern. Im Wesentlichen versuche ich herauszufinden, wie man eine Variable in Assembly zur Laufzeit erstellt. Ich würde jede Hilfe schätzen.
Ihr zweites Beispiel ist Unsinn. Wenn Sie dem Stapelzeiger eine Konstante zuweisen, haben Sie Ihre einzige Referenz auf den Platz verloren, an den Sie ESP und EBP gedrückt haben. Außerdem wird 'mov eax, [001]' nur bei einer schlechten Adresse einen Fehler machen. Ich sehe auch keine Register-zu-Register-Bewegungen in Ihrem zweiten Beispiel, also IDK, was Sie denken, dass es tut, aber es ist nicht "* Schreiben und Lesen von Daten hin und her zwischen Registern. *" –
Wenn Sie dynamischen Speicherplatz möchten zum Speichern einiger Werte, für kleine Dinge (bis zu wenigen kiB), können Sie normalerweise diesen Platz auf dem Stapel reservieren, das ist, was C tut. Zu Beginn von PROC kann eine der Prolog-Anweisungen "sub esp," sein, und vor "ret" stellst du das 'esp' (das diesen Raum freigibt) wieder her. Dazwischen kann man es mit '[esp + <0 .. size-1 offset>]' ansprechen, obwohl dafür normalerweise das 'ebp' verwendet wird. Wenn Sie einen großen (kiB -> MiB/GiB) dynamischen Speicherbereich wünschen, überprüfen Sie Ihre API für die Heap-Zuweisung. * "Variablen" * => nennen Sie es, was Sie wollen, nicht wichtig. –
Ped7g