Perché abbiamo push ebp
come prima azione in Callee di una funzione Assembly?Perché "PUSH EBP" e "MOV EBP, ESP" nel CALLEE in Assembly?
Capisco che quindi usiamo mov edi, [ebp+8]
per ottenere le variabili passate, ma il nostro esp
sta già puntando all'indirizzo di ritorno della funzione chiamante. Possiamo facilmente accedere alle variabili passate con mov edi, [esp+4]
o se abbiamo premuto i registri Callee, quindi mov edi, [esp+16]
.
Quindi, perché questo registro aggiuntivo nella CPU (il ebp
) che sarà necessario gestire in futuro? cioè
push ebp
mov ebp, esp
...
mov esp, ebp
pop ebp
Non è necessario. I compilatori spesso omettono il puntatore del frame al giorno d'oggi, se la funzione non usa matrici di lunghezza variabile o 'alloca()'. – EOF
Possibile duplicato di [Qual è esattamente il puntatore di base e il puntatore dello stack? Per cosa indicano?] (Http://stackoverflow.com/questions/1395591/che-è-esattamente-il-base-pointer-and-stack-pointer-to-what-do-they-point) –
Perché hai inserito "CALLEE" in maiuscolo nel titolo? Ti stai chiedendo perché il chiamante non crea frame di stack come parte della convenzione di chiamata? Non suona in questo modo, in base al testo diverso dal titolo. –