1 / 10

Aula 6 – Sumário

Aula 6 – Sumário. Revisão da aula anterior Endereçamento indirecto Recursividade Conceito Exemplos. Processador MAC-1. Revisão – endereçamento indirecto. Revisão – endereçamento indirecto. Exemplo: copiar vector

zocha
Download Presentation

Aula 6 – Sumário

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Aula 6 – Sumário • Revisão da aula anterior • Endereçamento indirecto • Recursividade • Conceito • Exemplos

  2. Processador MAC-1 Revisão – endereçamento indirecto

  3. Revisão – endereçamento indirecto Exemplo: copiar vector Implementar um procedimento que copie n elementos de um vector A para um vector B O procedimento deverá receber como argumentos: • O número de elementos a copiar (n) • O endereço do primeiro elemento do vector A (referência) • O endereço do primeiro elemento do vector B (referência)

  4. Revisão – endereçamento indirecto jump main A: 6 4 3 5 7 B: 0 0 0 0 0 n: 5 main: lodd n push loco A push loco B push call copia insp 3 halt copia: loco 0 push # int i=0 ciclo: lodl 0 subl 4 jzer fim # i-n == 0? lodl 3 addl 0 pshi # A[i] no topo da pilha lodl 3 addl 1 popi # B[i] = A[i] loco 1 addl 0 stol 0 # i=i+1 jump ciclo fim: insp 1 retn Organização da pilha em ‘copia’ i SP End. Ret. B (ref.) A (ref.) n

  5. Processador MAC-1 Recursividade

  6. Recursividade • Existem situações em que uma rotina se invoca a si própria • Diz-se que a rotina é recursiva ou recorrente • Soluções recursivas podem ser úteis, simplificando a resolução de alguns problemas, … • … mas é preciso ter cuidado, pois uma solução recursiva causa um maior crescimento da pilha • cada chamada à rotina faz com que sejam colocados dados na pilha (argumentos, endereço de retorno, variáveis locais); • se a rotina se chamar demasiadas vezes a ela própria, a pilha pode ficar sem espaço para crescer (“stack overflow”)

  7. Programação MAC-1 Exemplo: uma sucessão Implementar uma função que calcule o termo de ordem n da seguinte sucessão, definida de forma recursiva: // Pseudo-código int U(int n) { if (n==1) return 1; return 2*U(n-1) + 1; }

  8. Programação MAC-1 jump main C1: 1 main: loco 4 push call U# U(4) insp 1 halt # int U(int n) U: lodl 1 subd C1# AC = n-1 jzer ret1# if n-1==0 return 1 push # call U # U(n-1) insp 1 # push # temp = U(n-1) addl 0 # AC = 2*temp insp 1 # descarta temp addd C1 # AC = 2*U(n-1)+1 retn ret1: loco 1 # AC = 1 retn Organização da pilha em ‘U’ SP End. Ret. n

  9. Programação MAC-1 Exemplo: números de Fibonacci Fazer uma função que calcule o número de Fibonacci de ordem n. Este é dado por: // Pseudo-código int fibo(int n) { if (n==1 || n==0) return 1; return fibo(n-1) + fibo(n-2); }

  10. Programação MAC-1 fibo: lodl 1 subd C1# AC = n-1 jzer ret1# if n-1==0 return 1 lodl 1 jzerret1 lodl 1 # subd C2 # push # call fibo# fibo(n-2) insp 1 push # tmp = fibo(n-2) lodl 2 # subd C1 # push # call fibo # F(n-1) insp 1 addl 0 # AC=fibo(n-1)+tmp insp 1 # descarta tmp retn ret1: loco 1 # AC = 1 retn jump main C1: 1 C2: 2 main: loco 4 push call fibo# fibo(4) insp 1 halt Organização da pilha em ‘fibo’ End. Ret. SP n tmp SP End. Ret. n

More Related