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
Lesson 1 Introduction to Transformation In this lab you will perform a procedure known as genetic transformation. Rememberthat a gene is a piece of DNA which provides the instructions for making (codes for) a protein. This protein gives an organism a particular trait. Genetic transformation literallymeans “change caused by genes,” and involves the insertion of a gene into an organismin ord