Почему gcc использует movl вместо push для передачи аргументов функции?

обратите внимание на этот код:

#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

, почему это происходит? в чем разница между ними?

17
задан Peter Cordes 15 October 2019 в 18:40
поделиться