Linguagem de Montagem do NeanderX

Documentos relacionados
NEANDERWIN. Algumas características do processador Neander são:

ção de Computadores I

NEANDERWIN - Resumo operacional

SimuS. Gabriel P. Silva. José Antonio Borges. Um Simulador Didático para o Ensino de Arquitetura de Computadores DCC-IM/UFRJ NCE/UFRJ

Neander - características

A Arquitetura: conjunto de instruções

ção de Computadores I

Esta pseudomáquina foi criada em homenagem ao homem de Neandertal, o antecessor do homo sapiens.

O Computador Neander Neander - Computador Hipotético Didático

Primeiro Trabalho de POO Emulador para o Processador Winter

Arquitetura: características gerais

Disciplina de. Organização de Computadores Digitais

AULA 03: FUNCIONAMENTO DE UM COMPUTADOR

Disciplina de Organização de Computadores I

Microprocessadores I ELE Aula 7 Conjunto de Instruções do Microprocessador 8085 Desvios

Computador Cleópatra

Disciplina de Organização de Computadores I

Prof. Adilson Gonzaga

9. Software de Sistema - Montadores (capítulo 9 do livro texto)

sumário 1 bases numéricas 1 2 sistemas de numeração em computação introdução representação de números... 3

Instruções. Maicon A. Sartin

Aula 14 Funcionamento de Processadores (Visão específica)

PARTE II - CONJUNTO DE INSTRUÇÕES ARQUITETURA DE COMPUTADORES ANTONIO RAMOS DE CARVALHO JÚNIOR

Computador Cleópatra

Informática I. Aula 9. Aula 9-17/05/2006 1

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA

Unidade de Controle. UC - Introdução

Programação de Computadores IV. Introdução a Linguagens de Programação Simone Martins SLIDES CEDIDOS POR BRUNO MARQUES 1

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA

Informática I. Aula Aula 18-29/10/2007 1

PROGRAMAÇÃO I. Introdução

Sistemas de Computação. Instruções de Linguagem de Máquina

4. Modelo de Programação do DLX Introdução

Compiladores. Introdução à Compiladores

Organização e Arquitetura de Computadores I

CONJUNTO DE INSTRUÇÕES

Informática I. Aula 9. Aula 9-27/09/2006 1

Porque usar um montador? Formato de uma linha de código fonte:

III.2 - Princípios de Arquitetura

Organização de Computadores

Linguagens de Programação Classificação

Instruções de Máquina

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA

Programação de Computadores:

FORMATO DO PROGRAMA FONTE

LISTA 02 CONJUNTO DE INSTRUÇÕES - GABARITO

CONJUNTO DE INSTRUÇÕES DE UM PROCESSADOR (UCP)

Infraestrutura de Hardware. Funcionamento de um Computador

Prof. Antonio Almeida de Barros Jr. Prof. Antonio Almeida de Barros Junior

Sistemas Operacionais

William Stallings Arquitetura e Organização de Computadores 8 a Edição

Procedimentos. Sistemas de Computação

Ambiente de desenvolvimento

Computadores podem ser úteis em problemas que envolvem: Grande número de dados. Grande número de cálculos. Complexidade. Precisão.

Introdução à Computação

Introdução à Computação

CONJUNTO DE INSTRUÇÕES DE UM PROCESSADOR (UCP)

Máquinas. Visão geral O que você precisa Fatores de sucesso O futuro. realizar algo, precisa que alguém m lhe indique o que fazer V.V.

SimuS Um Simulador Para o Ensino de Arquitetura de Computadores

ORGANIZAÇÃO DE COMPUTADORES

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang

Disciplina: Arquitetura de Computadores

Arquitetura de Computadores Conceitos Fundamentais. Graduação em Engenharia Elétrica - UFPR Prof. Carlos Marcelo Pedroso 2016

Utilização do montador Daedalus. O montador e os simuladores Formatos de instruções

Microcontrolador Assembly UTFPR / DAELN Microcontroladores 1 Prof. Gabriel Kovalhuk

Solução Lista de Exercícios Processadores

SSC510 Arquitetura de Computadores 1ª AULA

Conjunto de Instruções e Modelos de Arquiteturas

Arquitetura e Organização de Computadores

Prof. Leonardo Augusto Casillo

Histórico de desenvolvimento de computadores Prof. Luís Caldas Aula 02 Processador de uso geral

Arquitetura e Organização de Computadores

Arquitetura de Computadores. Ciclo de Busca e Execução

Introdução (Aula 2) Introdução Arquitetura de Hardware. Organização Estruturada de Computadores. Introdução Conceitos (2) Introdução Conceitos (1)

Introdução à Computação: Máquinas Multiníveis

2.4 Processadores Micro-instruções Desvios Desvios Condicionais Instruções e Programação em Assembler

Introdução. (Aula 2) Organização Estruturada de Computadores

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

Curso Profissional de Gestão e Programação de Sistemas Informáticos. Programação e Sistemas de Informação. Módulo 1. 1ª Parte Prof. Sandra Pais Soares

Introdução à Computação

Disciplina de Arquitetura de Computadores

Conjunto de Instruções (ISA) I

William Stallings Arquitetura e Organização de Computadores 8 a Edição

As 5 partes fundamentais. Linguagem de Programação Pinagem Características Elétricas Ambiente de Desenvolvimento Integrado - IDE

PCS-2529 Introdução aos Processadores. Prof. Dr. Paulo Sérgio Cugnasca

2º Estudo Dirigido CAP 3

Programação de Microprocessadores. Programação de Microprocessadores SEL-433 APLICAÇÕES DE MICROPROCESSADORES I

LAPRO I. Pontifícia Universidade Católica do Rio Grande do Sul Faculdade de Informática - FACIN. Prof. Dr. Rafael Garibotti

CAP. VII GERAÇÃO DE CÓDIGO

Organização e Arquitetura de Computadores I

Sistemas Operacionais

Sistemas Processadores e Periféricos Aula 2 - Revisão

UCP: Construindo um Caminho de Dados (Parte III)

Universidade Federal do Rio de Janeiro Bacharelado em Ciência da Computação. Arquitetura de Computadores I. Organização Básica do Computador

OFICINA DA PESQUISA PROGRAMAÇÃO APLICADA À CIÊNCIA DA COMPUTAÇÃO

MAC2166 Introdução à Computação Aula 1 Como Funciona um Computador

PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95

Conjunto de Instruções e Modelos de Arquiteturas

Conjunto de Instruções

Transcrição:

Universidade Estácio de Sá Curso de Informática Arquitetura de Computadores Linguagem de Montagem do NeanderX 11.5.2006

Geração Programa Executável

Linguagens de Programação As linguagens de programação em alto nível foram elaboradas para facilitar o trabalho de codificação do programador. A sua sintaxe procura ser o mais independente do tipo de computador em que a aplicação será executada e o mais próximo possível da linguagem humana. Vários tipos de linguagem foram propostos e, normalmente cada uma delas é mais adequada para um tipo específico de aplicação.

Linguagens de Programação Como exemplos de linguagem de alto nível podemos relacionar: C C++ Pascal Delphi Basic Java Cobol Fortran Algol Ada Prolog Visual Basic

Exemplo program Contar; // nome do programa var contador: integer; // declaração de variáveis begin // inicio do bloco writeln('contando ate 10...'); // escreve na tela for contador:=1 to 10 do // conta até 10 begin writeln('num: ', contador); // imprime até 10 end; end.

Compilação x Interpretação Há duas formas básicas de tradução do código de alto nível para a linguagem de máquina: a compilação e a tradução. Compilação o programa em linguagem de alto nível é traduzido através de diversos passos para um programa em linguagem de máquina. Toda vez que se deseja executar o programa, essa versão em linguagem de máquina é carregada na memória do computador e executada pelo processador.

Programa em Linguagem de Alto Nível C, C++, PASCAL, FORTRAN, COBOL, etc. Compilador Programa em Linguagem de Montagem Montador Segue Objeto: Programa em Linguagem de Máquina x86, MIPS, SPARC, etc.

Objeto: Rotinas da Biblioteca (em linguagem de máquina) Objeto: Programa em Linguagem de Máquina Ligador Carregador Programa Executável Memória

Compilação x Interpretação Interpretação o programa em linguagem é lido por um programa chamado de interpretador que traduz trechos de código diretamente para linguagem de máquina que é executado de imediato pelo processador. A cada vez que se deseja executar o programa, este processo tem que ser repetido.

C, C++, PASCAL, FORTRAN, COBOL, etc. Programa em Linguagem de Alto Nível Interpretador Programa em Linguagem de Máquina Memória

Compilação x Interpretação Há esquemas híbridos, com o JAVA, que compila o código em alto nível para uma linguagem de máquina VIRTUAL. Em cada tipo de computador, há um interpretador que traduz o código dessa máquina virtual para a linguagem de máquina do processador do hospedeiro. Toda vez que o programa vai ser executado, o interpretador precisa ser utilizado.

NeanderWin

Introdução O NEANDERX é uma arquitetura simplificada desenvolvida com fins didáticos, uma extensão da arquitetura Neander, definida no livro do Raul F. Weber (UFRGS), Fundamentos de Arquitetura de Computadores, Ed. Sagra Luzzatto. As instruções do NEANDERX são uma extensão das instruções do NEANDER e possuem uma linguagem de montagem associada a elas. Para verificar o funcionamento dessas instruções e compreender o funcionamento da arquitetura, existe um simulador chamado NeanderWin.

NeanderWin A máquina original foi estendida da seguinte maneira: Instrução para carga de dados imediatos no acumulador e outra para subtração; Instruções para operações de entrada e saída de dados para dois dispositivos mapeados em nosso simulador: um teclado e um visor; Modo de endereçamento indireto foi acrescentado em algumas instruções; Pode-se utilizar referências simbólicas às variáveis, constantes e endereços.

Descrição Conjunto de instruções com 15 instruções; Instruções com um ou dois bytes de largura; Largura de dados e endereços de 8 bits; Dados representados em complemento de 2; 1 acumulador (AC) de 8 bits guarda o resultado das operações; 1 apontador de instruções (PC) de 8 bits que guarda o endereço da próxima instrução; 1 registrador de estados com 2 códigos de condição: N negativo Z zero Possui recursos simplificados de entrada e saída.

Modos de Endereçamento Imediato O segundo byte da instrução é o operando. A única instrução que usa este modo de endereçamento é a LDI. Direto O segundo byte da instrução é o endereço de memória do operando. Indireto O segundo byte da instrução contém o endereço de memória onde está o endereço do operando (ou seja, o segundo byte da instrução é o endereço do ponteiro para o operando). Para indicar que um operando é indireto, deve-se precedê-lo pela letra "@" (arrôba) Nas instruções de desvio, o endereço armazenado no segundo byte instrução corresponde à posição de memória onde está a próxima instrução a ser executada.

Modos de Endereçamento Segundo Modo Byte da Instrução Memória Memória Imediato imed Direto ender Indireto ender

Instruções As instruções podem ter um ou dois bytes. Nas instruções com apenas um byte, os 4 bits mais significativos contém o código da operação. Nas instruções com dois bytes, que no Neander são aquelas que fazem referência a um operando na memória, o segundo byte contém o endereço de memória deste operando. Os 4 bits de mais baixa ordem do primeiro byte são reservados para futuras expansões. Existem também um código que não têm instrução associada.

Formato da Instrução

Instruções 'NOP - código 0: O comando NOP é usado apenas para gastar tempo. 'STA ender' - código 1: O comando STA guarda o acumulador na posição de memória indicada pelo operando ender. 'LDA ender' - código 2: O comando LDA atribui ao acumulador o conteúdo da posição de memória indicada pelo operando ender. 'ADD ender' - código 3: O comando ADD soma ao acumulador o conteúdo de uma posição de memória indicada pelo operando ender. 'OR ender' - código 4: O comando OR realiza um "ou" lógico entre o acumulador e o conteúdo de uma posição de memória indicada pelo operando ender. 'AND ender' - código 5: O comando AND realiza um "e" lógico entre o acumulador e o conteúdo de uma posição de memória indicada pelo operando ender.

Instruções 'NOT' - código 6: O comando NOT inverte os bits do acumulador. 'SUB ender' - código 7: O comando SUB subtrai do acumulador o conteúdo de uma posição de memória indicada pelo operando ender. 'JMP ender' - código 8: O comando JMP (jump) desvia a execução do programa para o endereço indicado pelo operando ender. 'JN ender' - código 9: O comando JN (jump if negative) desvia a execução do programa para o endereço indicado pelo operando ender, apenas quando a última operação realizada produziu um valor com o bit 7 ligado (negativo). 'JZ ender' - código 10: O comando JZ (jump if zero) desvia a execução do programa para o endereço indicado pelo operando ender, apenas quando a última operação realizada produziu um valor zero.

Instruções 'JNZ ender' - código 11: O comando JNZ (jump if not zero) desvia a execução do programa para o endereço indicado pelo operando ender, apenas quando a última operação realizada produziu um valor diferente de zero. 'IN ender' - código 12: O comando IN (input) traz para o acumulador o valor lido num dispositivo externo indicado pelo operando ender. No Neanderwin os dispositivos são: chaves (endereço 0) e o status de "dado disponível" das chaves (endereço 1). 'OUT ender' - código 13: O comando OUT (output) descarrega o conteúdo do acumulador em um dispositivo externo indicado pelo operando ender. No Neanderwin o único dispositivo disponível é um visor (endereço 0).

Instruções 'LDI imed' - código 14: O comando LDI (load immediate) carrega no acumulador o valor dado pelo operando imed. 'HLT' - código 15: O comando HLT (halt) para a máquina. Comentários e Rótulos: Os comentários são começados por ponto e vírgula, e podem também ocorrer no final das linhas de instruções. Um rótulo é um nome dado à próxima posição de memória. O nome deve ser seguido por dois pontos.

Pseudo-Instruções ORG ender A pseudo-instrução ORG (origin) indica ao montador que a próxima instrução será colocado na posição ender de memória. var EQU imed A pseudo-instrução EQU (equate) atribui um nome (rótulo) a um determinado valor. Esse comando é frequentemente usado para especificar variáveis que são posicionadas em um endereço específico de memória. Por exemplo para posicionar a variável x no endereço 100 use: X EQU 100

Pseudo-Instruções END ender A pseudo-instrução END indica que o programa fonte acabou. O operando ender é usado para pré-carregar o PC com o endereço inicial de execução do programa. DS imed A pseudo-instrução DS (define storage) reserva um número de palavras na memória definido pelo valor imed. DB imed A pseudo-instrução DB (define bytes) carrega esta palavra com o valor dado pelo operando imed.

Representações de Números Decimal: 30 Binário: 00110000b Hexadecimal: 30h Números hexadecimais maiores que 7Fh devem ser precedidos por um zero, p. ex. 0F3h

P C MUX R E M Endereço ACUMULADOR R D M Dados MEMÓRIA Unidade Aritmética e Lógica N Z R I UNIDADE DE CONTROLE Controle NEANDERX 256 bytes

Tabela de Instruções Código binário 0000 0001 0010 0011 0100 0101 0110 Instrução NOP STA ender LDA ender ADD ender OR ender AND ender NOT Descrição nenhuma operação armazena acumulador (store) carrega acumulador (load) Soma o acumulador com a memória operação lógica ou operação lógica e inverte (complementa) acumulador 0111 SUB Subtrai o acumulador da memória 1000 JMP ender desvio incondicional (jump)

Tabela de Instruções Código binário 1001 1010 1011 1100 1101 1110 1111 Instrução JN ender JZ ender JNZ ender IN ender OUT ender LDI imed HLT Descrição desvio condicional (jump on negative) desvio condicional (jump on zero) desvio condicional (jump on not zero) operação de entrada no dispositivo ender operação de saída no dispositivo ender carrega o valor imediato imed no acumulador término da execução (halt)

Códigos de Condição Códigos de condição: N (negativo): sinal do resultado 1 resultado é negativo 0 resultado não é negativo Z (zero): indica resultado igual a zero 1 resultado é igual a zero 0 resultado diferente de zero As instruções lógicas e aritméticas (ADD, NOT, AND, OR) e a instrução de transferência LDA afetam os códigos de condição N e Z. As demais instruções (STA, JMP, JN, JZ, JNZ, IN, OUT, LDI, NOP e HLT) não alteram os códigos de condição.

Ciclo de Busca de Instrução Ciclo de busca da instrução: Exemplo STA: RI MEM(PC) PC PC + 1 RI MEM(PC) PC PC + 1 ender MEM(PC) PC PC + 1 MEM(ender) AC

Exemplos de Programação Vamos considerar, como exemplo, um programa que realiza a soma de 3 posições consecutivas da memória e armazena o resultado numa quarta posição. Inicialmente, devem ser escolhidas a área de dados e a área de programa, ou seja, a localização das instruções e dados na memória. Não existem critérios para essa escolha, mas deve ser observado que área de programa não pode invadir a área de dados e vice-versa. Ou seja, para esse programa, foi escolhida uma alocação de memória de tal forma que o programa ocupe a metade inferior da memória e os dados a metade superior, como a seguir:

Exemplos de Programação Área de programa início do programa posição 0 (0H) Área de dados primeira parcela posição 128 (80H) Segunda parcela posição 129 (81H) Terceira parcela posição 130 (82H) Resultado posição 131 (83H) O programa a seguir pode ser editado em linguagem de montagem, depurado e executado usando o simulador/depurador NEANDERWIN, cujos comandos foram apresentados anteriormente. Os exercícios apresentados aqui são apenas uma amostra do que pode ser programado com NEANDERWIN. Na definição de novos problemas, o único cuidado que deve ser tomado é com a memória disponível para programa e dados, que compreende apenas 256 posições. Exceto onde explicitado, todos os números e endereços são representados na base decimal.

Exemplos de Programação Simbólico Comentários X EQU 128 ; Endereço da variável X definido como 128 Y EQU 129 ; Endereço da variável Y definido como 129 W EQU 130 ; Endereço da variável W definido como 130 Z EQU 131 ; Endereço da variável Z definido como 131 ORG 0 LDA X ; acumulador A recebe conteúdo de X ADD Y ; conteúdo de A é somado ao conteúdo de Y ADD W ; conteúdo de A é somado ao conteúdo de W STA Z ; conteúdo de A é copiado para Z HLT ; processador pára

Exemplo de Programação End. Simb. Hexa Dec. 0 LDA 128 20 32 1 128 80 128 2 ADD 129 30 48 3 129 81 129 4 ADD 130 30 48 5 130 82 130 6 STA 131 10 16 7 131 83 131 8 HLT F0 240

2. Ler dois valores do painel de chaves, comparar e exibir o maior dos valores no display. 3. Faça um programa que leia um valor do painel de chaves, exiba este valor no display, decremente de uma unidade e exiba o valor no display até este chegar a zero. 4. Determine qual a maior valor de um vetor com 10 elementos de 8 bits cada. Coloque os valores iniciais do vetor com uso das diretivas do montador. Exercícios 1.Limpar o acumulador: faça 3 programas diferentes que zerem o acumulador.

Conclusão O NEANDERX é um computador muito simples, desenvolvido apenas para fins didáticos. Processadores modernos são muito mais complexos que NEANDERX. Entretanto, mesmo processadores utilizados nas mais sofisticadas estações de trabalho são baseados nos conceitos elementares que você aprendeu com NEANDERX. O NEANDERWIN estende o conjunto de instruções do NEANDER e oferece uma interface de programação amigável, com a entrada do código em representação simbólica, com diversas facilidades para o programador, que tornam muito mais fácil o uso do processador NEANDER como ferramenta de ensino. Estão disponíveis versões tanto para o sistema operacional Windows e Linux. O código fonte está disponível mediante solicitação.