2010-04-09 6 views

Répondre

4

La manière dont les arguments sont transmis à une fonction dépend entièrement de l'implémentation.

Les arguments de fonction peuvent même ne pas être transmis sur la pile; ils pourraient être passés dans des registres, par exemple.

Vous devrez rechercher des informations pour votre plate-forme spécifique afin de déterminer comment les arguments sont transmis. Wikipedia a une page entière consacrée à the various x86 calling conventions.

+0

Oui, sur sparc les six premiers arguments sont dans les registres, mais alors il y a ce déversement de la fenêtre de registre ... –

1

Lorsque les arguments sont poussés sur la pile, C le fait de droite à gauche. Cependant, selon l'architecture et le nombre de paramètres, il est possible que la pile ne soit pas utilisée (ou seulement partiellement utilisée) et que des registres soient utilisés à la place. Par exemple, disons qu'il s'agit de l'architecture x86 (32 bits). Le cadre de la pile ressemblera ...

(Stack grows down. High stack address is here) 
arg3 
arg2 
arg1 
ret addr   <--- Auto pushed by 'call' 
old base ptr  <--- Called function typically saves the old base ptr 
...    <--- Carve space for local variables 
(Low stack address is here.) 

En continuant avec l'exemple ci-dessus, la fonction appelée peut accéder aux paramètres en utilisant les éléments suivants ...

movl 8(%ebp), %eax // move arg1 into EAX 
movl 12(%ebp), %edx // move arg2 into EDX 

et ainsi de suite. Si je me souviens bien, PowerPC a quelque chose comme huit (8) registres disponibles pour le passage des paramètres - r3 ... r10 inclus.

Comme pour les autres architectures, vous devrez les rechercher.

Espérons que cela aide.

+0

"C fait ça de droite à gauche," est spécifique à l'implémentation. Il décrit la convention d'appel 'cdecl' couramment utilisée par les implémentations C sur le x86. Une implémentation est libre de pousser les paramètres de gauche à droite ou dans n'importe quel ordre. –

Questions connexes