Buscar

Aula 05- Linguagem de programação Assembly

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Mais conteúdos dessa disciplina