academia iscte – arquitectura de computadores aula 4 – sumário linguagem assembly do mac-1 a...

17
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

Upload: internet

Post on 17-Apr-2015

104 views

Category:

Documents


0 download

TRANSCRIPT

Page 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

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

Page 2: 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

Processador MAC-1Programação em linguagem assembly:

A pilha Funções e procedimentos

Page 3: 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

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)

Page 4: 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

Academia ISCTE – Arquitectura de Computadores

0

1

2

...

Pro

gram

aP

ilha

I/O

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

Page 5: 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

Academia ISCTE – Arquitectura de Computadores

Assembly MAC-1

Invocação e retorno de procedimentos Instrução call – invocar Instrução retn – retornar

Mnemónica Descrição Significado

call x SP ← SP – 1; M[SP] ← PC; PC ← x Call function or procedure

retn PC ← M[SP]; SP ← SP + 1 Return

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.

Page 6: 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

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

Page 7: 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

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

Page 8: 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

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ónica Descrição Significado

push SP ← SP – 1; M[SP] ← AC Push onto stack

pop AC ← M[SP]; SP ← SP + 1 Pop from stack

desp n SP ← SP – n Decrement SP

insp n SP ← SP + n Increment SP

n é um valor entre 0 e 255, e especifica o número de posições que se querem acrescentar ou retirar à pilha.

Page 9: 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

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ónica Descrição Significado

lodl n AC ← M[SP + n] Load local

stol n M[SP + n] ← AC Store local

addl n AC ← AC + M[SP + n] Add local

subl n AC ← 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.

Page 10: 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

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);}

}

Page 11: 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

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 15push # passar o 15 (2º argumento)call soma # chamar a rotina insp 2 # descartar os argumentosstod s # guardar o valor em shalt

soma: lodl 2 # carregar o arg. x (da pilha)addl 1 # somar a arg. y (da pilha)retn # retornar com o resultado em AC

Page 12: 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

Academia ISCTE – Arquitectura de Computadores

Assembly MAC-1

Exemplo: evolução da pilha

...SP

10

15

7 (end. ret.)

SP

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 mains: 0main: loco 10

pushloco 15pushcall somainsp 2stod shalt

soma: lodl 2addl 1retn

Page 13: 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

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;}

Page 14: 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

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

iSP

Organização da pilha dentro de ‘soma_n’

variáveis locais

argumento

Page 15: 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

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…

Page 16: 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

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;}

Page 17: 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

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.

qSP

Organização da pilha dentro de ‘div’

argumentos

variável local