Prévia do material em texto
LINGUAGEM DE MONTAGEM – CCT0674-1001 Aula 05- Linguagem de programação Assembly Agenda 2LINGUAGEM DE MONTAGEM • Objetivos da aula • Historia da linguagem • Aplicações reais • Introdução • Assembly e Assembler • Assembly e Microprocessadores • Exemplo Objetivo da aula 3LINGUAGEM DE MONTAGEM Possibilitar ao aluno: · Entender a sintaxe de assembly. · Destacar a importância do uso. · Exemplificar por meio de códigos Introdução à Programação AULA 01: Introdução à Lógica de ProgramaçãoLINGUAGEM DE MONTAGEM Linguagem de Programação Assembly Introdução à Programação AULA 01: Introdução à Lógica de Programação História LINGUAGEM DE MONTAGEM O Assembly foi provavelmente a primeira linguagem de programação da história, surgiu na década de 50, época em que os computadores ainda usavam válvulas. A ideia do Assembly é usar um comando em substituição a cada instrução de máquina. Introdução à Programação AULA 01: Introdução à Lógica de Programação Aplicações Reais LINGUAGEM DE MONTAGEM • Initial Program Loader do QNX RTOS (http://www.qnx.com) • ZSNES: emulador de jogos do Super Nintendo • Vírus Chernobyl (CIH), por Chen Ing-Hau em 1998 • UPX Packer: compactador de executáveis • Maioria dos firmwares de IBM-PC (e.g. AWARD, AMI) • Hotfix para o Windows Introdução à Programação AULA 01: Introdução à Lógica de Programação Aplicações Reais LINGUAGEM DE MONTAGEM Quando se fala em economia de memória processual, Assembly se apresenta como uma boa opção, situações como: •Desenvolver um executável que tem pouco tempo para localizar arquivos em uma grande biblioteca de arquivos. •Desenvolver loops que gastam pouca memória processual (isso é muito usado em jogos que precisam de uma maior otimização de sistema) •Trabalhar com programas que precisam de processos em tempo real •Trabalhar com o código do sistema operacional de computadores Introdução à Programação AULA 01: Introdução à Lógica de Programação Introdução LINGUAGEM DE MONTAGEM Assembly é uma linguagem de baixo nível, chamada frequentemente de “linguagem de montagem”. É uma linguagem considerada difícil, principalmente, porque o programador precisa conhecer a estrutura da máquina para usá-la. Introdução à Programação AULA 01: Introdução à Lógica de Programação Introdução LINGUAGEM DE MONTAGEM Assembly utiliza mnemônicos curtos para representar as operações fundamentais que a UCP (Unidade Central de Processamento) pode executar. Nesse contexto, um mnemônico é um código, usualmente entre 1 e 5 letras, que representa um opcode. Introdução à Programação AULA 01: Introdução à Lógica de Programação Introdução LINGUAGEM DE MONTAGEM O código Assembly é de baixo nível e específico de um circuito, máquina ou arquitetura. Um Assembler tradicional efetua um mapeamento do tipo um-para-um dos mnemônicos para as instruções e dados correspondentes. Nota: Existem diversas sintaxes de Assembly, para a arquitetura x86 destacam-se a sintaxe Intel e a sintaxe AT&T. Não é case sensitive Introdução à Programação AULA 01: Introdução à Lógica de Programação Introdução LINGUAGEM DE MONTAGEM Apesar de ser exaustivamente trabalhoso, você pode perfeitamente desenvolver pequenos programas em Assembly. Para programar em assembly, o programador deveria conhecer o hardware da máquina. Cada família de processador tem sua própria linguagem assembly (Ex. X86, ARM, SPARC, MIPS), ou seja, mnemônicos específicos. Introdução à Programação AULA 01: Introdução à Lógica de Programação Assembly e Assembler LINGUAGEM DE MONTAGEM A linguagem Assembly, precisa ser transformada na linguagem que a máquina entende. Enquanto que o Assembler. É um utilitário que traduz o código Assembly para a máquina. Figura ilustrativa. Fonte: Google image Introdução à Programação AULA 01: Introdução à Lógica de Programação Conceito de Registradores LINGUAGEM DE MONTAGEM Registradores são áreas especiais dentro do processador que são mais rápidas que operandos de memória. O que é um registrador? Introdução à Programação AULA 01: Introdução à Lógica de Programação Registradores Intel LINGUAGEM DE MONTAGEM Por exemplo, um processador Intel tem 8 registradores, são memórias muito rápidas que ficam dentro do processador, são eles: • ESP e EBP – Registradores usados para trabalhar preferencialmente com pilhas, enquanto ESP guarda a referência do topo da pilha, EBP é usado para andar sobre ela. • EAX (Acumulador) - Utilizado em operações aritméticas, acesso de portas de entrada e saída, transferência de dados, guardar resultados, entre outros. Introdução à Programação AULA 01: Introdução à Lógica de Programação Registradores Intel LINGUAGEM DE MONTAGEM • EBX (Base) – Utilizado como ponteiro de acesso à memória, índice, e auxiliar às operações aritméticas do registrador EAX. • ECX (Contador) – Servir de contador para os laços de repetição. • EDX (Dados) -Usado em operações aritméticas juntamente com EAX • ESI e EDI – Geralmente são usados para movimentação de dados, com ESI guardando o endereço fonte(origem) de uma variável e EDI guardando o endereço do destino. Introdução à Programação AULA 01: Introdução à Lógica de Programação Registradores x86 família 8086 LINGUAGEM DE MONTAGEM • AX: acumulador para operandos e resultados • BX: ponteiro para dados no segmento DS • CX: contador para operações com string e loops • DX: ponteiro para E/S • SI: ponteiro para origem em operações com strings • DI: ponteiro para destino em operações com strings Introdução à Programação AULA 01: Introdução à Lógica de Programação Registradores x86 família 8086 LINGUAGEM DE MONTAGEM • SP: ponteiro de pilha, no segmento SS • BP: ponteiro base de dados na pilha, no segmento SS • IP: ponteiro de instrução no segmento CS • CS: segmento de código • DS: segmento de dados • ES: segmento extra • SS: segmento de pilha • .MODEL modelo – Configura o modelo de memória para diretivas de segmentação simplificadas. Os modelos de memória definem os limites de código e dados do seu programa. Você deve utilizar a diretiva MODEL antes de utilizar as diretivas de segmento simplificadas como .CODE e .DATA. 18 Diretivas do Turbo Assembler LINGUAGEM DE MONTAGEM • END [expressão] – Delimita o fim de um módulo. Todo o conteúdo após essa diretiva é ignorado. 19 Diretivas do Turbo Assembler LINGUAGEM DE MONTAGEM • .CODE: Inicia ou continua o segmento de código do módulo, quando utilizada com a diretiva .MODEL • .DATA: Define o início do segmento de dados inicializado do módulo, também define a inicialização de uma variável. • .STACK [tamanho]: Inicia ou continua um segmento de pilha. O parâmetro opcional tamanho indica a quantidade de pilha para reservar, em bytes. O valor padrão é 400h (1024 bytes). 20 Diretivas do Turbo Assembler LINGUAGEM DE MONTAGEM • ORG expressão – Define o contador de posição do Assembler como sendo o valor de expressão. É possível utilizar a diretiva ORG para associar um LABEL com um endereço absoluto específico. • INCLUDE arquivo – Faz com que o Assembler processe código-fonte de um arquivo externo. Pode ser utilizado para incluir uma biblioteca de MACROS ou PROCEDURES. 21 Diretivas do Turbo Assembler LINGUAGEM DE MONTAGEM • nome EQU valor – Permite associar um valor numérico a um nome • nome DB expressão [,expressão] ... • nome DW expressão [,expressão] ... • nome DD expressão [,expressão] ... 22 Diretivas do Turbo Assembler LINGUAGEM DE MONTAGEM • PROC nome inicia uma procedure – Define o início de uma procedure e associa um nome • ENDP [nome] finaliza uma procedure – Marca o fim de uma procedure (PROC) • MACRO nome inicia uma macro – Define uma macro que será expandida depois quando o seu nome é encontrado • ENDM [nome] finaliza uma macro – Termina uma definição de macro • @data – Segmento que DS deve assumir quando é utilizada a diretiva .DATA 23 Diretivas do Turbo Assembler LINGUAGEM DE MONTAGEM24 Exemplo de código Assembly LINGUAGEM DE MONTAGEM Introdução à Programação AULA 01: Introdução à Lógica de Programação Bibliografia Básica LINGUAGEM DE MONTAGEM GIMENEZ, Salvador Pinillos. Microcontroladores 8051: Teoria do hardware e do Software/Aplicações em controle digital/Laboratório e simulação [BV:PE]. 1 ed. São Paulo: Pearson Education do Brasil, 2002. Disponível em: https://plataforma.bvirtual.com.br/Acervo/Publicacao/471 MONTEIRO, Mario A. Introdução à organização de computadores [BV:MB]. 5 ed. Rio de Janeiro: LTC, 2017. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/978-85-216- 19734/recente STALLINGS, William. Arquitetura e Organização de Computadores: projeto para o desempenho [BV:PE]. 10 ed. São Paulo: Prentice-Hall, 2017. Disponível em: https://plataforma.bvirtual.com.br/Acervo/Publicacao/151479 https://plataforma.bvirtual.com.br/Acervo/Publicacao/471 https://integrada.minhabiblioteca.com.br/#/books/978-85-216-19734/recente https://plataforma.bvirtual.com.br/Acervo/Publicacao/151479 Introdução à Programação AULA 01: Introdução à Lógica de Programação Bibliografia Complementar LINGUAGEM DE MONTAGEM ASCENCIO, A. F. G; CAMPOS, E. A. V. FUNDAMENTOS DA PROGRAMAÇÃO DE COMPUTADORES: Algoritmos , Pascal, C/C++ e Java [BV:PE]. 2 ed. São Paulo: Prentice-hall, 2007. Disponível em: https://plataforma.bvirtual.com.br/Acervo/Publicacao/417 BALIEIRO. Sistemas Operacionais [BV:RE]. 1 ed. Rio de Janeiro: SESES, 2015. Disponível em: http://api.repositorio.savaestacio.com.br/api/objetos/efetuaDownload/80fea820- 1cb5-4982-863f-25f09adbdd0c GUIMARÃES, Carlos Henrique. Sistemas de Numeração - Aplicação em Computadores Digitais [BV:PE]. 1 ed. Rio de Janeiro: Interciência, 2014. Disponível em: https://plataforma.bvirtual.com.br/Acervo/Publicacao/37688 POLLI, Marco F. Organização de Computadores [BV:RE]. 1 ed. Rio de Janeiro: SESES, 2014. Disponível em: http://api.repositorio.savaestacio.com.br/api/objetos/efetuaDownload/e96bc69e- 73ca-4147-997d-14b601acb8d5 TANENBAUM, A.S.; AUSTIN, T. Organização Estruturada de Computadores [BV:PE]. 6 ed. São Paulo: Pearson, 2013. Disponível em: https://plataforma.bvirtual.com.br/Acervo/Publicacao/3825 https://plataforma.bvirtual.com.br/Acervo/Publicacao/417 http://api.repositorio.savaestacio.com.br/api/objetos/efetuaDownload/80fea820-1cb5-4982-863f-25f09adbdd0c https://plataforma.bvirtual.com.br/Acervo/Publicacao/37688 http://api.repositorio.savaestacio.com.br/api/objetos/efetuaDownload/e96bc69e-73ca-4147-997d-14b601acb8d5 https://plataforma.bvirtual.com.br/Acervo/Publicacao/3825 Introdução à Programação AULA 01: Introdução à Lógica de Programação Fonte LINGUAGEM DE MONTAGEM Aécio Fróes / CP05241-67 / gaerity@gmail.com. Bolsista CNPq/PIBIT LACMO: Aprendizado Computacional e Métodos de Otimização Prof. Ciro Ceissler (UFPE) ADAPTADO POR: Hilson Silva