Ebp, esp e stack frame em assembly com nasm

Eu tenho algumas perguntas sobre ebp, esp e stack frame no seguinte código.

Por que subtraímos 28 da esp? Nós temos duas variáveis ​​locais x e y no main. Então, por que não subtraímos 8?

E não colocamos valores para empilhar da direita para a esquerda? Então, por que adicionamos 1 a [eax + 8] em vez de [eax + 4]?

Eu sou um pouco confuso sobre essa estrutura. Você pode me ajudar? THX.

func(int a, int b, int c)
{
  return a+b+c;
}
main()
{
 int x, y=3;
 x=func(y,2,1);
}

questionAnswers(1)

yourAnswerToTheQuestion