Es específico de la plataforma y es parte del "ABI". De hecho, algunos compiladores incluso le permiten elegir entre diferentes convenciones.
Microsoft Visual Studio, por ejemplo, ofrece la convención de llamadas __fastcall llamando, que usa registros. Otras plataformas o convenciones de llamadas usan la pila exclusivamente.
Los argumentos variables funcionan de una manera muy similar: se pasan a través de registros o pila. En el caso de los registros, generalmente están en orden ascendente, según el tipo. Si tiene algo como (int a, int b, float c, int d), un PowerPC ABI podría poner a
en r3, b
en r4, d
en r5, y c
en fp1 (Olvidé dónde comienzan los registros de flotación, pero captar la idea).
Los valores de retorno, de nuevo, funcionan de la misma manera.
Lamentablemente, no tengo muchos ejemplos, la mayor parte de mi ensamblaje está en PowerPC, y todo lo que ve en el ensamblaje es el código que va directamente a r3, r4, r5 y también coloca el valor de retorno en r3 .
La transferencia de argumentos depende de la convención de llamadas, que depende de la CPU. ¿Qué CPU estás usando? MIPS? x86? x86-64? – Gabe
posible duplicado de [¿Cuáles son las diferentes convenciones de llamadas en C/C++ y qué significan cada una?] (Http://stackoverflow.com/questions/949862/what-are-the-different-calling-conventions-in-cc -and-what-do-each-mean) –
@Gabe x86. cdecl y stdcall son probablemente más pertinentes. @Ignacio Vazquez-Abrams buen enlace, leyendo algunas de las cosas que hay ahora –