Teniendo en cuenta esta pieza de código:Base puntero y pila puntero
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
(Esto es sólo el método previamente empujamos el primer y el segundo parámetro en la pila..)
Mi pregunta es: ¿Por qué agregamos 8 al puntero base para llegar a la dirección del primer parámetro y luego a 12?
Me da el hecho de que son dword para que cada uno de ellos tenga 4 bytes ... así que de ebp + 8 a ebp + 12 lo hace sensato. ¿Pero por qué el primero es ebp + 8? Porque si ESP apunta al TOP de la pila, mov ebp, esp significa que EBP apunta al TOP de la pila. Luego empujamos 4 valores en la pila: eax, ebx, ecx y edx. ¿Por qué EBP + 8 apunta en el primer parámetro?
+1 - Simple, limpio e informativo. – Cyclonecode
¡Guau, muy limpio! Gracias, esto fue muy útil! ¡Creo que el punto clave fue que la pila crece hacia abajo! Bueno saber ! Me has alegrado el día. – yhcowboy