Betrachten Sie die folgende Prozedur, die ein DWord-Array mit Werten füllt und 2 Parameter eingibt: Bei EBP + 08h
ist die Größe des Arrays und bei EBP + 0Ch
der Versatz des angegebenen Arrays. (Das heißt OFFSET myarray
):Ist es möglich, etwas in einer Dereferenz in der Montage zu dereferenzieren?
MyProc PROC
PUSH EBP
MOV EBP, ESP
SUB ESP, 04h
PUSH EDI
PUSH ESI
PUSH EBX
MOV EBX, [EBP + 08h] ;move the size of the array into EBX
MOV [EBP - 04h], 00h ;EBP - 04h will be the counter (or the index.)
MOV ESI, [EBP + 0Ch] ;move the offset of the array into ESI
MOV EDI, 01h
INC EBX
@@:
MOV [ESI + 04h * [EBP - 04h]], EDI ;How can I actually move EDI into
;the dword found at address ESI + 4 * the value found at address EBP - 4?
INC [EBP - 04h] ;increment the counter and the value to be stored.
INC EDI
CMP [EBP - 04h], EBX
JNE @B
POP EBX
POP ESI
POP EDI
MOV ESP, EBP
POP EBP
RET
MyProc ENDP
Wo ich versuche EDI
in [ESI + 04h * [EBP - 04h]]
zu bewegen, ist ein Beispiel dafür, was ich zu tun versuchen, da die dword an der Adresse EBP - 4
der Index des Arrays ist.
Gibt es eine Möglichkeit, EDI
tatsächlich in das DWord bei Adresse ESI + 4 * the dword at address EBP - 4
zu verschieben? Oder schaue ich das falsch an?
"Variablen" sind ein High-Level-Konzept. Sie können Ihren Schleifenzähler immer noch als Variable betrachten, wenn Sie ihn in einem Register behalten und keinen Stapelspeicherplatz benötigen, um ihn zu verschütten. –