Buscar

Linguagem de máquina e 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 35 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 35 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 35 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 MÁQUINA LINGUAGEM DE MÁQUINA 
E LINGUAGEM ASSEMBLYE LINGUAGEM ASSEMBLY
77oo P. Engenharia de Computação P. Engenharia de Computação
FACIT / 2018FACIT / 2018
LABORATÓRIO DE LABORATÓRIO DE 
SOFTWARE BÁSICOSOFTWARE BÁSICO
Prof. Maurílio J. InácioProf. Maurílio J. Inácio
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Introdução
 Diferente da linguagem de máquina, a linguagem 
de montagem (ou assembly) é implementada 
por tradução e não por interpretação.
 Os tradutores convertem um programa escrito 
em linguagem-fonte para uma linguagem-
alvo (ou linguagem-objeto).
 Tradução é usada quando há um processador 
(de hardware ou de software) disponível para a 
linguagem-fonte, mas não para a linguagem-alvo.
2
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Introdução
3
Programa escrito 
em linguagem-
fonte
(programa fonte)
Programa escrito 
em linguagem-
alvo
(programa objeto)
Tradução Execução
Programa escrito 
em linguagem-
fonte
(programa fonte)
Interpretação e execução
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Introdução
 Tradutor:
Vantagem: execução mais rápida.
Desvantagem: programas fonte maiores e mais 
rígidos.
 Interpretador:
Vantagem: programas fonte menores e mais 
fexíveis.
Desvantagem: execução mais lenta.
 De modo geral, os tradutores podem ser divididos 
em dois grupos, dependendo da relação existente 
entre a linguagem-fonte e a linguagem-alvo: 
montadores e compiladores. 4
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Introdução
 Montador ou assembler é utilizado quando a 
linguagem-fonte (chamada linguagem de 
montagem ou assembly)  for uma 
representação simbólica para uma linguagem de 
máquina.
 Compilador é utilizado quando a linguagem-
fonte for uma linguagem de alto nível (Java, C, 
etc.) e a linguagem-alvo for uma linguagem de 
máquina ou uma representação simbólica dessa 
linguagem.
 É possível na compilação de um programa escrito 
em linguagem C, por exemplo, optar por gerar o 
código de máquina e também o código do 
montador (assembler).
5
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Linguagem de montagem
 Uma linguagem de montagem pura é aquela na 
qual cada comando produz, exatamente, uma 
instrução de máquina (correspondência um-para-
um).
 Um programa em linguagem de montagem de n 
linhas produzirá um programa de linguagem de 
máquina de n palavras.
 É mais fácil (?) programar em linguagem de 
montagem do que em linguagem de máquina.
 Na linguagem de montagem usam-se nomes 
simbólicos para comandos e endereços (ADD, 
MOV, L1, etc.) ao invés de códigos numéricos 
(binário, octal ou hexadecimal) usados na 
linguagem de máquina.
6
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Linguagem de montagem
 O programador da linguagem de montagem, e 
também o de linguagem de máquina, tem acesso 
a todas as características e todas as instruções 
da máquina-alvo. Esta é uma vantagem em 
relação a programação em alto nível.
 Algumas linguagens para programação de 
sistemas, como a linguagem C, estão numa 
fronteira entre as linguagens de alto nível e as 
linguagens de baixo nível. Seus programadores 
programam em alto nível mas têm acesso a 
recursos de baixo nível da máquina.
 
7
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Linguagem de montagem
 Um programa em linguagem de montagem só 
pode rodar em uma determinada família de 
máquinas, enquanto um programa de alto nível 
tem potencial para rodar em diversas máquinas 
com arquiteturas diferentes. 
8
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Programação em linguagem de montagem
 Diferenças em programar  em linguagem de 
montagem, em relação a programar em 
linguagem de alto nível:
 é uma tarefa mais difícil.
 consome muito mais tempo.
 tem depuração mais demorada.
 a manutenção também é mais difícil.
 Por que alguém programaria em linguagem de 
montagem? Há duas razões possíveis ...
 Por razão de performance:  
 produz-se código de máquina muito menor e 
muito mais rápido. 9
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Programação em linguagem de montagem
 a maioria das aplicações embutidas, como 
código de cartões inteligente (smart cards), 
código de um telefone celular, drivers de 
dispositivos, rotinas de BIOS, laços internos de 
aplicações de desempenho critico, exigem 
velocidade de processamento.
 Por razão de acesso aos recursos da máquina
 alguns procedimentos precisam de acesso 
completo ao hardware.
 por exemplo, as rotinas do sistema operacional 
para tratamento das interrupções e exceções de 
baixo nível, rotinas dos controladores de 
dispositivos dos sistemas embutidos que rodam 
em tempo real caem nessa categoria.
10
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Programação em linguagem de montagem
 Existe uma solução híbrida para programação 
conhecida como sintonia ou ajuste:
 desenvolve-se o programa em linguagem de 
alto nível (tarefa mais rápida e simples).
 depois otimiza-se o código re-escrevendo os 
trechos de programas que consomem mais tempo 
de processamento em linguagem de montagem 
(o que aumenta a efciência do programa). Isto 
requer um estudo prévio dos tempos gastos no 
processamento do programa.
11
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Programação em linguagem de montagem
12
- Comparação entre programação em linguagem de montagem e 
linguagem de alto nível
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Programação em linguagem de montagem
 Além da efciência e acesso a recursos de 
hardware, o uso da linguagem de montagem é 
importante para:
 enfrentar problemas de falta de memória em 
dispositivos embarcados.
 escrever compiladores em conjunto com seus 
montadores.
 se conhecer melhor uma determinada máquina.
 
"Para estudantes de arquitetura de computadores, 
escrever um pouco de código em linguagem de 
montagem é a única maneira de ter uma ideia de 
como realmente são as máquinas no nível da 
arquitetura” (Tanenbaum, 2007).
13
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Formato de declarações em linguagem de 
montagem
 Linguagens de montagens para máquinas 
diferentes e níveis diferentes são razoavelmente 
parecidas.
 Declarações em linguagem de montagem têm, 
geralmente, quatro partes:
 um campo para rótulo ou label.
 um campo de código de operação ou opcode.
 um campo de operandos.
 um campo de comentários.
14
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Formato de declarações em linguagem de 
montagem
15
- Fragmento de programa em linguagem de montagem para o Pentium 4.
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Formato de declarações em linguagem de 
montagem
16
- Fragmento de programa em linguagem de montagem para o Motorola 
680x0.
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Formato de declarações em linguagem de 
montagem
17- Fragmento de programa em linguagem de montagem para o 
UltraSparc.
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Formato de declarações em linguagem de 
montagem
 Os fragmentos de programa anteriores têm 4 
labels: Fórmula, I, J e N.
 Labels tem a função de permitir o uso de  nomes 
simbólicos para endereços de memória.
 São necessários em alguns comandos 
executáveis, porque esses comandos podem ser o 
alvo de desvios e também necessários para 
palavras de dados, para que os dados lá 
armazenados possam ser acessíveis por meio de 
nome simbólico.
 Cada máquina tem, obrigatoriamente, um 
conjunto de registradores, que recebem nomes 
muito diferentes.
18
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Formato de declarações em linguagem de 
montagem
 Exemplos:
 Pentium 4: EAX, EBX, ECX.
 Motorola: D0, D1, D2.
 UltraSparc: %R1, %R2.
 O campo de comentário não tem infuência 
alguma no processo de montagem ou no processo 
de geração do programa (usado apenas para fns 
de documentação).
19
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Pseudo-instruções
 Além de especifcar as instruções de máquina a 
serem executadas, um programa escrito em 
linguagem de montagem também pode contercomandos para o próprio montador.
 Essas instruções podem, por exemplo, solicitar 
que ele reserve um espaço de memória ou faça 
que a listagem que estiver sendo impressa salte 
para uma nova página. Esses comandos  para o 
próprio montador são conhecidos como pseudo-
instruções ou diretivas do assembler.
 Pseudo-instruções são, geralmente, específcas 
em cada montador.
20
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Pseudo-instruções
 Exemplo: Microsoft MASM (assembler da Intel 
para a família Pentium).
 As pseudo-instruções não são ditadas pela 
arquitetura para a qual o montador se destina, e 
sim pelo gosto do escritor do montador.
21
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Pseudo-instruções
22
- Algumas pseudo-instruções disponíveis no MASM.
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Pseudo-instruções
23
- Algumas pseudo-instruções disponíveis no MASM.
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Pseudo-instruções
 Exemplo de usos de pseudo-instruções:
WORDSIZE EQU 16
IF WORDSIZE GT 16
WSIZE: DD 32
ELSE
WSIZE: DD 16
ENDIF
24
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Macros
 Programadores de linguagem de montagem 
frequentemente precisam repetir sequências de 
instruções várias vezes dentro de um programa.
 Uma maneira óbvia de fazer isso é re-escrever 
as instruções onde forem necessárias.
 Quando se faz necessário repetir várias vezes 
uma mesma sequência de instruções no programa 
de montagem, uma alternativa é usar 
uma macro.
25
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Macros
26
- Código de linguagem de montagem sem macro (a) e com macro (b).
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Macros
 Entende-se por defnição de macro a maneira 
de se atribuir um nome a uma parte do código de 
um programa escrito na linguagem de montagem
 Após a defnição de uma macro, o programador 
pode escrever o nome da macro em vez das 
instruções que a compõem. 
 Assim, uma macro nada mais é do que uma 
abreviatura para uma parte do código.
27
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Macros
 Embora montadores diferentes tenham notações 
diferentes para defnir macros, em geral, uma 
macro contém sempre:
 Um cabeçalho de macro informando o nome da 
macro.
 Um texto, englobando as instruções do corpo da 
macro.
 Uma pseudo-instrução (por exemplo: ENDM) 
para marcar o fm da macro.
 O uso do nome da macro como se fosse um 
código de operação é conhecido como chamada 
da macro.
 A substituição pelo corpo da macro é 
chamada expansão da macro.
28
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Macros
 A expansão ocorre durante o processo de 
montagem e não durante a execução do 
programa.
 Chamadas de macro não podem ser confundidas 
com chamadas procedimentos (ou chamada de 
funções).
 A diferença básica é que uma chamada de macro 
é uma instrução para o montador substituir o 
nome da macro pelo corpo da macro.
 Uma chamada de procedimento é uma instrução 
de máquina que é inserida no programa objeto e 
que mais tarde será executada para chamar o 
procedimento.
29
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Macros
30
- Comparação entre chamadas de macro e chamadas de 
procedimento.
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Macros
 Os montadores de macro tratam a questão de 
sequências de instruções quase idênticas 
permitindo que a defnição de macro forneçam:
parâmetros formais.
parâmetros reais.
 Quando uma macro é expandida, cada parâmetro 
formal que parece no corpo da macro é 
substituído pelo correspondente parâmetro real.
31
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Macros
32
- Sequência de declarações quase idênticas. (a) sem macro (b) com 
macro.
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Características avançadas
 Um problema que ocorre com todos os 
montadores que suportam macros é a 
duplicação de rótulos (labels).
 Se a macro é chamada duas ou mais vezes, o 
label será duplicado causando um erro de 
montagem.
 Uma solução é que fazer com que o programador 
forneça um nome do label diferente em cada 
chamada, como um parâmetro.
 Outra solução é permitir a declaração do label 
como sendo LOCAL e que o montador gere 
automaticamente um novo label a cada expansão.
 Alguns montadores têm uma regra que impõe que 
labels numéricos sejam automaticamente locais.
33
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Características avançadas
 O MASM e grande parte de outros montadores 
permitem que macros sejam defnidas dentro de 
outras macros, o que é muito útil em combinação 
com montagem condicional. Exemplo:
M1 MACRO
IF WORDSIZE GT 16
M2 MACRO
...
ENDM
ELSE
M3 MACRO
...
ENDM
ENDIF
 ENDM
34
LINGUAGEM DE MÁQUINA E LINGUAGEM 
ASSEMBLY
 Implementação de um processador de macros
 Para implementar a facilidade de macro, um 
montador deve ser capaz de executar duas 
funções:
Salvar as defnições das macros, geralmente 
usando tabelas que guardam os nomes, os 
parâmetros formais e o corpo das macros.
Expandir as chamadas das macros, sempre 
que o montador encontra uma defnição de 
macro ele lê o corpo da macro e insere essas 
instruções, com parâmetros formais trocados 
pelos reais, no programa em linguagem de 
montagem.
35
	Slide 1
	Slide 2
	Slide 3
	Slide 4
	Slide 5
	Slide 6
	Slide 7
	Slide 8
	Slide 9
	Slide 10
	Slide 11
	Slide 12
	Slide 13
	Slide 14
	Slide 15
	Slide 16
	Slide 17
	Slide 18
	Slide 19
	Slide 20
	Slide 21
	Slide 22
	Slide 23
	Slide 24
	Slide 25
	Slide 26
	Slide 27
	Slide 28
	Slide 29
	Slide 30
	Slide 31
	Slide 32
	Slide 33
	Slide 34
	Slide 35

Continue navegando