Je ne peux absolument pas comprendre la pile de MIPS. L'espace sur la pile est attribué en soustrayant le registre $ sp, la pile se développe dans la direction du programme, quand elle croît trop, elle déborde en écrasant (ou au moins en essayant) le programme. Une fois la fonction exécutée, je dois supprimer la pile en ajoutant la même valeur que j'ai soustraite en premier. Tout cela me va bien. On m'a dit, cependant, que lorsque je sauvegarde des arguments, je dois allouer quatre espaces, correspondant aux quatre premiers arguments ($ a0- $ a3), et ne jamais les utiliser (comme indiqué here). Pourquoi? De plus, lorsque je construis la pile, je dois sauvegarder des arguments supplémentaires. Devrais-je sauvegarder les arguments "non extra" aussi? par exemple. l'assemblage de ce programme C:La pile de MIPS provoque un débordement de mon cerveau
void f (int x, int y, int z) {
int array[5], a, b;
if (x >= y && x != z)
g(x+1, y+2, z+3, 4, 5);
else
h(x-1, y-2, z-3, 4, 5, 6, 7);
while (z != 0)
x++
}
Dois-je économiser $ A0- $ sur leurs a3 positions respectives de la pile? Dois-je les enregistrer dans $ s0- $ s3? Si je n'avais pas la pièce alors que, est-ce que je devrais pas les enregistrer?
La page que vous avez lié est décrit une convention d'appel spécifique à Microsoft. Ce n'est pas la seule façon d'utiliser la pile sur les processeurs MIPS. –
Euh, vous n'avez besoin d'allouer aucun espace de pile dans C. En fait, C ne nécessite pas de pile. Vous déclarez des variables avec une durée de stockage automatique, le compilateur fait le reste. En outre, +1 pour les conventions d'appel Microsoft intimidées. – EOF
@EOF Je suis désolé, ce que je voulais dire, c'est comment l'assemblage de ce programme C serait. – gabrieljcs