Microsoft powerpoint - ac2_slides_aula04_mac1_procedimentos.ppt
Linguagem assembly do MAC-1:Funções e procedimentos
Durante a execução de um programa são invocadas
funções e procedimentos (ou métodos)
Ocupa posições de memória consecutivas
Variáveis locais
Inserem-se e retiram-se elementos a partir
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)
pilha no registo Stack Pointer (SP) Invocação e retorno de procedimentos
Quando se invoca um procedimento (call), o valor de
Program Counter (PC) é copiado para pilha.
Esse valor é o endereço de retorno – ponto para Mnemónica Descrição Significado
onde o programa volta após o procedimento retornar
SP ← SP – 1; M[SP] ← PC; PC ← x Call function or procedure
Para a rotina retornar, o endereço de retorno é
transferido da pilha para PC (retn). 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.
Quando se pretende devolver um valor, coloca-se esse valor no Acumulador (AC), antes da função retornar
Manipulação básica da pilha
Invocar a função ou procedimento usando call
Criar e descartar as variáveis locais (ou outros dados
Mnemónica Descrição Significado
Criar as variáveis locais, reservando espaço na pilha
“Destruir” as variáveis locais, descartando-as da pilha
n é um valor entre 0 e 255, e especifica o número de posições que
se querem acrescentar ou retirar à pilha. Endereçamento local Exemplo:
Acesso a dados guardados na pilha, com destaque
uma função que calcula a soma de dois números
para as variáveis locais e argumentos dos
public class Exemplo public static int s = 0; // s – variável global Mnemónica Descrição Significado public static int soma( final int x, final int y) { return x + y; public static void main(String[] args) { s = soma(10, 15); n designa a posição relativa a SP.
Será portanto a n-ésima posição da pilha a contar do topo. Exemplo: evolução da pilha jump main jump main main: loco 10 main: loco 10 # colocar os argumentos no stack: # passar o 10 (1º argumento) # passar o 15 (2º argumento) call soma call soma # chamar a rotina # descartar os argumentos # guardar o valor em s 7 (end. ret.) soma: lodl 2 soma: lodl 2 # carregar x (da pilha) # somar a y (da pilha) # retornar (em AC está x+y) jump main # soma_n(int n) Exemplo: soma dos n primeiros naturais # exemplo soma_n: loco 0
Pretende-se implementar uma função que devolve a
push # int soma=0
soma dos n primeiros números inteiros naturais. call soma_n # soma_n(10) insp 1 subl 0 # n-i // Possível código da função (em Java) # while n-i>=0 lodl 1 addl 0 public static int soma_n( final int n ) stol 1 # soma=soma+i int soma = 0; addl 0 stol 0 # i=i+1 for (int i=1; i<=n; i++)
Organização da pilha dentro de ‘soma_n’
jump ciclo soma = soma + i; lodl 1 # AC=soma return soma; Exemplo: divisão inteira
Possível solução:utilizar o método das subtracções sucessivas:
Pretende-se implementar função que devolve o quociente da divisão inteira entre dois números inteiros
// Possível código da função (em Java) public static int div( int D, final int d ) while (D >= d) { q++; D = D - d;
Nota: Esta função pode ser útil, pois na linguagem assembly do
processador MAC-1 não existe nenhuma instrução para dividir…
return q; jump main # div(int D, int d) loco 5 push ciclo: lodl 3 # div(11,5) # while D>=d loco 1 addl 0 stol 0 # q++ lodl 3 subl 2 stol 3 # D=D-d
Organização da pilha dentro de ‘div’
jump ciclo lodl 0 # AC=q insp 1 retn
Public Economics and Economic History (A78606) – Year 2013 Module III: The development of modern market economy, an historical perspective Lecturer: Dr. Daniele Pozzi, The module will present a long-run perspective on the development of modern capitalism and the role of State in it. Through the presentation of historical cases, the module will offer to the students a perspective whic
Préfecture de La Réunion Direction régionale des affaires sanitaires et sociales OBSERVATOIRE REGIONAL DE LA SANTE DE LA REUNION - MAI 2008 Bilan 2007 mitigé : des efforts importants en termes de prévention, de soins et de prise en charge … mais baisse très légère des ventes de cigarettes • Les trois causes de décès les plus directement liées au tabagisme (cancers du poumon, br