обратите внимание на этот код:
#include <stdio.h>
void a(int a, int b, int c)
{
char buffer1[5];
char buffer2[10];
}
int main()
{
a(1,2,3);
}
после этого:
gcc -S a.c
эта команда показывает наш исходный код в ассемблере.
теперь мы можем видеть в основной функции , мы никогда не используем команду "push" для передачи аргументов функцию в стек. и он использовал "movel" вместо этого
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
, почему это происходит? в чем разница между ними?