paradigmas de linguagens de programacao - aula #3

14
Paradigmas de Linguagens de Programação Paradigma Imperativo [Sub-programas] Aula #3 (CopyLeft)2009 - Ismar Frango [email protected]

Upload: ismarfrango

Post on 25-May-2015

1.621 views

Category:

Education


2 download

DESCRIPTION

Paradigmas de Linguagens de Programacao - Aula #3 Prof. Ismar Frango

TRANSCRIPT

Page 1: Paradigmas de Linguagens de Programacao - Aula #3

Paradigmas de Linguagens de Programação

Paradigma Imperativo [Sub-programas]Aula #3

(CopyLeft)2009 - Ismar Frango [email protected]

Page 2: Paradigmas de Linguagens de Programacao - Aula #3

Slide traduzido de Vitaly Shmatikov, U. Texas - http://www.cs.utexas.edu/~shmat/courses/cs345_spring08/

Uma sub-rotina/função/procedimento é um escopo nomeado parametrizado

Pode retornar um valor (geralmente chamando-se de função)x = (b*b - sqrt(4*a*c))/2*a

Pode não retornar valorChama-se “procedure” (Ada/Pascal),

“subroutine” (Fortran), “void functions/methods” (C, C++, Java)

Contêm declarações de variáveis locais e instruções

Argumentos podem ser passados para o escopoPode ser

referenciado e até sobrecarregado

Abstração Procedimental

Page 3: Paradigmas de Linguagens de Programacao - Aula #3

Argumentos e Parâmetros

• Argumento: expressão que aparece em uma chamada

• Parâmetro: identificador que aparece na declaração

• O casamento parâmetro-argumento pode ser por número e posição– Há exceções, como em Perl, onde

os parâmetros são disponíveis como elementos de um array @_, ou como em Ada, que usa passagem nomeada

int h, i;void B(int w) { int j, k; i = 2*w; w = w+1;} void A(int x, int y) { bool i, j; B(h);}int main() { int a, b; h = 5; a = 3; b = 2; A(a, b);}

Page 4: Paradigmas de Linguagens de Programacao - Aula #3

Como funciona a execução de sub-programas?

Modelo simples de memória

procedure P ( c: integer ) x: integer; procedure Q ( a, b: integer ) i, j: integer; begin x := x+a+j; end; begin Q(x,c); end;

Page 5: Paradigmas de Linguagens de Programacao - Aula #3

Activation Records (AR)

• Bloco de informação (“frame”) associado com cada chamada, incluindo:– Parâmetros– Variáveis locais– Endereço de retorno– Local onde colocar o valor de retorno quando da saída

do sub-programa (se houver retorno)– Link de controle para o AR do caller– Variáveis temporarias e resultados intermediários – Pode ter um link de acesso ao “escopo-pai” da função

(depende da linguagem)• Cada chamada de um subprograma gera uma instância de

um AR – Activation Record Instance, ou ARI

Page 6: Paradigmas de Linguagens de Programacao - Aula #3

Layout de um Activation Record

• Return address– Onde está o código a

ser executado quando o sub-programa terminar?

• Return-result address– Endereço no AR do

caller que recebe o retorno

• Parameters– Contêm os dados

vindos do caller

Control link

Local variables

Intermediate results

Environment pointer

Parameters

Return address

Return-result addr

Page 7: Paradigmas de Linguagens de Programacao - Aula #3

Exemplo

• Funçãofact(n) = if n<= 1 then 1 else n * fact(n-

1)– Return result address:

• local onde colocar fact(n)

– Parameters• Recebe o valor de n

– Intermediate results• Locais com os valores de

fact(n-1)

Control link

Local variables

Intermediate results

Environment pointer

Parameters

Return address

Return result addr

Page 8: Paradigmas de Linguagens de Programacao - Aula #3

x86 Activation Record

frame pointer

stack pointer

Page 9: Paradigmas de Linguagens de Programacao - Aula #3

http://www.inf.ufrgs.br/~nicolas/pdf/Compiladores22-runtime.pdf

Page 10: Paradigmas de Linguagens de Programacao - Aula #3

10

Frame Pointer

• Aponta para o fim da frame corrente

g(…)

{

f(a1,…,an);

}

g caller

f callee

Arg n…Arg 2Arg 1Static linkLocal varsRet addressTemporariesSaved regsArg m…Arg 1Static link

f’s frame

g’s frame

next frame

sp

fp

Page 11: Paradigmas de Linguagens de Programacao - Aula #3

Control link

fact(n-1)

n

Return-result addr

3

fact(3)

Function Call

(O Return address é um ponteiro no segmento de código)

Control link

fact(n-1)

n

Return-result addr

2

fact(2)

fact(n) = if n<= 1 then 1

else n * fact(n-1)

Control link

fact(n-1)

n

Return-result addr

k

fact(k)

Environment pointer

Control link

fact(n-1)

n

Return-result addr

1

fact(1)

Page 12: Paradigmas de Linguagens de Programacao - Aula #3

Function Return

Control link

fact(n-1)

n

Return-result addr

3

fact(3)

Control link

fact(n-1)

n

Return-result addr

1

2

fact(2)

Control link

fact(n-1)

n

Return-result addr

1

fact(1)

fact(n) = if n<= 1 then 1

else n * fact(n-1)

Control link

fact(n-1)

n

Return-result addr

2

3

fact(3)

Control link

fact(n-1)

n

Return-result addr

1

2

fact(2)

Highaddresses

Lowaddresses

Page 13: Paradigmas de Linguagens de Programacao - Aula #3

Caller:– avalia os parâmetros efetivos e os coloca na pilha– Registradores em uso pelo chamador são salvos emmemória– armazena o endereço de retorno e o valor antigo doframe_pointer no registro de ativação da rotinachamada e atualiza o valor do frame_pointer;

Calee:– salva valores de registradores e outras informações do estado da máquina;– inicializa variáveis locais e começa sua execução.

Sequência da chamada

Page 14: Paradigmas de Linguagens de Programacao - Aula #3

Callee:– armazena o valor de retorno logo após o registro de ativação da rotina chamadora;– restaura o apontador do topo do RA e os registradores da máquina e desvia para o endereço de retorno dentro da rotina chamadora;

Caller:– copia o valor retornado no seu próprio registro de ativação

Sequência do retorno