As variáveis locais (iii) função para a linguagem assembler de C

Para resumir função como um exemplo

int sum(int a,int b)
{
	return a+b;
}

Seu código de montagem

.text
.global sum
sum:
	pushl %ebp
	movl %esp,%ebp
	movl 8(%ebp),%eax
	addl 12(%ebp),%eax
	leave
	ret

Em seguida, a função principal

int main(void)
{
	int a;
	int b=12;
	int c=24;
	a=sum(b,c);
	return 0;
}

código assembler 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

As variáveis ​​locais são usadas para aplicar subi US $ 12,% esp no espaço de pilha aplicativo para segurar a 12 bytes a, b, c. um é -4 (% ebp), b é -8 (% ebp), e assim por diante.

Register convenções de uso
de acordo com a prática estabelecida, o registo% eax,% edx,% ecx registo é dividido chamador salva. Quando o procedimento chama p q, q pode substituir esses registros, sem interromper quaisquer dados desejado p. Por outro lado, o% ebx registo,% ESI,% edi chamador é dividido em uma economia de registo. Isso significa q deve ser coberto antes destes registos, salvá-los primeiro para a pilha e restaurá-los antes de retornar, caso esses valores podem ser necessários no futuro para p computação.

Ele publicou 185 artigos originais · ganhou elogios 18 · vista 160 000 +

Acho que você gosta

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