Las variables locales (iii) la función de la lengua de ensamblador de C

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.

Ha publicado 185 artículos originales · ganado elogios 18 · vistas 160 000 +

Supongo que te gusta

Origin blog.csdn.net/pk_20140716/article/details/103178186
Recomendado
Clasificación