Pourquoi est-ce que push ebp
est la première action de la fonction Callee d'un assemblage?Pourquoi "PUSH EBP" et "MOV EBP, ESP" dans CALLEE in Assembly?
Je comprends alors que nous utilisons mov edi, [ebp+8]
pour obtenir les variables passées, mais notre esp
pointe déjà vers l'adresse de retour de la fonction Caller. Nous pouvons facilement accéder aux variables passées avec mov edi, [esp+4]
ou si nous avons poussé les registres de Callee, puis mov edi, [esp+16]
.
Alors, pourquoi avoir ce registre supplémentaire dans le CPU (le ebp
) que vous devrez ensuite gérer dans les fonctions? à savoir
push ebp
mov ebp, esp
...
mov esp, ebp
pop ebp
Vous n'êtes pas obligé. Les compilateurs omettent souvent le pointeur de cadre de nos jours, si la fonction n'utilise pas de tableaux de longueur variable ou 'alloca()'. – EOF
Copie possible de [Quel est exactement le pointeur de base et le pointeur de la pile? À quoi pointent-ils?] (Http://stackoverflow.com/questions/1395591/what-is-exactly-the-base-pointer-and-stack-pointer-to-what-do-they-point) –
Pourquoi As-tu mis "CALLEE" en toutes-majuscules dans le titre? Vous vous demandez pourquoi l'appelant ne fait pas des cadres de pile dans le cadre de la convention d'appel? Cela ne semble pas être le cas, basé sur le texte autre que le titre. –