A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Programação MAC-1 Exemplo: copiar vector

Apresentações semelhantes


Apresentação em tema: "Programação MAC-1 Exemplo: copiar vector"— Transcrição da apresentação:

1 Programação MAC-1 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)

2 Programação MAC-1 jump main A: 6 4 3 5 7 B: 0 0 0 0 0 n: 5
main: lodd n push loco A loco B 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 addl 1 popi # B[i] = A[i] loco 1 stol 0 # i=i+1 jump ciclo fim: insp 1 retn Organização da pilha em ‘copia’ SP i End. Ret. B (ref.) A (ref.) n

3 Processador MAC-1 Recursividade

4 Programação MAC-1 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 para resolver alguns problemas, mas é preciso ter cuidado pois a pilha pode crescer muito… cada chamada à função faz com que sejam colocados dados na pilha; se a função se chamar demasiadas vezes a ela própria, a pilha pode ficar sem espaço para crescer (“stack overflow”)

5 Programação MAC-1 Exemplo (recursividade)
Fazer 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; else return 2*U(n-1) + 1; }

6 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 # push # temp = U(n-1) addl # AC = 2*temp insp # descarta temp addd C1 # AC = 2*U(n-1)+1 retn ret1: loco # AC = 1

7 Programação MAC-1 Exemplo (recursividade)
Fazer uma função que calcule o número de Fibonnaci de ordem n. O número de Fibonnaci de ordem n é dado por: int fibo(int n) { if (n==1 || n==0) return 1; else return fibo(n-1) + fibo(n-2); }

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


Carregar ppt "Programação MAC-1 Exemplo: copiar vector"

Apresentações semelhantes


Anúncios Google