61
© 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal [email protected] Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica da USP

Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal [email protected] Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 1

Pilha de execução

Volnys Borges Bernal

[email protected]

Departamento de Sistemas Eletrônicos (PSI)

Escola Politécnica da USP

Page 2: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 2

Agenda

� Os desafios da execução de subrotinas

� Pilha de execução� Controle do endereço de retorno da função� Passagem dos valores dos argumentos da função� Alocação de variáveis locais

� Quadro da pilha de execução

Page 3: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 3

Os desafios da execução de subrotinas

Page 4: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 4

Os desafios da execução de subrotinas

1 - Retorno de subrotina(função)

� Quando uma subrotina(função) é ativada, o controle da execução deve ser transferido para a instrução inicial da subrotina.

� Ao termino da subrotina, a próxima instrução a ser executada deve ser a instrução posterior àinstrução que ativou a subrotina

(1)

void a(){

b()

void b(){

(2)

(3)

(4)(5) }

}

Page 5: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 5

Os desafios da execução de subrotinas

2 – Variáveis locais� As variáveis locais e parâmetros passados para a função

devem existir somente enquanto durar a execução da função.

b(3)

void b(int x){int i

(3)b(3)

(1)

(5)

(2)

(4)

void a(){

}

}

}

void a(){

Page 6: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 6

Os desafios da execução de subrotinas

3 – Instâncias independentes� Cada instância de uma subrotina deve possuir suas próprias

instâncias de variáveis locais e parâmetros.

b(3)

void b(int x){int i

If (…) b(k)

void a(){

}}

void b(int x){int i

If (…) b(k)

}

Page 7: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 7

Pilha de execução

Page 8: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 8

Pilha de execução

� Finalidade� Realizar o controle da execução de subrotinas de um

programa: 1. Controle do endereço de retorno da função;

2. Passagem dos valores dos argumento da função;

3. Alocação de variáveis locais à função.

� Descrição� Espaço de memória especialmente reservado para organização

de uma pilha de quadros (frame) de ativação (ou registro de ativação).

� Cada quadro (frame) corresponde ao controle da ativação de uma função;

� Esta pilha de quadros é usada como memória auxiliar durante a execução do programa

Page 9: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 9

Pilha de execuçãoMemória virtual

0

N

Código

Dados

Pilha de execução

� Uma área exclusiva para a pilha de execução é reservada na memória virtual.

� A cada subrotina ativada, um “quadro” (frame) é criado na pilha de execução.

Page 10: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 10

Pilha de execução

� Exemplo

(1)

void a()

b()

Memória virtual

0

N

Código

Dados

Pilha de execução

Quadro função a()

Page 11: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 11

Pilha de execução

� Exemplo

(1)

void a()

b()

void b()(2)

(3)

c()

Memória virtual

0

N

Código

Dados

Pilha de execução

Quadro função a()

Quadro função b()

Page 12: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 12

Pilha de execução

� Exemplo

(1)

void a()

b()

void b()(2)

(3)

c()

void c()

(5)

(4)

Memória virtual

0

N

Código

Dados

Pilha de execução

Quadro função a()

Quadro função b()

Quadro função c()

Page 13: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 13

Pilha de execução

� Suporte pelo processador

� Instruções especiais para subrotinas:� CALL – Chamada de subrotina:

o Desvia o controle para uma subrotina salvando o endereço de retorno (endereço da próxima instrução) no topo da pilha.

� RET - Retorno de uma subrotina:

o O controle do programa (PC) é transferido para o valor desempilhando do topo da pilha

� Registradores especiais para controle da pilha de execução:� SP (stack pointer): Contém o endereço do topo da pilha de

execução

Page 14: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 14

Controle do endereço de retorno da função

Page 15: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 15

Controle do endereço de retorno

� Realizado pelas instruções CALL e RET

(1)

void f1(){

f2()

void f2(){(2)

(3)

(4)(5)

Programa em assembler

(1)

CALL $f2

(2)

(3)

(4)(5)

RET

}

}

f1:

f2:

RET

Programa em C

Page 16: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 16

Controle do endereço de retorno

� Exemplo de funcionamento das instruções CALL e RET

(1)

CALL $f2

f1:

RET

Pilha de execução

sp

Page 17: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 17

Controle do endereço de retorno

� Exemplo de funcionamento das instruções CALL e RET

(1)

CALL $f2

(2)

(3)

RET

f1:

f2:

RET

end. ret.

Pilha de execução

A instrução CALL salva o endereço de retorno (endereço

da instrução após CALL) na pilha de execução e transfere

o controle para f2.

sp

Page 18: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 18

Controle do endereço de retorno

� Exemplo de funcionamento das instruções CALL e RET

(1)

CALL $f2

(2)

(3)

(4)(5)RET

f1:

f2:

RET

Pilha de execução

A instrução RET retira o valor contido no topo da pilha de

execução (endereço de retorno) e transfere o controle

para o endereço representado por este valor.

sp

Page 19: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 19

Passagem dos valores dos argumento para a função

Page 20: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 20

Passagem dos valores dos argumentos

� A pilha de execução é utilizada, também, para passagem dos argumentos da função.

� Os valores dos argumentos são inseridos na pilha de execução antes da ativação da instrução CALL.

Page 21: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 21

Passagem dos valores dos argumentos

� Exemplo

void f2(int a, int b)

{

...

}

int f1()

{

...

f2(35,99);

...

}

(1)

f1:

PUSH 99PUSH 35CALL $f2POPPOP

f2:(2)

(3)

RETRET(4)

(5)

Page 22: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 22

Passagem dos valores dos argumentos

� Exemplo

(1)

f1:

f2:

RETRET

Pilha de execução

spPUSH 99PUSH 35CALL $f2POPPOP

Page 23: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 23

Passagem dos valores dos argumentos

� Exemplo

(1)

f1:

PUSH 99PUSH 35CALL $f2POPPOP

f2:

RETRET

Pilha de execução

sp99

Page 24: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 24

Passagem dos valores dos argumentos

� Exemplo

(1)

f1:

PUSH 99PUSH 35CALL $f2POPPOP

f2:

RETRET

Pilha de execução

sp

99

35

Page 25: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 25

Passagem dos valores dos argumentos

� Exemplo

(1)

f1:

PUSH 99PUSH 35CALL $f2POPPOP

f2:(2) (3)

RETRET

Pilha de execução

sp

99

35

end. ret.

Page 26: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 26

Passagem dos valores dos argumentos

� Exemplo

(1)

f1:

PUSH 99PUSH 35CALL $f2POPPOP

f2:(2)

RETRET

Pilha de execução

sp

99

35

(3)

(4)

Page 27: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 27

Passagem dos valores dos argumentos

� Exemplo

(1)

f1:

PUSH 99PUSH 35CALL $f2POPPOP

f2:(2)

RETRET

Pilha de execução

sp99

(4)

(5)(3)

Page 28: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 28

Passagem dos valores dos argumentos

� Exemplo

(1)

f1:

PUSH 99PUSH 35CALL $f2POPPOP

f2:(2)

RETRET

Pilha de execução

sp

(4)

(5)

(3)

Page 29: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 29

Alocação de variáveis locais

Page 30: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 30

Alocação de variáveis locais

� Variáreis locais também são alocadas na pilha de execução.

� As variáveis locais de uma função ficam alocadas no quadro da respectiva função na pilha de execução

Page 31: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 31

Alocação de variáveis locais

� Exemplo

void f2(int a, int b)

{

int x;

...

}

int f1()

{

...

f2(35,99);

...

}

(1)

f1:

PUSH 99PUSH 35CALL $f2POPPOP

f2:(2)

(3)

RETRET(4)

(5)

SUB 4,SP

ADD 4,SP

Page 32: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 32

Alocação de variáveis locais

� Exemplo

(1)

f1:

f2:

RETRET

Pilha de execução

spPUSH 99PUSH 35CALL $f2POPPOP

SUB 4,SP

ADD 4,SP

Page 33: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 33

Alocação de variáveis locais

� Exemplo

(1)

f1:

PUSH 99PUSH 35CALL $f2POPPOP

f2:(2)

RET

Pilha de execução

sp

99

35

end. ret.

SUB 4,SP

RETADD 4,SP

Page 34: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 34

Alocação de variáveis locais

� Exemplo

(1)

f1:

PUSH 99PUSH 35CALL $f2POPPOP

f2:(2)

(3)

RET

Pilha de execução

sp

99

35

end. ret.

SUB 4,SP

X =4 bytes

RETADD 4,SP

Page 35: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 35

Alocação de variáveis locais

� Exemplo

(1)

f1:

PUSH 99PUSH 35CALL $f2POPPOP

f2:(2)

RET

Pilha de execução

sp

99

35

(3)

(4)

SUB 4,SP

RETADD 4,SP

Page 36: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 36

Alocação de variáveis locais

� Exemplo

(1)

f1:

f2:

(3)

RET(4)

(5) Pilha de execução

sp(2)PUSH 99

PUSH 35CALL $f2POPPOP

SUB 4,SP

RETADD 4,SP

Page 37: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 37

Quadro da pilha de execução

Page 38: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 38

Quadro da pilha de execução

� Exemplo de quadro da pilha

void f2(int a, int b)

{

int x;

int y;

...

}

int f1()

{

...

f2(35,99);

...

}

Pilha de execução

sp

99

35

end. ret.

x

y

Quadro da

função f2

Quadro da

função f1

Variáveis

locais

Endereço de retorno

Argurmentos

Page 39: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 39

Exercício

Page 40: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 40

Exercício

(1) Mostre graficamente a evolução da área de dados e da pilha de execução decorrente da execução do programa perímetro.c.

Page 41: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 41

Exercício// Programa perimetro.c

// Calcula o perímetro de uma circunferencia

#include <stdio.h>

float raio;

float per;

const float pi = 3.1415912;

float perimetro(float r)

{

float p; /* perimetro */

p = 2 * pi * r;

return(p);

}

int main()

{

printf("Entre com o valor do raio: ");

scanf("%f",&raio);

per = perimetro(raio);

printf("Perímetro: %3.2f \n", per);

}

Page 42: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 42

ExercícioMemória virtual

0

N

Código

Dados

Pilha de execução

Page 43: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 43

ExercícioMemória virtual

0

N

Código

Dados

Pilha de execução

Pilha de execuçãoÁrea de dados

per

PI

0

3,1415912

0

spraio

Page 44: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 44

Exercício

(2) Mostre graficamente a evolução da área de dados e da pilha de execução decorrente da execução do programa “fatorial” para o cálculo de fatorial de 3.

Page 45: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 45

Exercício#include <stdio.h>

char versao[] = "2.1";

int n;

int resultado;

int fatorial (int x)

{

int y;

if (x <= 1)

y = 1;

else

y = x * fatorial(x-1);

return(y);

}

int main(int argc, char **argv)

{

printf("Programa fatorial, versao %s \n", versao);

printf("Entre com o valor: " );

scanf("%d",&n);

resultado = fatorial(n);

printf("Resultado: %d \n",resultado);

}

Page 46: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 46

Controle do quadro da pilha de execução na

arquitetura Intel Pentium

Page 47: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 47

Controle do quadro da pilha de execução

� Exemplo - Processador Intel Pentium

� Registradores especiais:� Registrador ESP: contém o endereço do topo da pilha

� Registrador EBP: contém a base do quadro

� Sentido do crescimento da pilha� Por motivos históricos, a pilha geralmente cresce em direção aos

endereços menores de memória.

� Assim, para alocar espaço para um endereço na pilha, devemos subtrair 4 de ESP no Pentium (um endereço no Intel Pentium ocupa 4 bytes!). Para desalocar devemos somar 4 ao ESP.

Page 48: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 48

Controle do quadro da pilha de execução

� Arquitetura Intel Pentium

� Registrador ebp� O registrador ebp é utilizado como referência para o quadro de

ativação corrente

� O código gerado por um compilador na execução de uma chamada de função começa com:

pushl %ebp

movl %esp,%ebp

� E termina com:

movl %ebp,%esp

popl %ebp

Page 49: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 49

Controle do quadro da pilha de execuçãovoid troca (int *x, int *y)

{

int tmp;

tmp = *x;

*x = *y;

*y = tmp;

}

troca: push %ebp

mov %esp, %ebp

sub $4, %esp /* reserva espaço na pilha para tmp */

mov 8(%ebp), %eax /* 1o parâmetro: endereço de x */

mov (%eax), %edx /* pega valor de x */

mov %edx, -4(%ebp) /* tmp = *x */

mov 12(%ebp), %ebx /* 2o parâmetro: endereço de y */

mov (%ebx), %edx /* pega valor de y */

mov %edx, (%eax) /* *x = *y */

mov -4(%ebp), %edx /* leitura do valor de tmp */

mov %edx, (%ebx) /* *y = tmp */

mov %ebp, %esp

pop %ebp

ret

Exemplo: Arquitetura Intel Pentium

Page 50: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 50

Controle do quadro da pilha de execução

Exemplo: Arquitetura Intel Pentium

arg2

arg1

end. ret.

local1

local2

ebp ant.

esp

ebp

troca: push %ebp

mov %esp , %ebp

sub $4 , %esp

mov 8(%ebp), %eax

mov (%eax), %edx

mov %edx ,-4(%ebp)

mov 12(%ebp), %ebx

mov (%ebx), %edx

mov %edx , (%eax)

mov -4(%ebp), %edx

mov %edx , (%ebx)

mov %ebp , %esp

pop %ebp

ret

y

x

end. ret.

Page 51: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 51

Controle do quadro da pilha de execução

arg2

arg1

end. ret.

local1

local2

ebp ant.

esp

ebp

troca: push %ebp

mov %esp , %ebp

sub $4 , %esp

mov 8(%ebp), %eax

mov (%eax), %edx

mov %edx ,-4(%ebp)

mov 12(%ebp), %ebx

mov (%ebx), %edx

mov %edx , (%eax)

mov -4(%ebp), %edx

mov %edx , (%ebx)

mov %ebp , %esp

pop %ebp

ret

y

x

end. ret.

ebp ant.

Exemplo: Arquitetura Intel Pentium

Page 52: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 52

Controle do quadro da pilha de execução

arg2

arg1

end. ret.

local1

local2

ebp ant.

esp ebp

troca: push %ebp

mov %esp , %ebp

sub $4 , %esp

mov 8(%ebp), %eax

mov (%eax), %edx

mov %edx ,-4(%ebp)

mov 12(%ebp), %ebx

mov (%ebx), %edx

mov %edx , (%eax)

mov -4(%ebp), %edx

mov %edx , (%ebx)

mov %ebp , %esp

pop %ebp

ret

y

x

end. ret.

ebp ant.

Exemplo: Arquitetura Intel Pentium

Page 53: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 53

Controle do quadro da pilha de execuçãoExemplo: Arquitetura Intel Pentium

arg2

arg1

end. ret.

local1

local2

ebp ant.

esp

ebp

troca: push %ebp

mov %esp , %ebp

sub $4 , %esp

mov 8(%ebp), %eax

mov (%eax), %edx

mov %edx ,-4(%ebp)

mov 12(%ebp), %ebx

mov (%ebx), %edx

mov %edx , (%eax)

mov -4(%ebp), %edx

mov %edx , (%ebx)

mov %ebp , %esp

pop %ebp

ret

y

x

end. ret.

ebp ant.

tmp

Page 54: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 54

Controle do quadro da pilha de execuçãoExemplo: Arquitetura Intel Pentium

arg2

arg1

end. ret.

local1

local2

ebp ant.

ebpEndereços:

-4(%ebp) ���� variável local tmp

8(%ebp) ���� parâmetro x

12(%ebp) ���� parâmetro yy

x

end. ret.

ebp ant.

tmp- 4 bytes

8 bytes

12 bytes

Page 55: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 55

Exercício

Page 56: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 56

Exercício

(3) Seja a configuração da pilha em um processador Intel Pentium (little endian) mostrada no próximo slide.

� Suponha o valor do registrador eax = A1B2C3D4 (hex)

� Qual é a configuração da pilha de execução após a execução da instrução a seguir?

pushl %eax (empilha os 4 bytes que representam ovalor contido no registrador eax)

Page 57: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 57

ExercícioMemória

0

N

Código

Dados

Pilha de execução

esp

Exemplo: Arquitetura Intel Pentium

4000 000F

4000 0008

4000 0010

4000 000E4000 000D4000 000C4000 000B4000 000A4000 0009

4000 0004

4000 00074000 00064000 0005

4000 0000

4000 00034000 00024000 0001

Page 58: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 58

ExercícioMemória

0

N

Código

Dados

Pilha de execução

esp

A1B2C3D4

Exemplo: Arquitetura Intel Pentium

4000 000F

4000 0008

4000 0010

4000 000E4000 000D4000 000C4000 000B4000 000A4000 0009

4000 0004

4000 00074000 00064000 0005

4000 0000

4000 00034000 00024000 0001

Page 59: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 59

Exercício

(4) Em relação ao slide anterior, qual é a configuração da pilha de execução após a execução da seguinte instrução:

popl %eax (desempilha 4 bytes do topo da pilha e armazena no registrador eax)

Page 60: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 60

ExercícioMemória

0

N

Código

Dados

Pilha de execução

esp

A1B2C3D4

Exemplo: Arquitetura Intel Pentium

4000 000F

4000 0008

4000 0010

4000 000E4000 000D4000 000C4000 000B4000 000A4000 0009

4000 0004

4000 00074000 00064000 0005

4000 0000

4000 00034000 00024000 0001

Page 61: Volnys Borges Bernal - USP · © 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica

© 2005-2015 Volnys Bernal 61

ExercícioMemória

0

N

Código

Dados

Pilha de execução

esp

Exemplo: Arquitetura Intel Pentium

4000 000F

4000 0008

4000 0010

4000 000E4000 000D4000 000C4000 000B4000 000A4000 0009

4000 0004

4000 00074000 00064000 0005

4000 0000

4000 00034000 00024000 0001