file.j. a Baseado no Jasmin User Guide. (http://jasmin.sourceforge.net/)



Documentos relacionados
JVM Máquina Virtual Java

Compiladores Tópicos de JVM

2. O gerador de código estende DepthFirstAdapter implementando a interpretação que gerará código Jasmin a partir de Smallpascal.

Arquitectura de Computadores II. Máquinas Virtuais

Como construir um compilador utilizando ferramentas Java

Sintaxe Básica de Java Parte 1

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Java Laboratório Aula 1. Divisões da Plataforma. Introdução a Plataforma Java. Visão geral da arquitetura da

Noções sobre Objetos e Classes

BSI UFRPE Prof. Gustavo Callou

2 Orientação a objetos na prática

CURSO DE PROGRAMAÇÃO EM JAVA

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Introdução a POO. Introdução a Linguagem C++ e POO

Desenvolvimento OO com Java 3 Estruturas de Controle e Programação Básica

Algoritmia e Programação APROG. Linguagem JAVA. Básico. Nelson Freire (ISEP DEI-APROG 2012/13) 1/31

ESTRUTURA BÁSICA DE UM PROGRAMA JAVA

Primeiro Curso de Programação em C 3 a Edição

Criar a classe Aula.java com o seguinte código: Compilar e Executar

JSP - ORIENTADO A OBJETOS

MC102 Algoritmos e programação de computadores Aula 3: Variáveis

Programação online em Java

Algoritmos e Programação II. Sobrecarga

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento Eclipse Introdução à Linguagem de Programação JAVA

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento NetBeans Introdução à Linguagem de Programação JAVA

Java. Marcio de Carvalho Victorino

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Fundamentos de Programação II. Introdução à linguagem de programação C++

AULA Uma linguagem de programação orientada a objetos

UNIVERSIDADE FEDERAL DO PARANÁ

Java - Introdução. Professor: Vilson Heck Junior. vilson.junior@ifsc.edu.br

Aula 1. // exemplo1.cpp /* Incluímos a biblioteca C++ padrão de entrada e saída */ #include <iostream>

INF 1005 Programação I

Universidade Federal de Uberlândia

Capítulo 2: Introdução à Linguagem C

Módulo 06 Desenho de Classes

Implementando uma Classe e Criando Objetos a partir dela

A Linguagem Java. Alberto Costa Neto DComp - UFS

Conversão de Tipos e Arrays

Processamento da Informação Teoria. Algoritmos e Tipos de dados

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: Prof. Dr. Raimundo Moura

3 Classes e instanciação de objectos (em Java)

public void setdata(data d) { data = d;

BC0501 Linguagens de Programação

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

Primeiro programa em Java (compilação e execução)

Organização de programas em Java. Vanessa Braganholo

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

Lição 9 Trabalhando com bibliotecas de classes

INTRODUÇÃO AO C++ SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Linguagens de. Aula 02. Profa Cristiane Koehler

Programação Orientada a Objeto

5 Apresentando a linguagem C

Aula 04 Operadores e Entrada de Dados. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Java TM e o Modelo de Objetos

Programação por Objectos. Java

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Fundamentos de Programação. Turma CI-240-EST. Josiney de Souza.

Projeto de Software Orientado a Objeto

Vetores. Professor Dr Francisco Isidro Massettto

4-1. Parte2: A Arquitetura do Conjunto de Instruções

Técnicas de Programação II

Sobre o Professor Dr. Sylvio Barbon Junior

Análise de Programação

Geração de código. Ivan Ricarte INTRODUÇÃO À COMPILAÇÃO

public Agenda() { compromissos = null; } public int getnumerodecompromissos() { if (compromissos==null) return 0; else return compromissos.

Linguagens de Programação. Linguagens de Script. Carlos Bazilio

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões

FBV - Linguagem de Programação II. Um pouco sobre Java

1. Macroarquitetura 2. Emulador do MIC-1 3. O Nível ISA: IJVM. Bibliografia. Teresina Pilhas 3.2. Conjunto de Instruções IJVM

Construção de novas Classes em Java. Classes Atributos Métodos Herança...

Programação de Computadores - I. Profª Beatriz Profº Israel

Capítulo 2. Fundamentos de Java

Slides_Java_1 !"$ % & $ ' ' Output: Run java. Compile javac. Name of program. Must be the same as name of file. Java source code.

Orientação a Objetos

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Prof. Esp. Adriano Carvalho

Introdução a Java. Hélder Nunes

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

Slide 1 Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Templates e Pilhas. 1. Introdução

Arquitetura e Organização de Computadores

Programação por Objectos. Java

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

Conceitos de Linguagens de Programação

Linguagens de Programação Aula 10

Introdução à Programação

Microarquitetura IJVM. Datapath mic-1. Função dos Registradores. mic-1

Introdução a Computação

Java Como Programar, 8/E

Transcrição:

Jasmin a 1. Jasmin é um assembler para Java que recebe um descrição textual (ASCII) de classes Java e as converte para arquivos (binários) no formato class file. 2. Foi desenhado para ser um assembler simples com uma relação quase 1-para-1 com os componentes de um class file. Não faz um série de verificações como: (i) verificação da existência de classes sendo referenciadas, (ii) verificação da correta formação dos descritores, (iii) inlining de expressões matemáticas, (iv) substituição de variáveis, e (v) suporte a macros. 3. Foi desenhado para que se possa testar rapidamente quase todas as features da máquina virtual. 4. Pode ser executado com o comando: java -jar jasmin.jar file.j. a Baseado no Jasmin User Guide. (http://jasmin.sourceforge.net/) 1

5. Os comandos de Jasmin podem ser: (i) diretivas, (ii) instruções, ou (iii) rótulos. 6. Diretivas: Comandos de meta-nível que começam com.. Podem ser:.catch.class.end.field.implements.interface.limit.line.method.source.super.throws.var. 7. Exemplos de diretivas:.limit stack 10.method public mymethod()v.class Foo 8. Instruções: Comandos que manipulam a pilha de operandos. Exemplos: ldc "Hello World" iinc 1-1 bipush 10 2

9. Rótulos: Marcam as instruções para execução de desvios. Não podem começar com números nem conter os caracteres =, :,., ", -. Só podem ser utilizados dentro de métodos e são locais a um método. Exemplo: Label: bipush 10 10. Comentários: Começam com ;, seguida de espaço ou tabulação e termina com quebra de linha. Exemplo: ; Isso é um comentário. abc;def ; def não é um comentário. Ljava/lang/String; ; Ljava/lang/String; é um ; token só. foo ; baz ding ; Token foo seguido de um ; comentário. 11. Números e strings: somente decimais e inteiros são reconhecidos. 3

Ponto flutanete em notação científica não são. Permitido: 1, 123,.25, 0.03, 0xA. Não permitido: 1e-10, a, u123. Somente os caracteres de escape " n" and " t" são reconhecidos. 12. Nomes de classe: nome completo de uma classe. Exemplo java/lang/string. 13. Descritores de tipo: seguem a notação de class files. (Ver slides sobre JVM.) 14. Nomes de método são dados por uma única string resultante da concatenação de três partes: nome da classe, nome do método e descritor do método segundo descritores de mátodo em class files. foo/baz/myclass/mymethod(ljava/lang/string;)v --------------- --------------------- -------- class method descriptor Uma chamada ao método 4

... class mypackage.myclass int foo(object a, int b[]) pode ser feita da seguinte maneira: invokevirtual mypackage/myclass/foo(ljava/lang/object;[i)i 15. Campos são especificados em Jasmin usando dois tokens, um informando o nome e classe do campo e o outro dando o descritor. Por exemplo: getstatic mypackage/myclass/my font Ljava/lang/Font; retorna o valor do campo chamado "my font" na classe mypackage.myclass. O tipo do campo é "Ljava/lang/Font;" (i.e. um objeto Font). 5

16. Um arquivo Jasmin começa com diretivas. Exemplo:.source foo.j ; Arquivo fonte: info para debug.class public foo ; Nome completo da classe c/ modif..super java/lang/object ; Nome completo da superclasse.implements Edible ; Nome da interface que implementa.implements java/lang/throwable ; 17. Deifinições de campo..field <access-spec> <field-name> <descriptor> [ = <value> ] A declaração public int foo; vira.field public foo I. E a declaração public static final float PI = 3.14; vira.field public static final PI F = 3.14. 18. Declarações de método seguem a forma:.method <access-spec> <method-spec> <statements>.end method 6

A string <method-spec> tem o nome e o descritor de tipo do método. Exemplo de mátodo mais básico:.method foo() V return.end method 19. Diretivas de métodos: A diretiva.limit locals <integer> define o número de variáveis locais que um método necessita. 20. A diretiva.var <var-number> is <name> <descriptor> from <label1> to <label2> é usada para definir o nome, descritor de tipo e escopo de uma variável local. 7

Exemplo de uso da diretiva.var:.method foo()v.limit locals 1 ; declara a variável 0 como "int Count;" ; cujo escopo é o código entre Label1 e Label2 ;.var 0 is Count I from Label1 to Label2 Label1: bipush 10 istore_0 Label2: return.end method 21. Exemplo: Hello World. public class HelloWorld { static public void main(string args[]) { System.out.println( Hello World! ) ; } } 8

.class public HelloWorld.super java/lang/object ; ; standard initializer.method public <init>()v aload_0 invokenonvirtual java/lang/object/<init>()v return.end method.method public static main([ljava/lang/string;)v.limit stack 2 ; push System.out onto the stack getstatic java/lang/system/out Ljava/io/PrintStream; ; push a string onto the stack ldc "Hello World!" ; call the PrintStream.println() method. invokevirtual java/io/printstream/println(ljava/lang/string;)v ; done return.end method 9

Instruções Jasmin a 1. Já vimos os tipos de comandos da linguagem Jasmin assim como exemplos de diretivas (i.e. permitem a definição de métodos), instruções (i.e. para manipulação da pilha de operandos) e rótulos (i.e. em instruções jump ). Vamos ver agora os tipos de instruções em Jasmin através de exemplos. 2. Instruções que fazem uso de variáveis locais: São parametrizadas pelo número que representa a variável local. São elas: ret, aload, astore, dload, dstore, fload, fstore, iload, istore, lload, lstore. Exemplos: aload 1 ; empilha o valor na variável local 1 ret 2 ; retorna o fluxo de controle para o ; endereço armazenado na variável local 2 a Baseado no manual Jasmin Instructions, por Jonathan Meyer. (http://jasmin. sourceforge.net/instructions.html) 10

3. Instruções para manipulação de inteiros: bipush 100 ; empilha 100 iinc 3-10 ; subtrai 10 da variável local 3 4. Instruções de desvio: Diversos tipos de desvio condicional e incondicional. Label1: goto Label1 ; jump para o código no Label1 ; (loop infinito!) 5. Operações sobre classes e objetos: São as seguintes: anewarray, checkcast, instanceof, new. Exemplo: new java/lang/string ; cria uma instância de uma string 6. Instruções para invocar métodos: invokenonvirtual, invokestatic, invokevirtual e invokeinterface. Exemplo: 11

; chama java.io.printstream.println(string); invokevirtual java/io/printstream/println(ljava/lang/string;)v ; O segundo parâmetro de invokeinterface diz quantos ; parâmetros o método recebe. invokeinterface foo/baz/mymethod(i)v 1 7. Instruções para manipulação de atributos: getfield, getstatic, putfield, putstatic. Examplo: ; o atributo java.lang.system.out é um PrintStream getstatic java/lang/system/out Ljava/io/PrintStream; 8. Instruções para manipulação de vetores: newarray, multianewarray. Examplo: newarray float 12

; aloca uma matriz bidimensional de inteiros multianewarray [[[I 2 9. Instruções para manipular constantes: ldc, ldc w. Examplo: ldc "Hello World" ldc_w 3.141592654 ; empilha uma String ; empilha um double 10. Instruções para switch: lookupswitch e tableswitch. Examplo: ; Se o int na pilha é 3, jump para Label1. ; Se é 5, jump para Label2. ; Caso contrário, desvia para DefaultLabel. lookupswitch 3 : Label1 5 : Label2 default : DefaultLabel Label1: ; tinha 3 na pilha Label2: ; tinha 5 na pilha DefaultLabel: ; tinha outra coisa 13

11. Instruções que não requerem parâmetros: (Diversas.) Examplo: pop ; remove o item no topo da pilha iconst_1 ; empilha 1 swap ; troca os dois primeiros elementos da ; pilha de posição 14