prestare attenzione a questo codice:perché usa il movl invece di premere?
#include <stdio.h>
void a(int a, int b, int c)
{
char buffer1[5];
char buffer2[10];
}
int main()
{
a(1,2,3);
}
dopo che:
gcc -S a.c
che comandano mostra nostro codice sorgente in assembly.
ora possiamo vedere nella funzione principale, non usiamo mai il comando "push" per spingere gli argomenti di una funzione nello stack. e ha usato "movel" invece di quello
main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $16, %esp
movl $3, 8(%esp)
movl $2, 4(%esp)
movl $1, (%esp)
call a
leave
perché succede? che differenza c'è tra loro?
Una domanda molto migliore sarebbe il motivo per cui questa opzione generatrice '-maccumulate-outgoing-args' non viene automaticamente disabilitata da' -Os'. –
@ R .. Quindi sai perché? – Tony
@Tony: ovviamente, perché quando si decide quale dei molti (~ 200) flag di ottimizzazione abilitare/disabilitare per ciascuna opzione -O specifica, a volte le cose scivolano attraverso le fessure. – ninjalj