Dato questo pezzo di codice:Base puntatore e dello stack pointer
swap:
push ebp ; back up the base pointer,
mov ebp, esp
; push the context of the registers on the stack
push eax
push ebx
push ecx
push edx
mov eax, [ebp+8] ; address of the first parameter
mov ebx, [ebp+12] ; address of the second parameter
mov dl, [eax]
mov cl, [ebx]
mov [eax], cl
mov [ebx], dl
; restore the context of the registers from the stack
pop edx
pop ecx
pop ebx
pop eax
; restore the ebp
pop ebp
ret
(Questo è solo il metodo In precedenza abbiamo spinto il primo e il secondo parametro sullo stack..)
La mia domanda è: perché aggiungiamo 8 al puntatore di base per ottenere l'indirizzo del primo parametro e poi 12?
Ho il fatto che sono dword, quindi ognuno di essi è di 4 byte. Così da ebp + 8 a ebp + 12 rende sensato fare. Ma perché il primo è ebp + 8? Perché se ESP punta al TOP dello stack, mov ebp, esp significa che EBP punta al TOP dello stack. Quindi inseriamo 4 valori nello stack: eax, ebx, ecx ed edx. Perché EBP + 8 punta sul primo parametro?
+1 - Semplice, pulito e informativo. – Cyclonecode
Wow abbastanza pulito! Grazie, è stato molto utile! Immagino che il punto chiave sia stato che lo Stack crescesse verso il basso! Buono a sapersi ! Hai reso la mia giornata. – yhcowboy