Le ABI normalmente specificano quali registri sono preservati dalle chiamate a funzione e quali possono essere sovrascritti; su Linux/x86 normalmente eax, edx e ecx sono considerati degli "scratch register" (ovvero, il compilatore assume che dopo una chiamata a funzione siano stati sovrascritti), mentre gli altri devono essere preservati. Per questo motivo tipicamente vedrai delle push eax/edx/ecx (e le relative pop) nel chiamante, ed eventualmente delle push di altri registri nel chiamato (o nessuna se riesce a cavarsela già solo con gli scratch register).