1 / 16

Aula 5 – Sumário

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. Processador MAC-1. Revisão – funções e procedimentos. Revisão – funções e procedimentos.

taran
Download Presentation

Aula 5 – 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 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. Processador MAC-1 Revisão – funções e procedimentos

  3. Revisão – funções e procedimentos Exemplo: Potência natural de 2 Implementar uma função que calcula 2n. 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. 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 jzerret_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 Organização da pilha em ‘power2’ i SP p End. Ret. n

  5. Processador MAC-1 Endereçamento indirecto

  6. Assembly MAC-1 • Endereçamento indirecto no MAC-1 • Acesso aos elementos de vectores / matrizes 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. PSHI Assembly MAC-1: PSHI

  8. POPI Assembly MAC-1: POPI

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

  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}; voidmain() { inti=0, soma = 0; while( i!=5 ) { soma = soma + m[i]; i = i + 1; } }

  11. soma SP i m[i] SP soma i Programação MAC-1 jump main m:1 2 5 7 2 # 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 jzerfim # 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

  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 Memória 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)

  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,intlength) { 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. Programação MAC-1 jump main vec1: 6 4 3 5 7 length: 5 char0: '0' main: loco vec1 push lodd length push call mostra_vec insp 2 halt # 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 Organização da pilha em ‘mostra_vec’ i SP End. Ret. length vector (ref.)

  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. Matrizes (arrays) Exemplo: Considere a matriz B, bidimensional Qual será a posição de memória correspondente a B[1][2]?

More Related