Para resumir la función como un ejemplo
int sum(int a,int b)
{
return a+b;
}
Su código ensamblador
.text
.global sum
sum:
pushl %ebp
movl %esp,%ebp
movl 8(%ebp),%eax
addl 12(%ebp),%eax
leave
ret
A continuación, la función principal
int main(void)
{
int a;
int b=12;
int c=24;
a=sum(b,c);
return 0;
}
código ensamblador para
.text
.global main
main:
pushl %ebp
movl %esp,%ebp
subl $12,%esp
movl $12,-8(%ebp)
movl $24,-12(%ebp)
pushl -12(%ebp)
pushl -8(%ebp)
call sum
addl $8,%esp
movl %eax,-4(%ebp)
movl $0,%eax
leave
ret
Las variables locales se utilizan para aplicar subl $ 12,% esp en el espacio de pila de aplicaciones para sostener el 12 bytes a, b, c. a es -4 (% ebp), b es -8 (% ebp), y así sucesivamente.
Registro convenciones de uso de
acuerdo con la práctica establecida, el registro% eax,% EDX,% ecx registro de llamadas se divide salvado. Cuando el procedimiento llama p q, q puede anular estos registros, sin interrumpir cualquier datos deseado p. Por otra parte, el registro% ebx,% esi, el llamador% edi se divide en un ahorro registro. Esto significa q debe ser cubierto antes de que estos registros, guardarlos en primer lugar en la pila y restaurarlos antes de regresar, deben pueden ser necesarios estos valores en el futuro para el cálculo de p.