SlideShare uma empresa Scribd logo
Software Básico
nível de linguagem de montagem
(assembly)
Tanembaum, capítulo 7
Software Básico - Linguagem Assembly 2
Linguagem de montagem (Assembly)
• Abstração simbólica da linguagem de máquina
• Traduzida pelo programa assembler
• Mapeada diretamente em instruções de máquina
• Pseudo-instruções e macros auxiliares
° Mnemônicos facilitam codificação
• Símbolos e rótulos simplificam endereçamento
Software Básico - Linguagem Assembly 3
Características
• Linguagem assembly pura
° Cada comando corresponde a uma instrução de máquina
° Uso de nomes e endereços simbólicos
° Instruções mnemônicas: ADD, SUB ...
• Acesso a todas as características do HW alvo
° Tudo que pode ser feito na máquina, pode ser feito em
assembly (diferentemente da linguagem de alto nível)
° Ex: testar bit de vai-um
• Restrita à família de processadores alvo
° Programa em linguagem de alto nível pode ser
recompilado para outra máquina
Software Básico - Linguagem Assembly 4
Por que Assembly?
• Programar em assembly é difícil
° Demora mais pra escrever um programa
° Depuração e manutenção complicadas
• Duas razões:
° Desempenho
° Acesso ao HW
Software Básico - Linguagem Assembly 5
Desempenho
• Em termos de tamanho: consumo de memória
° crítico para sistemas embutidos
° código em smart cards, telefones celulares
• Em termos de velocidade
° Lei 90 – 10 (10% código : 90% do tempo de execução)
° Implementar partes críticas em assembly
• drivers de dispositivos,
• rotinas de BIOS
• laços internos de aplicações com restrições de
desempenho críticas
Software Básico - Linguagem Assembly 6
Comparação entre programação em
linguagens assembly e de alto nível
Programadores-anos
para produzir programa
Tempo de
execução (seg)
Linguagem de alto nível 10 100
Linguagem de montagem 50 33 (= 100/3)
Abordagem mista (antes do ajuste) 10 100
10% críticos 1 90
Outros 90% 9 10
Abordagem mista (após ajuste) 15 40
10% críticos 1+5 30 ( = 90/3)
Outros 90% 9 10
Software Básico - Linguagem Assembly 7
Outras experiências práticas
• MULTICS: 1o SO de tempo compartilhado
° Função reescrita em 3 meses:
• 26 vezes menor
• 50 vezes mais rápida
° Função reescrita em 2 meses:
• 20 vezes menor
• 40 vezes mais rápida
Software Básico - Linguagem Assembly 8
Acesso
• Algumas tarefas exigem acesso direto ao HW
° Tratamento de interrupções do hardware
° Controladores de dispositivos (sistemas de tempo real)
• Sistemas modernos (Linux)
° Acesso às funções do processador para troca de contexto
° Boot
Software Básico - Linguagem Assembly 9
Motivações reavaliadas
• Desempenho
° É importante poder escrever um bom código de
linguagem de montagem para cenários críticos
• Acesso – motivo mais importante
° Mesmo assim, apenas em casos extremos
° Uma linguagem como C dá bom acesso
• Tamanho: às vezes código de montagem é única saída
devido à escassez de memória
Software Básico - Linguagem Assembly 10
Motivações reavaliadas
• Compilador deve ou produzir saída para assembler ou ele
mesmo tem que executar processo de montagem
° Alguém tem que escrever os compiladores
• Estudo de arquiteturas
° Assembly está diretamente relacionada ao hardware
° Permite entender como a máquina realmente trabalha
do ponto de vista do hardware
Software Básico - Linguagem Assembly 11
Formato das Instruções
• Está diretamente associado ao hardware
° Porém, possuem características comuns
• Instruções Assembly
° Representam os comandos da máquina
° Usualmente, quatro campos
• Label, operação, operandos, comentários
• Pseudo-instruções: comandos para o assembler
° Usadas para reservar espaço para dados
° Apenas tipos básicos
Software Básico - Linguagem Assembly 12
Exemplos
Pentium 4
Motorola
680x0
Sparc
DD
DD
DD
Software Básico - Linguagem Assembly 13
Campo de label
• Usado para atribuir um nome simbólico para
uma variável ou endereço (para desvio)
° Campo opcional
• Formato
° Posição fixa ou separador
° Tamanho fixo (6-8 caracteres) ou variável
Software Básico - Linguagem Assembly 14
Campo de operação
• Representações simbólicas das instruções do
hardware
° Critério de quem fez o montador
• Intel: MOV
• Motorola: MOVE
• Sun: ST e LD
° Variantes em função do tamanho do dado
• Motorola: MOVE.L / MOVE.W / MOVE.B
• Intel: EAX / AX / AH ou AL
Software Básico - Linguagem Assembly 15
Campo de operandos
• Especifica os alvos das operações
° Endereços: instruções de desvio
° Variáveis
• posição de memória sendo acessada
• Assemblers variam em como reservam espaço para
dados (DD na Intel vs. .WORD na Sparc)
° Constantes
• valores para operações aritméticas
(endereçamento imediato)
° Registradores
• variáveis locais do processador
Software Básico - Linguagem Assembly 16
Campo de comentário
• Usado para acrescentar informações relevantes
ao programa
° Facilitar a compreensão do mesmo
° Programa assembly é praticamente incompreensível
sem comentários
• Formato geral
° Indicador de início (; ou !)
° Até o final da linha
Software Básico - Linguagem Assembly 17
Pseudo-instruções
• Comandos para o montador, não instruções
° Diretivas de assember
• Relacionadas com o modo de operação da arquitetura e do montador
° Alocação de variáveis
• ex: DD no Pentium, .WORD no SPARC
° Criação de macros e subrotinas
° Definição de escopo de uma macro / subrotina / variável
• PUBLIC / EXTERN (local por default)
° Definição de segmentos
° Constantes
• Veja exemplos do assember MASM do Pentium 4 (Tabela 7.2)
Software Básico - Linguagem Assembly 18
Pseudo-instruções:
• Exemplos do MASM
° Definir um novo símbolo igual a uma expressão dada
BASE EQU 2000
LIMIT EQU 4 * BASE + 2000
° Alocar e definir armazenamento para um ou mais bytes ou
palavras (16 bits) ou double (32 bits)
TABLE DB 11, 23, 49
Aloca espaço para 3 bytes e os inicializa com 11, 23 e 49, respectivalmente
Define símbolo TABLE e o ajusta com o endereço onde 11 é armazenado
Software Básico - Linguagem Assembly 19
Definição de Macro
• Bloco de código de uso repetitivo
• Ao invés de realmente reescrevê-lo, define-se a
macro
° Identifica as instruções a serem repetidas
° Código é expandido em cada ocorrência
• Mais eficiente que chamada de procedimento
quando conjunto de instruções é pequeno mas
frequente
Software Básico - Linguagem Assembly 20
Definição, Chamada e expansão
• São necessários:
° Cabeçalho com o nome da macro;
° Bloco de instruções;
° Pseudo-instrução indicando o término da macro.
• O montador salva a macro em uma tabela e
quando esta é chamada, substitui a chamada
pelo código.
° Chamada de macro: utilização de um nome de macro
como opcode
° Expansão de macro: substituição pelo corpo da macro
Software Básico - Linguagem Assembly 21
Exemplo (Pentium 4)
Software Básico - Linguagem Assembly 22
Chamada e expansão
• A expansão ocorre durante o processo de montagem
e não durante a execução do programa.
• O código gerado pelo exemplo (a) é o mesmo do
gerado pelo exemplo (b).
• Assembler efetuado em 2 passos (conceitualmente):
° As definições de macro são salvas e as chamadas são
expandidas gerando um novo código em linguagem
assembly
° Código é processado pelo assembler como se fosse o
original.
Software Básico - Linguagem Assembly 23
Macros com parâmetros
Software Básico - Linguagem Assembly 24
Subrotina
• É uma chamada a procedimento.
• Onde houver uma chamada, o procedimento
é invocado separadamente e ao seu término,
retorna para o programa que originou esta
chamada.
• Ocorre um desvio no código.
Software Básico - Linguagem Assembly 25
Macro x Subrotina
Programa SubrotinaMacro
Software Básico - Linguagem Assembly 26
Tradução completa
• Constituída de duas fases (duas passagens):
1. Montagem dos procedimentos a partir dos arquivos
com código em assembly.
2. Ligação dos módulos-objetos resultantes.
• Ao final, teremos um programa binário executável.
Software Básico - Linguagem Assembly 27
Tradução completa
Fonte do
procedimento 1
Fonte do
procedimento 2
Fonte do
procedimento 3
Montador
Módulo
objeto 1
Módulo
objeto 2
Módulo
objeto 3
Ligador
(linker)
Programa
executável
em binário
Software Básico - Linguagem Assembly 28
O processo de montagem
Fonte do
procedimento 1
Fonte do
procedimento 2
Fonte do
procedimento 3
Montador
Módulo
objeto 1
Módulo
objeto 2
Módulo
objeto 3
• Entrada: arquivos com código assembly
• Saída: linguagem de máquina “anotada”
° Referências a outros módulos
° Reservas de espaço
Software Básico - Linguagem Assembly 29
Montagem em duas passagens
• Tradução imediata nem sempre é possível
° Problema da referência antecipada:
• Ex: desvio para endereço L no início, mas L definido no final
• Primeira passagem:
° Contagem do espaço ocupado por cada instrução
° Construção da tabela de símbolos (labels)
° Salva definição de macros e expande chamadas
à medida que são encontradas
• Segunda passagem:
° Geração do programa objeto para o Linker
° Resolução de símbolos e referências
Software Básico - Linguagem Assembly 30
Montagem em duas passagens
• Duas alternativas:
° Alternativa 1: ler o programa de entrada 2 vezes.
• armazenar os símbolos em uma tabela
• traduzir o programa
• solução simples
° Alternativa 2: ler o programa de entrada 1 vez
• gerar código intermediário e armazenar em memória
° remover comentários
° manter somente o essencial
• pode ser mais eficiente (memória X tempo de E/S)
Software Básico - Linguagem Assembly 31
Passo 1
• Principal papel: montar tabela de símbolos
° Símbolo: label ou valor ao qual é atribuído nome simbólico
° ex: BUFSIZE EQU 8192
• Contabiliza espaço para instruções
° ILC – Instruction Location Counter
• Incrementado do tamanho de cada instrução traduzida
• Usado para definir endereços de instruções com label
• Iniciado com 0 e incrementado do comprimento da
instrução para cada instrução processada
• Memoriza localização dos símbolos encontrados durante o
processo: tabela
Software Básico - Linguagem Assembly 32
Exemplo
Rótulo Opcode Operandos Comentários Comprimento ILC
MARIA: MOV EAX,I EAX=I 5 100
MOV EBX,J EBX=J 6 105
ROBERTA: MOV ECX,K ECX=K 6 111
IMUL EAX,EAX EAX = I*I 2 117
IMUL EBX,EBX EBX = J*J 3 119
IMUL ECX,ECX ECX = K*K 3 122
MARILYN: ADD EAX,EBX EAX = I*I + J*J 2 125
ADD EAX,ECX EAX = I*I + J*J + K*K 2 127
STEPHANY: JMP DONE Branch to DONE 5 129
Software Básico - Linguagem Assembly 33
Passo 1
• Usa no mínimo 3 tabelas internas
° Tabela de símbolos
° Tabela de pseudo-instruções
° Tabela de opcodes
• Opcional: tabela de literais
° Quando não tem suporte para operandos imediatos
° Constantes (ex: ´5´, ´9´);
° Após passo 1: tabela ordenada e duplicatas removidas
Software Básico - Linguagem Assembly 34
Tabela de símbolos
• Criada no passo 1 para utilização no passo 2
• Informações coletadas sobre símbolos
° Valor (endereço ou valor numérico)
° Tamanho do campo de dados
° Informação de relocação: o símbolo muda de valor se o
programa for carregado em um endereço diferente?
° Regras de escopo: acessível ou não fora do procedimento?
Símbolo Valor Outras
MARIA 100
ROBERTA 111
MARILYN 125
STEPHANY 129
Software Básico - Linguagem Assembly 35
Tabela de símbolos
• Várias maneiras de organizar a tabela
° Memória associativa: par (símbolo,valor):
• Forma mais simples: vetor de registros
• Forma mais esperta: tabela hash
Software Básico - Linguagem Assembly 36
Tabela de opcodes
• Uma entrada para cada opcode simbólico na linguagem assembly
° opcode simbólico,
° operandos,
° valor numérico do opcode,
° comprimento
° classe da instrução ( número e tipo dos operandos)
Opcode 1º
Operando
2º
Operando
Opcode
(hexa)
Comprimento
da instrução
Classe
AAA - - 37 1 6
ADD EAX immed32 05 5 4
ADD reg reg 01 2 19
AND EAX immed32 25 5 4
AND reg reg 21 2 19
Software Básico - Linguagem Assembly 37
Passo 1
Leitura
Label
Pesquisa tabela de
pseudo-instruções
Inicialização
Pesquisa tabela de
opcodes
Obtem tamanho da
instrução
Checa e processa literais
(inserir na tabela)
Atualiza ILC
Determinar espaço
p/ dados
Tipo ?
Executar ação
apropriada
Guardar label e ILC na tabela
de símbolos
Finalizar passo 1 e ir
ao passo 2
sim
não
encontrado END
outrosDD / DB / DWnão encontrado
Software Básico - Linguagem Assembly 38
Passo 2
• Tradução propriamente dita do programa
° Produz código
° Produz também informação extra que o ligador precisa pra
ligar procedimentos montados em tempos diferentes
• Leitura sequencial do código
° Acessos às tabelas de instruções e de símbolos
° Geração de código binário
• Tratamento de erros
° Símbolos desconhecidos ou definidos múltiplas vezes
° Opcode fornecido com # insuficiente/excessivo de operandos
° Declaração END faltante, etc...
Software Básico - Linguagem Assembly 39
Passo 2
leitura
pesquisa tabela de
pseudos
inicialização
pesquisa tabela de
opcode
avaliar tipo
da instrução
montar a
instrução
imprimir instrução e
informações
fazer conversão de
constantes
tipo ?
executar ação
apropriada
finalizar o
passo 2
encontrado END
outrosnão encontrado
obter tamanho, tipo e
código da instrução
Determinar espaço
p/ dados
atualizar ILC
Software Básico - Linguagem Assembly 40
Tradução completa
Fonte do
procedimento 1
Fonte do
procedimento 2
Fonte do
procedimento 3
Montador
Módulo
objeto 1
Módulo
objeto 2
Módulo
objeto 3
Ligador
(linker)
Programa
executável
em binário
Software Básico - Linguagem Assembly 41
Ligação dos módulos
Módulo
objeto 1
Módulo
objeto 2
Módulo
objeto 3
Ligador
(linker)
Programa
executável
em binário
• Para simplificar o desenvolvimento, cada programa
pode ser dividido em módulos, cada um com alguns
procedimentos.
• Para um programa poder ser executado, todos os
procedimentos devem ser ligados.
Software Básico - Linguagem Assembly 42
Ligador
• Funções:
° Ligação: une os procedimentos e resolve as
referências entre os módulos.
° Alocação: separa espaço na memória para o
programa.
° Relocação: ajusta os endereços que dependem da
posição do programa na memória.
Software Básico - Linguagem Assembly 43
Exemplo de ligação
600
500
400
300
200
100
0
CALL C
MOVE Q TO X
BRANCH TO 300
Object module B
CALL D
MOVE R TO X
BRANCH TO 200
Object module C
500
400
300
200
100
0
CALL B
MOVE P TO X
BRANCH TO 200
Object module A
400
300
200
100
0
MOVE S TO X
BRANCH TO 200
Object module D
300
200
100
0
Módulos isolados:
Software Básico - Linguagem Assembly 44
Exemplo de ligação
CALL C
MOVE Q TO X
BRANCH TO 300
CALL D
MOVE R TO X
BRANCH TO 200
CALL B
MOVE P TO X
BRANCH TO 200
MOVE S TO X
BRANCH TO 200
Object
module C
Object
module B
Object
module D
Object
module A
Para executar o programa, o
ligador traz os módulos para a
memória principal para formar a
imagem do programa binário
executável.
1900
1800
1700
1600
1500
1400
1300
1200
1100
1000
900
800
700
600
500
400
300
200
100
0
O que acontece se o programa
for executado assim?
Seção da memória com início em 0 é usada para vetores
de interrupção, comunicação com sistema operacional, etc
Software Básico - Linguagem Assembly 45
Problemas tratados pelo ligador
• Problema da relocação: todas as instruções de referência à
memória falhariam pois contém endereços determinados
assumindo cada módulo com um espaço de endereçamento
separado
° Se espaço de endereçamento segmentado em tese não
haveria problema
• Família Pentium tem suporte em hardware
• Porém OS/2 é único SO que tem suporte a segmentação
• Problema de referência externa: assembler não tem como
saber endereço de um procedimento externo (CALL B), pois
este só é conhecido em tempo de ligação
Software Básico - Linguagem Assembly 46
Fusão dos espaços de endereços dos
módulos objetos em um único espaço
1. Constrói tabela com módulos objetos e seus comprimentos
2. Com base na tabela, designa um endereço de início a cada
módulo objeto
3. Para cada instrução com referência à memória, adiciona ao
endereço sendo referenciado uma constante de relocação
iugal ao endereço de início do módulo em questão
4. Para cada instrução que referencia procedimentos externos,
insere os endereços destes procedimentos no lugar
adequado
Software Básico - Linguagem Assembly 47
CALL 1100
MOVE Q TO X
BRANCH TO 800
CALL 1600
MOVE R TO X
BRANCH TO 1300
CALL 500
MOVE P TO X
BRANCH TO 300
MOVE S TO X
BRANCH TO 1800
Object
module C
1900
1800
1700
1600
1500
1400
1300
1200
1100
1000
900
800
700
600
500
400
300
200
100
0
Object
module B
Object
module D
Object
module A
Módulos relocados:
Exemplo de ligação
Software Básico - Linguagem Assembly 48
Estrutura de módulos objetos
• Identificação: nome e tamanho das partes do
módulo
• Pontos de entrada (nome e endereço)
° Símbolos internos que podem ser
referenciados de outros módulos- PUBLIC
• Tabelas de referências externas
° Símbolos referenciados pelo módulo,
ausentes do mesmo - EXTERN
• Instruções, variáveis, constantes (código objeto)
° Única parte carregada em memória
° Outras partes é para uso do ligador
• Dicionário para relocação: contém endereços que devem ser relocados
(quais instruções na parte 4 precisam ser relocadas)
• Fim de módulo: marcação especial e (talvez) soma de verificação
Tabela de referências
externas
Fim do módulo
Dicionário de
símbolos para relocação
Instruções de máquina
e constantes
Tabela de pontos de entrada
Identificação do módulo
Software Básico - Linguagem Assembly 49
Tarefas do Ligador
• Maioria dos ligadores requer duas passagens
• Primeira passagem:
° Colocação de todos os módulos na memória
° Contabilização dos espaços ocupados
° Determinação dos endereços exportados
° Verificação de referências externas
° Constrói tabelas de nomes, comprimentos dos módulos,
tabelas com pontos de entrada e referências externas
• Segunda passagem:
° Relocação: Alteração de endereços em cada módulo
° Ligação efetiva
Software Básico - Linguagem Assembly 50
Não está tudo resolvido ainda....
• Um programa pode ser carregado/descarregado da
memória principal muitas vezes durante a execução
° Paginação: partes do programa (páginas) podem ser
retirados da memória principal para serem recarregados
depois
• O que acontece com as referências à memória?
Software Básico - Linguagem Assembly 51
Tempo de vínculação
• Momento em que é determinado o endereço de memória
principal correspondente a um símbolo
• Se uma instrução com endereço de memória for movida
após a vinculação, ela será incorreta
• Dois problemas:
° Mapeamento de símbolo para endereço virtual
° Mapeamento de endereço virtual para endereço físico
Software Básico - Linguagem Assembly 52
Oportunidades para vinculação
• Durante a escrita do programa
• Durante a tradução assembly
• Durante a ligação (geração do executável)
• Durante a carga do programa na memória
• Quando um registrador base é carregado
• Quando a instrução com o endereço é
executada
Software Básico - Linguagem Assembly 53
Relocação dinâmica
• Programas podem mudam de lugar na memória
° Sistemas de espaço de endereçamento único
• Endereços internos podem ser alterados
° Tabelas de tradução (paginação)
° Registrador de relocação (endereços relativos)
• Contém endereço de memória física do início do programa
• Hardware adiciona endereço de relocação a todos endereços
de memória antes de enviá-los a memória
• Atualizado toda vez que programa recarregado
° Acessos relativos ao PC
• Memória virtual acaba com esse problema!
° Ligador responsável pelo mapeamnto símbolo : endereço virtual
Software Básico - Linguagem Assembly 54
Ligação Dinâmica
• Ligação de um módulo somente quando um de
seus procedimentos é chamado pela primeira vez
° Evita carregar em memória, módulos ue poderão não
ser utilizados (procedimentos raramente chamados)
• Pioneiro: MULTICS
• Outros
° DLL no Windows: economia de memória pois código é
compartilhado entre aplicações
° Bibliotecas compartilhadas no Unix
• Ex: biblioteca padrão do C
Software Básico - Linguagem Assembly 55
MULTICS
• Cada programa tem um segmento de ligação: tabela com par
(nome, endereço virtual) para cada procedimento
° Os endereços virtuais são iniciados com valor inválido
• Instruções CALL apontam para entrada correspondente na tabela
• Quando a primeira chamada a um procedimento externo é
executada:
° Acesso a endereço inválido causa exceção para ligador
dinâmico
° Módulo é carregado e seu endereço virtual é atualizado na
tabela
° Chamadas subsequentes funcionam normalmente
Software Básico - Linguagem Assembly 56
Resolução de endereços
• Escrita do programa: endereços diretos
• Tradução do programa: resolução de nomes
• Durante a ligação: referências externas
• No momento da carga: relocação
• Na carga de um registrador de indexação
• Sob controle do sistema: relocação dinâmica
• Na execução de uma instrução: ref. relativas
• Carga e ligação sob demanda: DLLs

Mais conteúdo relacionado

Mais procurados

Técnicas de detecção de avarias
Técnicas de detecção de avariasTécnicas de detecção de avarias
Técnicas de detecção de avarias
Andre Santos
 
Barramento do Sistema - Arquitetura e Organização de Computadores
Barramento do Sistema - Arquitetura e Organização de ComputadoresBarramento do Sistema - Arquitetura e Organização de Computadores
Barramento do Sistema - Arquitetura e Organização de Computadores
Wellington Oliveira
 
Sistemas operacionais
Sistemas operacionaisSistemas operacionais
Sistemas operacionais
vini_campos
 
História e evolução dos computadores
História e evolução dos computadores História e evolução dos computadores
História e evolução dos computadores
Alberto Felipe Friderichs Barros
 
Introdução à Arquitetura de Computadores
Introdução à Arquitetura de ComputadoresIntrodução à Arquitetura de Computadores
Introdução à Arquitetura de Computadores
Mauro Pereira
 
Conceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de ProgramaçãoConceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de Programação
Sidney Roberto
 
Risc e cisc
Risc e ciscRisc e cisc
Risc e cisc
redesinforma
 
Aula 02 - Escolha caso
Aula 02 - Escolha casoAula 02 - Escolha caso
Aula 02 - Escolha caso
Eder Samaniego
 
Arquitetura de computadores Módulo 4
Arquitetura de computadores Módulo 4Arquitetura de computadores Módulo 4
Arquitetura de computadores Módulo 4
Luis Ferreira
 
Sistemas Operacionais - Aula 06 (Estrutura do S.O)
Sistemas Operacionais - Aula 06 (Estrutura do S.O)Sistemas Operacionais - Aula 06 (Estrutura do S.O)
Sistemas Operacionais - Aula 06 (Estrutura do S.O)
Leinylson Fontinele
 
Aula 01 - Algoritmo e Programação
Aula 01 - Algoritmo e ProgramaçãoAula 01 - Algoritmo e Programação
Aula 01 - Algoritmo e Programação
Aislan Rafael
 
Algoritmo aula 01-f
Algoritmo   aula 01-fAlgoritmo   aula 01-f
Algoritmo aula 01-f
Professor Samuel Ribeiro
 
Arquitetura interna do computador
Arquitetura interna do computadorArquitetura interna do computador
Arquitetura interna do computador
Andleloli
 
Lógica de Programação
Lógica de ProgramaçãoLógica de Programação
Lógica de Programação
Claudio Stein Junior
 
Aula Introdução a Arquitetura e Organização de Computadores
Aula Introdução a Arquitetura e Organização de ComputadoresAula Introdução a Arquitetura e Organização de Computadores
Aula Introdução a Arquitetura e Organização de Computadores
Gilvan Latreille
 
Redes de computadores
Redes de computadoresRedes de computadores
Redes de computadores
Jakson Silva
 
Manutenção e montagem de computadores
Manutenção e montagem de computadoresManutenção e montagem de computadores
Manutenção e montagem de computadores
Joka Luiz
 
Montagem manutenção de computadores
Montagem manutenção de computadoresMontagem manutenção de computadores
Montagem manutenção de computadores
setilsonadobmov
 
Sistemas operacionais
Sistemas operacionaisSistemas operacionais
Sistemas operacionais
Samira Magalhaes
 
Sistemas Operacionais - Aula 05 (Concorrência)
Sistemas Operacionais - Aula 05 (Concorrência)Sistemas Operacionais - Aula 05 (Concorrência)
Sistemas Operacionais - Aula 05 (Concorrência)
Leinylson Fontinele
 

Mais procurados (20)

Técnicas de detecção de avarias
Técnicas de detecção de avariasTécnicas de detecção de avarias
Técnicas de detecção de avarias
 
Barramento do Sistema - Arquitetura e Organização de Computadores
Barramento do Sistema - Arquitetura e Organização de ComputadoresBarramento do Sistema - Arquitetura e Organização de Computadores
Barramento do Sistema - Arquitetura e Organização de Computadores
 
Sistemas operacionais
Sistemas operacionaisSistemas operacionais
Sistemas operacionais
 
História e evolução dos computadores
História e evolução dos computadores História e evolução dos computadores
História e evolução dos computadores
 
Introdução à Arquitetura de Computadores
Introdução à Arquitetura de ComputadoresIntrodução à Arquitetura de Computadores
Introdução à Arquitetura de Computadores
 
Conceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de ProgramaçãoConceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de Programação
 
Risc e cisc
Risc e ciscRisc e cisc
Risc e cisc
 
Aula 02 - Escolha caso
Aula 02 - Escolha casoAula 02 - Escolha caso
Aula 02 - Escolha caso
 
Arquitetura de computadores Módulo 4
Arquitetura de computadores Módulo 4Arquitetura de computadores Módulo 4
Arquitetura de computadores Módulo 4
 
Sistemas Operacionais - Aula 06 (Estrutura do S.O)
Sistemas Operacionais - Aula 06 (Estrutura do S.O)Sistemas Operacionais - Aula 06 (Estrutura do S.O)
Sistemas Operacionais - Aula 06 (Estrutura do S.O)
 
Aula 01 - Algoritmo e Programação
Aula 01 - Algoritmo e ProgramaçãoAula 01 - Algoritmo e Programação
Aula 01 - Algoritmo e Programação
 
Algoritmo aula 01-f
Algoritmo   aula 01-fAlgoritmo   aula 01-f
Algoritmo aula 01-f
 
Arquitetura interna do computador
Arquitetura interna do computadorArquitetura interna do computador
Arquitetura interna do computador
 
Lógica de Programação
Lógica de ProgramaçãoLógica de Programação
Lógica de Programação
 
Aula Introdução a Arquitetura e Organização de Computadores
Aula Introdução a Arquitetura e Organização de ComputadoresAula Introdução a Arquitetura e Organização de Computadores
Aula Introdução a Arquitetura e Organização de Computadores
 
Redes de computadores
Redes de computadoresRedes de computadores
Redes de computadores
 
Manutenção e montagem de computadores
Manutenção e montagem de computadoresManutenção e montagem de computadores
Manutenção e montagem de computadores
 
Montagem manutenção de computadores
Montagem manutenção de computadoresMontagem manutenção de computadores
Montagem manutenção de computadores
 
Sistemas operacionais
Sistemas operacionaisSistemas operacionais
Sistemas operacionais
 
Sistemas Operacionais - Aula 05 (Concorrência)
Sistemas Operacionais - Aula 05 (Concorrência)Sistemas Operacionais - Aula 05 (Concorrência)
Sistemas Operacionais - Aula 05 (Concorrência)
 

Destaque

Assembly
AssemblyAssembly
Arquitetura de Computadores: Assembly
Arquitetura de Computadores: AssemblyArquitetura de Computadores: Assembly
Arquitetura de Computadores: Assembly
Elaine Cecília Gatto
 
Conjunto de instruções mips - introdução
Conjunto de instruções mips - introduçãoConjunto de instruções mips - introdução
Conjunto de instruções mips - introdução
Elaine Cecília Gatto
 
Aula 1 - Assembly - 8051
Aula 1 - Assembly - 8051Aula 1 - Assembly - 8051
Aula 1 - Assembly - 8051
Thiago Oliveira
 
Conjunto de instruções mips - instruções de desvio
Conjunto de instruções mips - instruções de desvioConjunto de instruções mips - instruções de desvio
Conjunto de instruções mips - instruções de desvio
Elaine Cecília Gatto
 
Aula 4 a linguagem assembly
Aula 4   a linguagem assemblyAula 4   a linguagem assembly
Aula 4 a linguagem assembly
LCCIMETRO
 
Aula 6 emu8086
Aula 6   emu8086Aula 6   emu8086
Aula 6 emu8086
LCCIMETRO
 
Linguagens de Programação
Linguagens de ProgramaçãoLinguagens de Programação
Linguagens de Programação
12anogolega
 
Pascal
PascalPascal
Aula 2 - Assembly - 8051
Aula 2 - Assembly - 8051Aula 2 - Assembly - 8051
Aula 2 - Assembly - 8051Thiago Oliveira
 
Aula 3 compiladores e interpretadores
Aula 3   compiladores e interpretadoresAula 3   compiladores e interpretadores
Aula 3 compiladores e interpretadores
LCCIMETRO
 
Algoritmos - Pascal
Algoritmos - PascalAlgoritmos - Pascal
Algoritmos - Pascal
Elaine Cecília Gatto
 
Assembly para pc-25paginas
Assembly para pc-25paginasAssembly para pc-25paginas
Assembly para pc-25paginas
MikeNandes
 
Aula 3 - Assembly - 8051
Aula 3 - Assembly - 8051Aula 3 - Assembly - 8051
Aula 3 - Assembly - 8051
Thiago Oliveira
 
Aula 4 - Assembly - 8051
Aula 4 - Assembly - 8051Aula 4 - Assembly - 8051
Aula 4 - Assembly - 8051
Thiago Oliveira
 
Fila circular dinamica
Fila circular dinamicaFila circular dinamica
Fila circular dinamica
Elaine Cecília Gatto
 
Kit Modular de Desenvolvimento Baseado em Microcontrolador PIC
Kit Modular de Desenvolvimento Baseado em Microcontrolador PICKit Modular de Desenvolvimento Baseado em Microcontrolador PIC
Kit Modular de Desenvolvimento Baseado em Microcontrolador PIC
Bruno Silva
 
Microcontroladores pic18 aula 1
Microcontroladores pic18 aula 1Microcontroladores pic18 aula 1
Microcontroladores pic18 aula 1
Bruno Maspoli
 
Resumo assembly x86 16 bits
Resumo assembly x86 16 bitsResumo assembly x86 16 bits
Resumo assembly x86 16 bits
Elaine Cecília Gatto
 
Do alto para o baixo nível - Entendendo as Diferenças
Do alto para o baixo nível - Entendendo as DiferençasDo alto para o baixo nível - Entendendo as Diferenças
Do alto para o baixo nível - Entendendo as Diferenças
Welington Sampaio
 

Destaque (20)

Assembly
AssemblyAssembly
Assembly
 
Arquitetura de Computadores: Assembly
Arquitetura de Computadores: AssemblyArquitetura de Computadores: Assembly
Arquitetura de Computadores: Assembly
 
Conjunto de instruções mips - introdução
Conjunto de instruções mips - introduçãoConjunto de instruções mips - introdução
Conjunto de instruções mips - introdução
 
Aula 1 - Assembly - 8051
Aula 1 - Assembly - 8051Aula 1 - Assembly - 8051
Aula 1 - Assembly - 8051
 
Conjunto de instruções mips - instruções de desvio
Conjunto de instruções mips - instruções de desvioConjunto de instruções mips - instruções de desvio
Conjunto de instruções mips - instruções de desvio
 
Aula 4 a linguagem assembly
Aula 4   a linguagem assemblyAula 4   a linguagem assembly
Aula 4 a linguagem assembly
 
Aula 6 emu8086
Aula 6   emu8086Aula 6   emu8086
Aula 6 emu8086
 
Linguagens de Programação
Linguagens de ProgramaçãoLinguagens de Programação
Linguagens de Programação
 
Pascal
PascalPascal
Pascal
 
Aula 2 - Assembly - 8051
Aula 2 - Assembly - 8051Aula 2 - Assembly - 8051
Aula 2 - Assembly - 8051
 
Aula 3 compiladores e interpretadores
Aula 3   compiladores e interpretadoresAula 3   compiladores e interpretadores
Aula 3 compiladores e interpretadores
 
Algoritmos - Pascal
Algoritmos - PascalAlgoritmos - Pascal
Algoritmos - Pascal
 
Assembly para pc-25paginas
Assembly para pc-25paginasAssembly para pc-25paginas
Assembly para pc-25paginas
 
Aula 3 - Assembly - 8051
Aula 3 - Assembly - 8051Aula 3 - Assembly - 8051
Aula 3 - Assembly - 8051
 
Aula 4 - Assembly - 8051
Aula 4 - Assembly - 8051Aula 4 - Assembly - 8051
Aula 4 - Assembly - 8051
 
Fila circular dinamica
Fila circular dinamicaFila circular dinamica
Fila circular dinamica
 
Kit Modular de Desenvolvimento Baseado em Microcontrolador PIC
Kit Modular de Desenvolvimento Baseado em Microcontrolador PICKit Modular de Desenvolvimento Baseado em Microcontrolador PIC
Kit Modular de Desenvolvimento Baseado em Microcontrolador PIC
 
Microcontroladores pic18 aula 1
Microcontroladores pic18 aula 1Microcontroladores pic18 aula 1
Microcontroladores pic18 aula 1
 
Resumo assembly x86 16 bits
Resumo assembly x86 16 bitsResumo assembly x86 16 bits
Resumo assembly x86 16 bits
 
Do alto para o baixo nível - Entendendo as Diferenças
Do alto para o baixo nível - Entendendo as DiferençasDo alto para o baixo nível - Entendendo as Diferenças
Do alto para o baixo nível - Entendendo as Diferenças
 

Semelhante a Linguagem assembly

Geração de código linguagem c
Geração de código   linguagem cGeração de código   linguagem c
Geração de código linguagem c
Jefferson Bessa
 
Compiladores
CompiladoresCompiladores
Compiladores
Marcelo Avila
 
Processo de Desenvolvimento de Software - Linguagens Compiladas x Interpretadas
Processo de Desenvolvimento de Software - Linguagens Compiladas x InterpretadasProcesso de Desenvolvimento de Software - Linguagens Compiladas x Interpretadas
Processo de Desenvolvimento de Software - Linguagens Compiladas x Interpretadas
Natanael Simões
 
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux SystemsLinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
Fernando Mercês
 
Linguagem de Programação
Linguagem de ProgramaçãoLinguagem de Programação
Linguagem de Programação
Igor Cambongue
 
Linguagem de programação
Linguagem de programaçãoLinguagem de programação
Linguagem de programação
Igor Cambongue
 
Ac16 conjunto de instruções v2
Ac16   conjunto de instruções v2Ac16   conjunto de instruções v2
Ac16 conjunto de instruções v2
Elaine Cecília Gatto
 
Webinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosWebinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcados
Embarcados
 
Conceitos Fundamentais de Programacao
Conceitos Fundamentais de ProgramacaoConceitos Fundamentais de Programacao
Conceitos Fundamentais de Programacao
Jorge Cardoso
 
Microcontroladores x microprocessadores
Microcontroladores x microprocessadoresMicrocontroladores x microprocessadores
Microcontroladores x microprocessadores
miroslayer
 
Aula 2 - Introducao e Algoritmos.ppt
Aula 2 - Introducao e Algoritmos.pptAula 2 - Introducao e Algoritmos.ppt
Aula 2 - Introducao e Algoritmos.ppt
Jadna Almeida
 
ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES
ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORESARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES
ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES
willian324163
 
10 apostila microcontroladores
10  apostila microcontroladores10  apostila microcontroladores
10 apostila microcontroladores
Alyson Cavalcante
 
Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...
Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...
Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...
Tchelinux
 
Técnicas_Implementação
Técnicas_ImplementaçãoTécnicas_Implementação
Técnicas_Implementação
Wagner Zaparoli
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
saido_embalo1980
 
Resumo x86
Resumo x86Resumo x86
Gerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - CompiladoresGerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - Compiladores
Anderson Favaro
 
Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Luís Gustavo Martins
 
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdfparadigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
AndreiaCristinaFlore
 

Semelhante a Linguagem assembly (20)

Geração de código linguagem c
Geração de código   linguagem cGeração de código   linguagem c
Geração de código linguagem c
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Processo de Desenvolvimento de Software - Linguagens Compiladas x Interpretadas
Processo de Desenvolvimento de Software - Linguagens Compiladas x InterpretadasProcesso de Desenvolvimento de Software - Linguagens Compiladas x Interpretadas
Processo de Desenvolvimento de Software - Linguagens Compiladas x Interpretadas
 
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux SystemsLinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
 
Linguagem de Programação
Linguagem de ProgramaçãoLinguagem de Programação
Linguagem de Programação
 
Linguagem de programação
Linguagem de programaçãoLinguagem de programação
Linguagem de programação
 
Ac16 conjunto de instruções v2
Ac16   conjunto de instruções v2Ac16   conjunto de instruções v2
Ac16 conjunto de instruções v2
 
Webinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosWebinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcados
 
Conceitos Fundamentais de Programacao
Conceitos Fundamentais de ProgramacaoConceitos Fundamentais de Programacao
Conceitos Fundamentais de Programacao
 
Microcontroladores x microprocessadores
Microcontroladores x microprocessadoresMicrocontroladores x microprocessadores
Microcontroladores x microprocessadores
 
Aula 2 - Introducao e Algoritmos.ppt
Aula 2 - Introducao e Algoritmos.pptAula 2 - Introducao e Algoritmos.ppt
Aula 2 - Introducao e Algoritmos.ppt
 
ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES
ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORESARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES
ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES
 
10 apostila microcontroladores
10  apostila microcontroladores10  apostila microcontroladores
10 apostila microcontroladores
 
Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...
Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...
Desenvolva Sistemas Embutidos com Software Livre - Carlos A. M. dos Santos e ...
 
Técnicas_Implementação
Técnicas_ImplementaçãoTécnicas_Implementação
Técnicas_Implementação
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Resumo x86
Resumo x86Resumo x86
Resumo x86
 
Gerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - CompiladoresGerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - Compiladores
 
Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...
 
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdfparadigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
 

Linguagem assembly

  • 1. Software Básico nível de linguagem de montagem (assembly) Tanembaum, capítulo 7
  • 2. Software Básico - Linguagem Assembly 2 Linguagem de montagem (Assembly) • Abstração simbólica da linguagem de máquina • Traduzida pelo programa assembler • Mapeada diretamente em instruções de máquina • Pseudo-instruções e macros auxiliares ° Mnemônicos facilitam codificação • Símbolos e rótulos simplificam endereçamento
  • 3. Software Básico - Linguagem Assembly 3 Características • Linguagem assembly pura ° Cada comando corresponde a uma instrução de máquina ° Uso de nomes e endereços simbólicos ° Instruções mnemônicas: ADD, SUB ... • Acesso a todas as características do HW alvo ° Tudo que pode ser feito na máquina, pode ser feito em assembly (diferentemente da linguagem de alto nível) ° Ex: testar bit de vai-um • Restrita à família de processadores alvo ° Programa em linguagem de alto nível pode ser recompilado para outra máquina
  • 4. Software Básico - Linguagem Assembly 4 Por que Assembly? • Programar em assembly é difícil ° Demora mais pra escrever um programa ° Depuração e manutenção complicadas • Duas razões: ° Desempenho ° Acesso ao HW
  • 5. Software Básico - Linguagem Assembly 5 Desempenho • Em termos de tamanho: consumo de memória ° crítico para sistemas embutidos ° código em smart cards, telefones celulares • Em termos de velocidade ° Lei 90 – 10 (10% código : 90% do tempo de execução) ° Implementar partes críticas em assembly • drivers de dispositivos, • rotinas de BIOS • laços internos de aplicações com restrições de desempenho críticas
  • 6. Software Básico - Linguagem Assembly 6 Comparação entre programação em linguagens assembly e de alto nível Programadores-anos para produzir programa Tempo de execução (seg) Linguagem de alto nível 10 100 Linguagem de montagem 50 33 (= 100/3) Abordagem mista (antes do ajuste) 10 100 10% críticos 1 90 Outros 90% 9 10 Abordagem mista (após ajuste) 15 40 10% críticos 1+5 30 ( = 90/3) Outros 90% 9 10
  • 7. Software Básico - Linguagem Assembly 7 Outras experiências práticas • MULTICS: 1o SO de tempo compartilhado ° Função reescrita em 3 meses: • 26 vezes menor • 50 vezes mais rápida ° Função reescrita em 2 meses: • 20 vezes menor • 40 vezes mais rápida
  • 8. Software Básico - Linguagem Assembly 8 Acesso • Algumas tarefas exigem acesso direto ao HW ° Tratamento de interrupções do hardware ° Controladores de dispositivos (sistemas de tempo real) • Sistemas modernos (Linux) ° Acesso às funções do processador para troca de contexto ° Boot
  • 9. Software Básico - Linguagem Assembly 9 Motivações reavaliadas • Desempenho ° É importante poder escrever um bom código de linguagem de montagem para cenários críticos • Acesso – motivo mais importante ° Mesmo assim, apenas em casos extremos ° Uma linguagem como C dá bom acesso • Tamanho: às vezes código de montagem é única saída devido à escassez de memória
  • 10. Software Básico - Linguagem Assembly 10 Motivações reavaliadas • Compilador deve ou produzir saída para assembler ou ele mesmo tem que executar processo de montagem ° Alguém tem que escrever os compiladores • Estudo de arquiteturas ° Assembly está diretamente relacionada ao hardware ° Permite entender como a máquina realmente trabalha do ponto de vista do hardware
  • 11. Software Básico - Linguagem Assembly 11 Formato das Instruções • Está diretamente associado ao hardware ° Porém, possuem características comuns • Instruções Assembly ° Representam os comandos da máquina ° Usualmente, quatro campos • Label, operação, operandos, comentários • Pseudo-instruções: comandos para o assembler ° Usadas para reservar espaço para dados ° Apenas tipos básicos
  • 12. Software Básico - Linguagem Assembly 12 Exemplos Pentium 4 Motorola 680x0 Sparc DD DD DD
  • 13. Software Básico - Linguagem Assembly 13 Campo de label • Usado para atribuir um nome simbólico para uma variável ou endereço (para desvio) ° Campo opcional • Formato ° Posição fixa ou separador ° Tamanho fixo (6-8 caracteres) ou variável
  • 14. Software Básico - Linguagem Assembly 14 Campo de operação • Representações simbólicas das instruções do hardware ° Critério de quem fez o montador • Intel: MOV • Motorola: MOVE • Sun: ST e LD ° Variantes em função do tamanho do dado • Motorola: MOVE.L / MOVE.W / MOVE.B • Intel: EAX / AX / AH ou AL
  • 15. Software Básico - Linguagem Assembly 15 Campo de operandos • Especifica os alvos das operações ° Endereços: instruções de desvio ° Variáveis • posição de memória sendo acessada • Assemblers variam em como reservam espaço para dados (DD na Intel vs. .WORD na Sparc) ° Constantes • valores para operações aritméticas (endereçamento imediato) ° Registradores • variáveis locais do processador
  • 16. Software Básico - Linguagem Assembly 16 Campo de comentário • Usado para acrescentar informações relevantes ao programa ° Facilitar a compreensão do mesmo ° Programa assembly é praticamente incompreensível sem comentários • Formato geral ° Indicador de início (; ou !) ° Até o final da linha
  • 17. Software Básico - Linguagem Assembly 17 Pseudo-instruções • Comandos para o montador, não instruções ° Diretivas de assember • Relacionadas com o modo de operação da arquitetura e do montador ° Alocação de variáveis • ex: DD no Pentium, .WORD no SPARC ° Criação de macros e subrotinas ° Definição de escopo de uma macro / subrotina / variável • PUBLIC / EXTERN (local por default) ° Definição de segmentos ° Constantes • Veja exemplos do assember MASM do Pentium 4 (Tabela 7.2)
  • 18. Software Básico - Linguagem Assembly 18 Pseudo-instruções: • Exemplos do MASM ° Definir um novo símbolo igual a uma expressão dada BASE EQU 2000 LIMIT EQU 4 * BASE + 2000 ° Alocar e definir armazenamento para um ou mais bytes ou palavras (16 bits) ou double (32 bits) TABLE DB 11, 23, 49 Aloca espaço para 3 bytes e os inicializa com 11, 23 e 49, respectivalmente Define símbolo TABLE e o ajusta com o endereço onde 11 é armazenado
  • 19. Software Básico - Linguagem Assembly 19 Definição de Macro • Bloco de código de uso repetitivo • Ao invés de realmente reescrevê-lo, define-se a macro ° Identifica as instruções a serem repetidas ° Código é expandido em cada ocorrência • Mais eficiente que chamada de procedimento quando conjunto de instruções é pequeno mas frequente
  • 20. Software Básico - Linguagem Assembly 20 Definição, Chamada e expansão • São necessários: ° Cabeçalho com o nome da macro; ° Bloco de instruções; ° Pseudo-instrução indicando o término da macro. • O montador salva a macro em uma tabela e quando esta é chamada, substitui a chamada pelo código. ° Chamada de macro: utilização de um nome de macro como opcode ° Expansão de macro: substituição pelo corpo da macro
  • 21. Software Básico - Linguagem Assembly 21 Exemplo (Pentium 4)
  • 22. Software Básico - Linguagem Assembly 22 Chamada e expansão • A expansão ocorre durante o processo de montagem e não durante a execução do programa. • O código gerado pelo exemplo (a) é o mesmo do gerado pelo exemplo (b). • Assembler efetuado em 2 passos (conceitualmente): ° As definições de macro são salvas e as chamadas são expandidas gerando um novo código em linguagem assembly ° Código é processado pelo assembler como se fosse o original.
  • 23. Software Básico - Linguagem Assembly 23 Macros com parâmetros
  • 24. Software Básico - Linguagem Assembly 24 Subrotina • É uma chamada a procedimento. • Onde houver uma chamada, o procedimento é invocado separadamente e ao seu término, retorna para o programa que originou esta chamada. • Ocorre um desvio no código.
  • 25. Software Básico - Linguagem Assembly 25 Macro x Subrotina Programa SubrotinaMacro
  • 26. Software Básico - Linguagem Assembly 26 Tradução completa • Constituída de duas fases (duas passagens): 1. Montagem dos procedimentos a partir dos arquivos com código em assembly. 2. Ligação dos módulos-objetos resultantes. • Ao final, teremos um programa binário executável.
  • 27. Software Básico - Linguagem Assembly 27 Tradução completa Fonte do procedimento 1 Fonte do procedimento 2 Fonte do procedimento 3 Montador Módulo objeto 1 Módulo objeto 2 Módulo objeto 3 Ligador (linker) Programa executável em binário
  • 28. Software Básico - Linguagem Assembly 28 O processo de montagem Fonte do procedimento 1 Fonte do procedimento 2 Fonte do procedimento 3 Montador Módulo objeto 1 Módulo objeto 2 Módulo objeto 3 • Entrada: arquivos com código assembly • Saída: linguagem de máquina “anotada” ° Referências a outros módulos ° Reservas de espaço
  • 29. Software Básico - Linguagem Assembly 29 Montagem em duas passagens • Tradução imediata nem sempre é possível ° Problema da referência antecipada: • Ex: desvio para endereço L no início, mas L definido no final • Primeira passagem: ° Contagem do espaço ocupado por cada instrução ° Construção da tabela de símbolos (labels) ° Salva definição de macros e expande chamadas à medida que são encontradas • Segunda passagem: ° Geração do programa objeto para o Linker ° Resolução de símbolos e referências
  • 30. Software Básico - Linguagem Assembly 30 Montagem em duas passagens • Duas alternativas: ° Alternativa 1: ler o programa de entrada 2 vezes. • armazenar os símbolos em uma tabela • traduzir o programa • solução simples ° Alternativa 2: ler o programa de entrada 1 vez • gerar código intermediário e armazenar em memória ° remover comentários ° manter somente o essencial • pode ser mais eficiente (memória X tempo de E/S)
  • 31. Software Básico - Linguagem Assembly 31 Passo 1 • Principal papel: montar tabela de símbolos ° Símbolo: label ou valor ao qual é atribuído nome simbólico ° ex: BUFSIZE EQU 8192 • Contabiliza espaço para instruções ° ILC – Instruction Location Counter • Incrementado do tamanho de cada instrução traduzida • Usado para definir endereços de instruções com label • Iniciado com 0 e incrementado do comprimento da instrução para cada instrução processada • Memoriza localização dos símbolos encontrados durante o processo: tabela
  • 32. Software Básico - Linguagem Assembly 32 Exemplo Rótulo Opcode Operandos Comentários Comprimento ILC MARIA: MOV EAX,I EAX=I 5 100 MOV EBX,J EBX=J 6 105 ROBERTA: MOV ECX,K ECX=K 6 111 IMUL EAX,EAX EAX = I*I 2 117 IMUL EBX,EBX EBX = J*J 3 119 IMUL ECX,ECX ECX = K*K 3 122 MARILYN: ADD EAX,EBX EAX = I*I + J*J 2 125 ADD EAX,ECX EAX = I*I + J*J + K*K 2 127 STEPHANY: JMP DONE Branch to DONE 5 129
  • 33. Software Básico - Linguagem Assembly 33 Passo 1 • Usa no mínimo 3 tabelas internas ° Tabela de símbolos ° Tabela de pseudo-instruções ° Tabela de opcodes • Opcional: tabela de literais ° Quando não tem suporte para operandos imediatos ° Constantes (ex: ´5´, ´9´); ° Após passo 1: tabela ordenada e duplicatas removidas
  • 34. Software Básico - Linguagem Assembly 34 Tabela de símbolos • Criada no passo 1 para utilização no passo 2 • Informações coletadas sobre símbolos ° Valor (endereço ou valor numérico) ° Tamanho do campo de dados ° Informação de relocação: o símbolo muda de valor se o programa for carregado em um endereço diferente? ° Regras de escopo: acessível ou não fora do procedimento? Símbolo Valor Outras MARIA 100 ROBERTA 111 MARILYN 125 STEPHANY 129
  • 35. Software Básico - Linguagem Assembly 35 Tabela de símbolos • Várias maneiras de organizar a tabela ° Memória associativa: par (símbolo,valor): • Forma mais simples: vetor de registros • Forma mais esperta: tabela hash
  • 36. Software Básico - Linguagem Assembly 36 Tabela de opcodes • Uma entrada para cada opcode simbólico na linguagem assembly ° opcode simbólico, ° operandos, ° valor numérico do opcode, ° comprimento ° classe da instrução ( número e tipo dos operandos) Opcode 1º Operando 2º Operando Opcode (hexa) Comprimento da instrução Classe AAA - - 37 1 6 ADD EAX immed32 05 5 4 ADD reg reg 01 2 19 AND EAX immed32 25 5 4 AND reg reg 21 2 19
  • 37. Software Básico - Linguagem Assembly 37 Passo 1 Leitura Label Pesquisa tabela de pseudo-instruções Inicialização Pesquisa tabela de opcodes Obtem tamanho da instrução Checa e processa literais (inserir na tabela) Atualiza ILC Determinar espaço p/ dados Tipo ? Executar ação apropriada Guardar label e ILC na tabela de símbolos Finalizar passo 1 e ir ao passo 2 sim não encontrado END outrosDD / DB / DWnão encontrado
  • 38. Software Básico - Linguagem Assembly 38 Passo 2 • Tradução propriamente dita do programa ° Produz código ° Produz também informação extra que o ligador precisa pra ligar procedimentos montados em tempos diferentes • Leitura sequencial do código ° Acessos às tabelas de instruções e de símbolos ° Geração de código binário • Tratamento de erros ° Símbolos desconhecidos ou definidos múltiplas vezes ° Opcode fornecido com # insuficiente/excessivo de operandos ° Declaração END faltante, etc...
  • 39. Software Básico - Linguagem Assembly 39 Passo 2 leitura pesquisa tabela de pseudos inicialização pesquisa tabela de opcode avaliar tipo da instrução montar a instrução imprimir instrução e informações fazer conversão de constantes tipo ? executar ação apropriada finalizar o passo 2 encontrado END outrosnão encontrado obter tamanho, tipo e código da instrução Determinar espaço p/ dados atualizar ILC
  • 40. Software Básico - Linguagem Assembly 40 Tradução completa Fonte do procedimento 1 Fonte do procedimento 2 Fonte do procedimento 3 Montador Módulo objeto 1 Módulo objeto 2 Módulo objeto 3 Ligador (linker) Programa executável em binário
  • 41. Software Básico - Linguagem Assembly 41 Ligação dos módulos Módulo objeto 1 Módulo objeto 2 Módulo objeto 3 Ligador (linker) Programa executável em binário • Para simplificar o desenvolvimento, cada programa pode ser dividido em módulos, cada um com alguns procedimentos. • Para um programa poder ser executado, todos os procedimentos devem ser ligados.
  • 42. Software Básico - Linguagem Assembly 42 Ligador • Funções: ° Ligação: une os procedimentos e resolve as referências entre os módulos. ° Alocação: separa espaço na memória para o programa. ° Relocação: ajusta os endereços que dependem da posição do programa na memória.
  • 43. Software Básico - Linguagem Assembly 43 Exemplo de ligação 600 500 400 300 200 100 0 CALL C MOVE Q TO X BRANCH TO 300 Object module B CALL D MOVE R TO X BRANCH TO 200 Object module C 500 400 300 200 100 0 CALL B MOVE P TO X BRANCH TO 200 Object module A 400 300 200 100 0 MOVE S TO X BRANCH TO 200 Object module D 300 200 100 0 Módulos isolados:
  • 44. Software Básico - Linguagem Assembly 44 Exemplo de ligação CALL C MOVE Q TO X BRANCH TO 300 CALL D MOVE R TO X BRANCH TO 200 CALL B MOVE P TO X BRANCH TO 200 MOVE S TO X BRANCH TO 200 Object module C Object module B Object module D Object module A Para executar o programa, o ligador traz os módulos para a memória principal para formar a imagem do programa binário executável. 1900 1800 1700 1600 1500 1400 1300 1200 1100 1000 900 800 700 600 500 400 300 200 100 0 O que acontece se o programa for executado assim? Seção da memória com início em 0 é usada para vetores de interrupção, comunicação com sistema operacional, etc
  • 45. Software Básico - Linguagem Assembly 45 Problemas tratados pelo ligador • Problema da relocação: todas as instruções de referência à memória falhariam pois contém endereços determinados assumindo cada módulo com um espaço de endereçamento separado ° Se espaço de endereçamento segmentado em tese não haveria problema • Família Pentium tem suporte em hardware • Porém OS/2 é único SO que tem suporte a segmentação • Problema de referência externa: assembler não tem como saber endereço de um procedimento externo (CALL B), pois este só é conhecido em tempo de ligação
  • 46. Software Básico - Linguagem Assembly 46 Fusão dos espaços de endereços dos módulos objetos em um único espaço 1. Constrói tabela com módulos objetos e seus comprimentos 2. Com base na tabela, designa um endereço de início a cada módulo objeto 3. Para cada instrução com referência à memória, adiciona ao endereço sendo referenciado uma constante de relocação iugal ao endereço de início do módulo em questão 4. Para cada instrução que referencia procedimentos externos, insere os endereços destes procedimentos no lugar adequado
  • 47. Software Básico - Linguagem Assembly 47 CALL 1100 MOVE Q TO X BRANCH TO 800 CALL 1600 MOVE R TO X BRANCH TO 1300 CALL 500 MOVE P TO X BRANCH TO 300 MOVE S TO X BRANCH TO 1800 Object module C 1900 1800 1700 1600 1500 1400 1300 1200 1100 1000 900 800 700 600 500 400 300 200 100 0 Object module B Object module D Object module A Módulos relocados: Exemplo de ligação
  • 48. Software Básico - Linguagem Assembly 48 Estrutura de módulos objetos • Identificação: nome e tamanho das partes do módulo • Pontos de entrada (nome e endereço) ° Símbolos internos que podem ser referenciados de outros módulos- PUBLIC • Tabelas de referências externas ° Símbolos referenciados pelo módulo, ausentes do mesmo - EXTERN • Instruções, variáveis, constantes (código objeto) ° Única parte carregada em memória ° Outras partes é para uso do ligador • Dicionário para relocação: contém endereços que devem ser relocados (quais instruções na parte 4 precisam ser relocadas) • Fim de módulo: marcação especial e (talvez) soma de verificação Tabela de referências externas Fim do módulo Dicionário de símbolos para relocação Instruções de máquina e constantes Tabela de pontos de entrada Identificação do módulo
  • 49. Software Básico - Linguagem Assembly 49 Tarefas do Ligador • Maioria dos ligadores requer duas passagens • Primeira passagem: ° Colocação de todos os módulos na memória ° Contabilização dos espaços ocupados ° Determinação dos endereços exportados ° Verificação de referências externas ° Constrói tabelas de nomes, comprimentos dos módulos, tabelas com pontos de entrada e referências externas • Segunda passagem: ° Relocação: Alteração de endereços em cada módulo ° Ligação efetiva
  • 50. Software Básico - Linguagem Assembly 50 Não está tudo resolvido ainda.... • Um programa pode ser carregado/descarregado da memória principal muitas vezes durante a execução ° Paginação: partes do programa (páginas) podem ser retirados da memória principal para serem recarregados depois • O que acontece com as referências à memória?
  • 51. Software Básico - Linguagem Assembly 51 Tempo de vínculação • Momento em que é determinado o endereço de memória principal correspondente a um símbolo • Se uma instrução com endereço de memória for movida após a vinculação, ela será incorreta • Dois problemas: ° Mapeamento de símbolo para endereço virtual ° Mapeamento de endereço virtual para endereço físico
  • 52. Software Básico - Linguagem Assembly 52 Oportunidades para vinculação • Durante a escrita do programa • Durante a tradução assembly • Durante a ligação (geração do executável) • Durante a carga do programa na memória • Quando um registrador base é carregado • Quando a instrução com o endereço é executada
  • 53. Software Básico - Linguagem Assembly 53 Relocação dinâmica • Programas podem mudam de lugar na memória ° Sistemas de espaço de endereçamento único • Endereços internos podem ser alterados ° Tabelas de tradução (paginação) ° Registrador de relocação (endereços relativos) • Contém endereço de memória física do início do programa • Hardware adiciona endereço de relocação a todos endereços de memória antes de enviá-los a memória • Atualizado toda vez que programa recarregado ° Acessos relativos ao PC • Memória virtual acaba com esse problema! ° Ligador responsável pelo mapeamnto símbolo : endereço virtual
  • 54. Software Básico - Linguagem Assembly 54 Ligação Dinâmica • Ligação de um módulo somente quando um de seus procedimentos é chamado pela primeira vez ° Evita carregar em memória, módulos ue poderão não ser utilizados (procedimentos raramente chamados) • Pioneiro: MULTICS • Outros ° DLL no Windows: economia de memória pois código é compartilhado entre aplicações ° Bibliotecas compartilhadas no Unix • Ex: biblioteca padrão do C
  • 55. Software Básico - Linguagem Assembly 55 MULTICS • Cada programa tem um segmento de ligação: tabela com par (nome, endereço virtual) para cada procedimento ° Os endereços virtuais são iniciados com valor inválido • Instruções CALL apontam para entrada correspondente na tabela • Quando a primeira chamada a um procedimento externo é executada: ° Acesso a endereço inválido causa exceção para ligador dinâmico ° Módulo é carregado e seu endereço virtual é atualizado na tabela ° Chamadas subsequentes funcionam normalmente
  • 56. Software Básico - Linguagem Assembly 56 Resolução de endereços • Escrita do programa: endereços diretos • Tradução do programa: resolução de nomes • Durante a ligação: referências externas • No momento da carga: relocação • Na carga de um registrador de indexação • Sob controle do sistema: relocação dinâmica • Na execução de uma instrução: ref. relativas • Carga e ligação sob demanda: DLLs