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

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

Academia ISCTE – Arquitectura de Computadores Aula 4 – Sumário Linguagem assembly do MAC-1 A pilha Instruções para manipulação da pilha Funções e procedimentos.

Apresentações semelhantes


Apresentação em tema: "Academia ISCTE – Arquitectura de Computadores Aula 4 – Sumário Linguagem assembly do MAC-1 A pilha Instruções para manipulação da pilha Funções e procedimentos."— Transcrição da apresentação:

1 Academia ISCTE – Arquitectura de Computadores Aula 4 – Sumário Linguagem assembly do MAC-1 A pilha Instruções para manipulação da pilha Funções e procedimentos Invocação de funções e procedimentos Variáveis locais e argumentos Retorno e devolução de valores Exemplos

2 Processador MAC-1 Programação em linguagem assembly: A pilha Funções e procedimentos

3 Academia ISCTE – Arquitectura de Computadores A pilha Durante a execução de um programa são invocadas funções e procedimentos (ou métodos) Cada função ou procedimento pode ter: Variáveis locais Variáveis que só são válidas dentro do procedimento Argumentos Valores ou referências passados ao procedimento Quando um procedimento retorna, o CPU necessita de saber qual o ponto do programa para onde se volta Todos estes dados são guardados num espaço da memória designado por pilha (ou stack)

4 Academia ISCTE – Arquitectura de Computadores A pilha Estrutura de dados muito simples Ocupa posições de memória consecutivas Cresce no sentido decrescente dos endereços Inserem-se e retiram-se elementos a partir do seu topo Utiliza-se para guardar: Variáveis locais e argumentos Pontos de retorno dos procedimentos Outros dados de natureza temporária O CPU guarda a posição do topo da pilha no registo Stack Pointer (SP) Memória

5 Academia ISCTE – Arquitectura de Computadores Assembly MAC-1 Invocação e retorno de procedimentos Instrução call – invocar Instrução retn – retornar MnemónicaDescriçãoSignificado call xSP SP – 1; M[SP] PC; PC xCall function or procedure retnPC M[SP]; SP SP + 1Return x é um endereço entre 0 e 4095, ou uma label que represente esse endereço. Corresponde à posição do programa onde começa a rotina.

6 Academia ISCTE – Arquitectura de Computadores Funções e procedimentos Mecanismo de retorno Quando se invoca um procedimento (call), o valor de Program Counter (incrementado) é copiado para pilha. Esse valor é o endereço de retorno – ponto para onde o programa volta após o procedimento retornar Para a rotina retornar, o endereço de retorno é transferido da pilha para PC (retn). Devolução de valores Quando se pretende devolver um valor, coloca-se esse valor no Acumulador (AC), antes da função retornar

7 Academia ISCTE – Arquitectura de Computadores Funções e procedimentos Do lado da invocação: Colocar os argumentos na pilha Invocar a função ou procedimento usando call Retirar os argumentos da pilha Dentro do procedimento ou função: Criar as variáveis locais, reservando espaço na pilha Executar o código do procedimento Destruir as variáveis locais, descartando-as da pilha Deixar em AC o valor a devolver Retornar, usando retn

8 Academia ISCTE – Arquitectura de Computadores Assembly MAC-1 Manipulação básica da pilha Colocar e retirar os argumentos da pilha Criar e descartar as variáveis locais (ou outros dados de carácter local ou temporário) MnemónicaDescriçãoSignificado pushSP SP – 1; M[SP] ACPush onto stack popAC M[SP]; SP SP + 1Pop from stack desp nSP SP – nDecrement SP insp nSP SP + nIncrement SP n é um valor entre 0 e 255, e especifica o número de posições que se querem acrescentar ou retirar à pilha.

9 Academia ISCTE – Arquitectura de Computadores Assembly MAC-1 Endereçamento local Acesso a dados guardados na pilha, em particular para as variáveis locais e argumentos dos procedimentos MnemónicaDescriçãoSignificado lodl nAC M[SP + n]Load local stol n M[SP + n] ACStore local addl nAC AC + M[SP + n]Add local subl nAC AC – M[SP + n]Subtract local n designa a posição relativa a SP. Será portanto a n-ésima posição da pilha a contar do topo.

10 Academia ISCTE – Arquitectura de Computadores Assembly MAC-1 Exemplo: uma função que calcula a soma de dois números public class Exemplo { public static int s = 0; // s – variável global public static int soma(int x, int y) { return x + y; } public static void main(String[] args) { s = soma(10, 15); }

11 Academia ISCTE – Arquitectura de Computadores Assembly MAC-1 Código MAC-1 jump main s:0 main:loco 10 # colocar os argumentos no stack: push # passar o 10 (1º argumento) loco 15 push # passar o 15 (2º argumento) call soma # chamar a rotina insp 2 # descartar os argumentos stod s # guardar o valor em s halt soma:lodl 2 # carregar o arg. x (da pilha) addl 1 # somar a arg. y (da pilha) retn # retornar com o resultado em AC

12 Academia ISCTE – Arquitectura de Computadores Assembly MAC-1 Exemplo: evolução da pilha... SP (end. ret.) SP Argumentos a passar a soma. Colocados na pilha antes de se fazer call. Logo após o call início Logo após retn Depois de insp 2 jump main s:0 main:loco 10 push loco 15 push call soma insp 2 stod s halt soma:lodl 2 addl 1 retn

13 Academia ISCTE – Arquitectura de Computadores Programação MAC-1 Exemplo: soma dos n primeiros naturais Pretende-se implementar uma função que devolve a soma dos n primeiros números inteiros naturais. // Possível código da função (em Java) public static int soma_n( final int n ) { int soma = 0; for (int i=1; i<=n; i++) soma = soma + i; return soma; }

14 Academia ISCTE – Arquitectura de Computadores Programação MAC-1 jump main n: 10 # exemplo main: lodd n push call soma_n # soma_n(10) insp 1 halt # soma_n(int n) soma_n: loco 0 push # int soma=0 loco 1 push # int i=1 ciclo: lodl 3 subl 0 # n-i jneg ret # while n-i>=0 lodl 1 addl 0 stol 1 # soma=soma+i loco 1 addl 0 stol 0 # i=i+1 jump ciclo ret: lodl 1 # AC=soma insp 2 retn n end. ret. soma i SP Organização da pilha dentro de soma_n variáveis locais argumento

15 Academia ISCTE – Arquitectura de Computadores Programação MAC-1 Exemplo: divisão inteira Pretende-se implementar função que devolve o quociente da divisão inteira entre dois números inteiros positivos D e d. D é o dividendo d é o divisor q é o quociente Nota: Esta função pode ser útil, pois na linguagem assembly do processador MAC-1 não existe nenhuma instrução para dividir…

16 Academia ISCTE – Arquitectura de Computadores Programação MAC-1 Possível solução: utilizar o método das subtracções sucessivas: // Possível código da função (em Java) public static int div( int D, final int d ) { int q = 0; while (D >= d) { q++; D = D - d; } return q; }

17 Academia ISCTE – Arquitectura de Computadores Programação MAC-1 main: loco 11 push loco 5 push call div # div(11,5) insp 2 halt # div(int D, int d) div: loco 0 push # int q=0 ciclo: lodl 3 subl 2 jneg ret # while D>=d loco 1 addl 0 stol 0 # q++ lodl 3 subl 2 stol 3 # D=D-d jump ciclo ret: lodl 0 # AC=q insp 1 retn D d end. ret. q SP Organização da pilha dentro de div argumentos variável local


Carregar ppt "Academia ISCTE – Arquitectura de Computadores Aula 4 – Sumário Linguagem assembly do MAC-1 A pilha Instruções para manipulação da pilha Funções e procedimentos."

Apresentações semelhantes


Anúncios Google