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

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

Aula 5 – Sumário Revisão da aula anterior Endereçamento indirecto

Apresentações semelhantes


Apresentação em tema: "Aula 5 – Sumário Revisão da aula anterior Endereçamento indirecto"— Transcrição da apresentação:

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

2 Revisão – funções e procedimentos
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 Organização da pilha em ‘power2’
n_ex: # exemplo power2: lodd n_ex push call power2 insp 1 halt # power2(int n) power2: loco # 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 # p=p+p (p=2*p) loco 1 addl 0 stol # i=i+1 jump ciclo ret_p: lodl # AC=p (valor a devolver) insp # descartar as locais retn Organização da pilha em ‘power2’ SP i p End. Ret. n

5 Endereçamento indirecto
Processador MAC-1 Endereçamento indirecto

6 Assembly MAC-1 Endereçamento indirecto no MAC-1
Acesso aos elementos de vectores / matrizes Mnemónica Descrição Significado 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 Assembly MAC-1: PSHI PSHI

8 Assembly MAC-1: POPI POPI

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 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 Programação MAC-1 jump main
m: # valores guardados no vector m n_elem: # 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 i soma SP i soma SP m[i]

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, 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 Programação MAC-1 jump main vec1: 6 4 3 5 7 length: 5 char0: '0'
main: loco vec1 push lodd length 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 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’ SP i 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]?


Carregar ppt "Aula 5 – Sumário Revisão da aula anterior Endereçamento indirecto"

Apresentações semelhantes


Anúncios Google