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???