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

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

1 Aula 5 – Sumário Revisão da aula anterior Funções e procedimentos Endereçamento indirecto Instruções pshi e popi Acesso a vectores e matrizes Passagem.

Apresentações semelhantes


Apresentação em tema: "1 Aula 5 – Sumário Revisão da aula anterior Funções e procedimentos Endereçamento indirecto Instruções pshi e popi Acesso a vectores e matrizes Passagem."— Transcrição da apresentação:

1 1 Aula 5 – Sumário Revisão da aula anterior Funções e procedimentos Endereçamento indirecto Instruções pshi e popi Acesso a vectores e matrizes Passagem de referências Exemplos

2 2 Processador MAC-1 Revisão – funções e procedimentos

3 3 Exemplo: Potência natural de 2 Implementar uma função que calcula 2 n. n é o valor do argumento que é passado à função. // Pseudo-código da função int power2(int n) { int p=1; for (int i=0, i!=n; i++) p=2*p; return p; }

4 4 Programação MAC-1 jump main n_ex:10 # exemplo power2: lodd n_ex push call power2 insp 1 halt # power2(int n) power2: loco 1 # criar as var. locais push # p=1 loco 0 push # i=0 ciclo:lodl 0 subl 3 jzer ret_p # i-n==0? lodl 1 addl 1 stol 1 # p=p+p (p=2*p) loco 1 addl 0 stol 0 # i=i+1 jump ciclo ret_p:lodl 1 # AC=p (valor a devolver) insp 2 # descartar as locais retn n End. Ret. p i SP Organização da pilha em power2

5 5 Processador MAC-1 Endereçamento indirecto

6 6 Assembly MAC-1 Endereçamento indirecto no MAC-1 Acesso aos elementos de vectores / matrizes MnemónicaDescriçãoSignificado pshi SP = SP – 1; M[SP] M[AC] Push indirect popi M[AC] M[SP]; SP = SP + 1 Pop indirect Semelhantes a push e pop, mas as transferências de dados envolvem neste caso uma posição de memória que é indicada pelo registo AC.

7 7 Assembly MAC-1: PSHI PSHI

8 8 Assembly MAC-1: POPI POPI

9 9 Assembly MAC-1: PSHI e POPI Sintetizando: PSHI coloca no topo da pilha o valor que está na posição de memória indicada por AC POPI coloca na posição de memória indicada por AC o valor que está no topo da pilha

10 10 Programação MAC-1 Exemplo: calcular a soma de todos os elementos de um vector // Pseudo-código int m[5] = {1, 2, 5, 7, 2}; void main() { int i=0, soma = 0; while ( i!=5 ) { soma = soma + m[i]; i = i + 1; }

11 11 jump main m: # valores guardados no vector m n_elem:5 # numero de elementos main: loco 0 # criar as variáveis locais: push # i = 0 push # soma = 0 ciclo:lodd n_elem subl 1 jzer fim # 5-i=0? loco m # calcula a posição do i-ésimo elemento, addl 1 # em AC fica o endereço da posição m+i pshi # coloca na pilha o valor que está na posição m+i (m[i]) pop # tira m[i]da pilha e põe no AC addl 0 stol 0 # soma = soma + m[i] loco 1 addl 1 stol 1 # i=i+1 jump ciclo fim:lodl 0 # vai acabar com AC = soma insp 2 halt Programação MAC-1 i soma SP i soma SP m[i]

12 12 Funções e vectores / matrizes Para uma função usar um vector (ou uma matriz) passa-se uma referência à função A referência não é mais do que a posição de memória do primeiro elemento do vector (ou da matriz) Os restantes elementos são acedidos com base nessa posição de referência Exemplo: Um vector A em memória. Acedem-se aos vários elementos a partir da referência (a posição de memória 2) Memória

13 13 Programação MAC-1 Exemplo: Implementar um procedimento que mostre no ecrã os elementos de um vector (para simplificar, vamos assumir que são inteiros entre 0 e 9). // Pseudo-código void mostra_vec(int[] v, int length) { for (int i=0; i!=length; ++i) { v[i] output; } v é a referência para o vector a mostrar length é o número de elementos do vector

14 14 Programação MAC-1 vector (ref.) length End. Ret. i SP Organização da pilha em mostra_vec # mostra_vec(int[] v, int length) mostra_vec: loco 0 push # int i=0 ciclo:lodl 0 subl 2 jzer fim # i==length? lodl 3 addl 0 pshi # v[i] na pilha pop addd char0 stod 4094 loco ' ' stod 4094 # mostra no ecran loco 1 addl 0 stol 0 # i=i+1 jump ciclo fim:loco 10 # 10 é o código ascii stod 4094 # fim de linha insp 1 retn jump main vec1: length:5 char0:'0' main:loco vec1 push lodd length push call mostra_vec insp 2 halt

15 15 Matrizes (arrays) Uma matriz é uma abstracção própria das linguagens de programação de alto nível Uma estrutura regular de dados, com n dimensões, cujos elementos são acedidos através de índices (tantos índices quanto as dimensões) Em geral, para um processador não existe o conceito de matriz com n dimensões Para o CPU, uma matriz não é mais do que um conjunto de vectores em memória A razão para tal é o facto da memória só ter uma dimensão

16 16 Matrizes (arrays) Exemplo: Qual será a posição de memória correspondente a B[1][2]? Considere a matriz B, bidimensional


Carregar ppt "1 Aula 5 – Sumário Revisão da aula anterior Funções e procedimentos Endereçamento indirecto Instruções pshi e popi Acesso a vectores e matrizes Passagem."

Apresentações semelhantes


Anúncios Google