Aula 4 – Sumário Linguagem assembly do MAC-1 A pilha

Slides:



Advertisements
Apresentações semelhantes
Programação II Licenciatura de Ciências da Computação Padoca Calado
Advertisements

Python: Funções Claudio Esperança.
Programação em Java Prof. Maurício Braga
Recursividade Inhaúma Neves Ferraz
SISTEMAS OPERACIONAIS (SO) Aula 5 Luciana A. F. Martimiano 2002
1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza O programa é uma sequência de linhas numeradas Cada linha.
Estruturas de Repetição
Métodos, Parâmetros, Argumentos e Contratos
Manuseamento de strings
Capítulo 1 Introdução.
Arquitetura e organização de computadores
Aula 5 – Sumário Revisão da aula anterior Endereçamento indirecto
O Conjunto de Instruções
Assembly MAC-1 Implementação de ciclos Ciclo ‘while’ // Em Java : ...
1 O Conjunto de Instruções ISA – Instruction Set Architecture.
Programação MAC-1 Exemplo: copiar vector
Software Básico Silvio Fernandes
Alocação Dinâmida de Memória
Recursividade Inhaúma Neves Ferraz
Recursividade Conceitos e Aplicações.
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
O MICROPROCESSADOR INTEL 8080
1 Professor Rogério B. de Andrade - Aula 001- Dez/2008 Técnicas e Linguagem de Programação.
Autor: Fernando de Mesentier Silva
Modularização: funções e procedimentos
Programação em Assembly Procedimentos e funções
Revisão da Linguagem C.
Algoritmos e Programação
JAVA: Conceitos Iniciais
Programação Orientada a Objetos com Java
Aula prática 8 Ponteiros Monitoria de Introdução à Programação
Unidade Central de Processamento
Unidade Central de Processamento
Unidade Central de Processamento
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Funcionamento básico de um computador
Linguagem de Montagem.
AJProença, Sistemas de Computação, UMinho, 2013/141 Análise do código de gestão de uma função –invocação e regresso instrução de salto, mas com salvaguarda.
PROGRAMAÇÃO ESTRUTURADA (MODULARIZAÇÃO/SUBPROGRAMAÇÃO)
Sistemas Operacionais
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Arquitetura de computadores
Agenda - Aula 2 Introdução (Computador Digital) Processadores
Ambiente de Execução - Rotinas
Orientação a Objetos e Java Graduação em Ciência da Computação
Estruturas de Dados PROFESSOR DIÓGENES FURLAN. Estruturas de Dados (ED) Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar.
Universidade do Vale do Rio dos Sinos - São Leopoldo -
Capítulo VIII Ambientes de Execução
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
Introdução à Linguagem C
Aula Prática 4 Monitoria IP/CC (~if669).
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
M ÉTODOS DA C LASSE S TRING. FUNÇÕES COM STRING Uma string é um tipo texto que corresponde à união de um conjunto de caracteres. Em Java, as strings são.
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
A Linguagem de Máquina – Funções e recursividade Prof. André Luis M. Silva orgearq wordpress.com.
8088 Assembly Software Básico Mitsuo Takaki.
Arquitetura de Computadores 2009 Infra-estrutura Hardware
8 - 1 Organização Básica de Computadores e Linguagem de Montagem Ricardo Pannain ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM A pilha e subrotinas.
Procedimentos Registro de Ativação e Variáveis Locais 11 1.
Recursividade Profs. De Prog2 e Lab2.
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Programação orientada a objetos Com Visual Studio.
1 Aula 6 – Sumário  Revisão da aula anterior  Endereçamento indirecto  Recursividade  Conceito  Exemplos.
Aula 4 – Sumário Linguagem assembly do MAC-1: Funções e procedimentos
Processador MAC-1 Arquitectura.
Existem 8 registos principais de 32 bits no processador (existem mais como %EIP): %EAX %EBX %ECX %EDX %ESI %EDI %EBP %ESP Os registos são armazenados em.
O Stack e Subrotinas Permitem reusar o código Escreva e depure o código uma vez, use-o quantas vezes for preciso Uma Subrotina deve ser chamada Uma Subrotina.
Linguagem de Programação
Módulo I Capítulo 7: Funções e Procedimentos William Ivanski Curso de Programação C#
EA869 Subrotinas Faculdade de Engenharia Elétrica e de Computação (FEEC) Universidade Estadual de Campinas (UNICAMP) Prof. Levy Boccato 1.
Transcrição da apresentação:

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

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

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)

A pilha Estrutura de dados muito simples Utiliza-se para guardar: 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

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.

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

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

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.

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.

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

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

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

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

Organização da pilha dentro de ‘soma_n’ 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 stol 0 # i=i+1 jump ciclo ret: lodl 1 # AC=soma insp 2 retn Organização da pilha dentro de ‘soma_n’ SP i variáveis locais soma end. ret. n argumento

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…

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;

Organização da pilha dentro de ‘div’ Programação MAC-1 main: loco 11 push loco 5 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 stol 3 # D=D-d jump ciclo ret: lodl 0 # AC=q insp 1 retn Organização da pilha dentro de ‘div’ SP q variável local end. ret. d argumentos D