Ho scritto questo programma giocatolo, per approfondire il passaggio di parametri a una subroutine, tramite lo stack nel mio calcolatore.

codice:
void function(int a, int b){}

void main() 
{
  function(1,2);
}
codice:
(gdb) disassemble main
Dump of assembler code for function main:
   0x00000000004004c0 <+0>:     push   %rbp
   0x00000000004004c1 <+1>:     mov    %rsp,%rbp
   0x00000000004004c4 <+4>:     mov    $0x2,%esi
   0x00000000004004c9 <+9>:     mov    $0x1,%edi
   0x00000000004004ce <+14>:    callq  0x4004b4 <function>
   0x00000000004004d3 <+19>:    pop    %rbp
   0x00000000004004d4 <+20>:    retq   
End of assembler dump.
I parametri della funzione, vengono semplicemente caricati in dei registri (esi,edi). Qualcuno sa spiegarmi quale subdolo meccanismo, fa si che i dati siano effettivamente messi nello stack senza il push???