Your SlideShare is downloading. ×
0
Paradigmas de Linguagens de Programação Paradigma Imperativo [Sub-programas] Aula #3 (CopyLeft)2009 - Ismar Frango ismar@m...
<ul><li>Uma sub-rotina/função/procedimento é um  escopo nomeado parametrizado </li></ul><ul><li>Pode retornar um valor (ge...
Argumentos e Parâmetros <ul><li>Argumento:  expressão que aparece em uma  chamada </li></ul><ul><li>Parâmetro:  identifica...
Como funciona a execução de sub-programas? Modelo simples de memória procedure P ( c: integer )  x: integer;  procedure Q ...
Activation Records (AR) <ul><li>Bloco de informação (“frame”) associado com cada  chamada , incluindo: </li></ul><ul><ul><...
Layout de um Activation Record <ul><li>Return address </li></ul><ul><ul><li>Onde está o código a ser executado quando o su...
Exemplo <ul><li>Função </li></ul><ul><ul><li>fact(n) = if n<= 1  then 1 </li></ul></ul><ul><ul><li>else n * fact(n-1) </li...
x86 Activation Record frame pointer stack pointer
http://www.inf.ufrgs.br/~nicolas/pdf/Compiladores22-runtime.pdf
Frame Pointer <ul><li>Aponta para o fim da frame corrente </li></ul><ul><li>g(…) </li></ul><ul><li>{ </li></ul><ul><li>f(a...
Function Call <ul><li>(O  Return address  é um ponteiro no segmento de código ) </li></ul><ul><ul><li>fact(n) = if n<= 1  ...
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...
Caller: –  avalia os parâmetros efetivos e os coloca na pilha –  Registradores em uso pelo chamador são salvos em memória ...
Callee: –  armazena o valor de retorno logo após o registro de ativação da rotina chamadora; –  restaura o apontador do to...
Upcoming SlideShare
Loading in...5
×

Paradigmas de Linguagens de Programacao - Aula #3

1,630

Published on

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

Published in: Education, Technology

Transcript of "Paradigmas de Linguagens de Programacao - Aula #3"

  1. 1. Paradigmas de Linguagens de Programação Paradigma Imperativo [Sub-programas] Aula #3 (CopyLeft)2009 - Ismar Frango ismar@mackenzie.br
  2. 2. <ul><li>Uma sub-rotina/função/procedimento é um escopo nomeado parametrizado </li></ul><ul><li>Pode retornar um valor (geralmente chamando-se de função) </li></ul><ul><ul><li>x = (b*b - sqrt(4*a*c))/2*a </li></ul></ul><ul><li>Pode não retornar valor </li></ul><ul><ul><li>Chama-se “procedure” (Ada/Pascal), “subroutine” (Fortran), “void functions/methods” (C, C++, Java) </li></ul></ul>Abstração Procedimental Slide traduzido de Vitaly Shmatikov, U. Texas - http://www.cs.utexas.edu/~shmat/courses/cs345_spring08/ Contêm declarações de variáveis locais e instruções Argumentos podem ser passados para o escopo Pode ser referenciado e até sobrecarregado
  3. 3. Argumentos e Parâmetros <ul><li>Argumento: expressão que aparece em uma chamada </li></ul><ul><li>Parâmetro: identificador que aparece na declaração </li></ul><ul><li>O casamento parâmetro-argumento pode ser por número e posição </li></ul><ul><ul><li>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 </li></ul></ul>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); }
  4. 4. 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;
  5. 5. Activation Records (AR) <ul><li>Bloco de informação (“frame”) associado com cada chamada , incluindo: </li></ul><ul><ul><li>Parâmetros </li></ul></ul><ul><ul><li>Variáveis locais </li></ul></ul><ul><ul><li>Endereço de retorno </li></ul></ul><ul><ul><li>Local onde colocar o valor de retorno quando da saída do sub-programa (se houver retorno) </li></ul></ul><ul><ul><li>Link de controle para o AR do caller </li></ul></ul><ul><ul><li>Variáveis temporarias e resultados intermediários </li></ul></ul><ul><ul><li>Pode ter um link de acesso ao “escopo-pai” da função (depende da linguagem) </li></ul></ul><ul><li>Cada chamada de um subprograma gera uma instância de um AR – Activation Record Instance , ou ARI </li></ul>
  6. 6. Layout de um Activation Record <ul><li>Return address </li></ul><ul><ul><li>Onde está o código a ser executado quando o sub-programa terminar? </li></ul></ul><ul><li>Return-result address </li></ul><ul><ul><li>Endereço no AR do caller que recebe o retorno </li></ul></ul><ul><li>Parameters </li></ul><ul><ul><li>Contêm os dados vindos do caller </li></ul></ul>Control link Local variables Intermediate results Environment pointer Parameters Return address Return-result addr
  7. 7. Exemplo <ul><li>Função </li></ul><ul><ul><li>fact(n) = if n<= 1 then 1 </li></ul></ul><ul><ul><li>else n * fact(n-1) </li></ul></ul><ul><ul><li>Return result address: </li></ul></ul><ul><ul><ul><li>local onde colocar fact(n) </li></ul></ul></ul><ul><ul><li>Parameters </li></ul></ul><ul><ul><ul><li>Recebe o valor de n </li></ul></ul></ul><ul><ul><li>Intermediate results </li></ul></ul><ul><ul><ul><li>Locais com os valores de fact(n-1) </li></ul></ul></ul>Control link Local variables Intermediate results Environment pointer Parameters Return address Return result addr
  8. 8. x86 Activation Record frame pointer stack pointer
  9. 9. http://www.inf.ufrgs.br/~nicolas/pdf/Compiladores22-runtime.pdf
  10. 10. Frame Pointer <ul><li>Aponta para o fim da frame corrente </li></ul><ul><li>g(…) </li></ul><ul><li>{ </li></ul><ul><li>f(a1,…,an); </li></ul><ul><li>} </li></ul><ul><li>g  caller </li></ul><ul><li>f  callee </li></ul>Arg n … Arg 2 Arg 1 Static link Local vars Ret address Temporaries Saved regs Arg m … Arg 1 Static link f’s frame g’s frame next frame sp fp
  11. 11. Function Call <ul><li>(O Return address é um ponteiro no segmento de código ) </li></ul><ul><ul><li>fact(n) = if n<= 1 then 1 </li></ul></ul><ul><ul><li>else n * fact(n-1) </li></ul></ul>Control link fact(n-1) n Return-result addr 3 fact(3) Control link fact(n-1) n Return-result addr 2 fact(2) 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)
  12. 12. 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) <ul><ul><li>fact(n) = if n<= 1 then 1 </li></ul></ul><ul><ul><li>else n * fact(n-1) </li></ul></ul>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) High addresses Low addresses
  13. 13. Caller: – avalia os parâmetros efetivos e os coloca na pilha – Registradores em uso pelo chamador são salvos em memória – armazena o endereço de retorno e o valor antigo do frame_pointer no registro de ativação da rotina chamada 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
  14. 14. 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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×