Acabo de empezar a aprender el ensamblaje x64 y tengo una pregunta sobre las funciones, los argumentos y la pila. Por lo que yo entiendo, los primeros cuatro argumentos en una función pasan a registros rcx, rdx, r8 y r9 (y xmm0-xmm3 para flotantes) en Windows. Por lo que una función de suma trivial con cuatro parámetros se parecería a esto:¿Se está reservando el espacio de pila necesario para funciones de menos de cuatro argumentos?
add:
mov r10, rcx
add r10, rdx
add r10, r8
add r10, r9
mov rax, r10
ret
Sin embargo, me he encontrado documentation that mentions this:
Como mínimo, cada función debe reservar 32 bytes (cuatro 64- valores de bit) en la pila. Este espacio permite que los registros pasados en la función se copien fácilmente a una ubicación de pila bien conocida. La función de llamada no es necesaria para derramar los parámetros de registro de entrada a la pila, pero la reserva de espacio de pila asegura que puede hacerlo si es necesario.
Entonces, ¿tengo que reservar espacio en la pila incluso si las funciones que estoy realizando toman cuatro parámetros o menos, o es solo una recomendación?
http://www.agner.org/ optimize/optimizing_assembly.pdf El capítulo 4 tiene un ejemplo que parece indicar que tiene que * siempre * reservar espacio. – user786653
Maldita sea, demasiado tarde para editar. [newnewthingthing] (http://blogs.msdn.com/b/oldnewthing/archive/2004/01/14/58579.aspx) entrada de blog en la convención de llamadas AMD64. – user786653
Otra pieza del rompecabezas para usted: tiene *** función de hoja ***, lo que significa que no llama a otras funciones. – jww