Además de la explicación de xtofl puede que desee echarle un vistazo a esta tabla de x86 calling conventions. Lo que notará, con respecto al orden de los argumentos es que casi todos de los argumentos se presionan de derecha a izquierda (el argumento de la derecha se empuja primero) con la excepción de Pascal.
Otro escenario que xtofl no abarca son los argumentos de registro: algunos ABI requieren que algunos argumentos estén en los registros en oposición a en la pila. En un sistema x86_64
, por ejemplo, la función:
int add3(int a, int b, int c)
pondrá argumentos:
a -> rdi
b -> rsi
c -> rdx
En concreto, este se vería así (la sintaxis de Intel):
mov rdi, [source-of-a]
mov rsi, [source-of-b]
mov rdx, [source-of-c]
call add3
Así los registros se llenan desde la lista de registros de izquierda a derecha y luego se usa la pila de derecha a izquierda.
Como xtofl dice, no importa lo que usted ha proporcionado la persona que llama y el destinatario de acuerdo - con claridad, sin embargo, si la persona que llama y la parte llamada no están de acuerdo que va a causar problemas de incompatibilidad y esto en realidad no es una preocupación solo para ensamblador, pero también para lenguajes de nivel superior; afortunadamente, los compiladores operan principalmente de derecha a izquierda. Para una lectura posterior, es posible que la limpieza del llamante/llamante de la pila sea interesante, y tenga en cuenta cómo se estandarizó con un método para x86_64
.
Usted no dice que está utilizando x86
- su arquitectura seguramente tendrá una convención de llamadas estándar, ya que trabajar sin ella es difícil.
Muchas gracias a los dos. Eso fue muy útil y lo entiendo mucho mejor ahora! Gracias mil! – Axolotl