|
|
1.
Nível
de Linguagem de Montagem (CAP. 7 - TANENBAUM)
O nível de linguagem de montagem (linguagem assembly) difere dos outros níveis de microprogramação por ser implementado por tradução e não por interpretação.
Os programas que fazem a tradução são chamados de TRADUTORES.
Os
programas ou hardware que executa a interpretação são chamados de INTERPRETADORES.
2.
TRADUÇÃO X INTERPRETAÇÃO
Ø TRADUÇÃO: Na tradução, o programa fonte
não é executado diretamente. Ao invés disso, ele é convertido em programa
objeto e só então executado. Na tradução, existem 2 passos distintos: (1)
Geração do programa objeto; (2) Execução do programa gerado.
Note que o segundo passo não
pode começar sem que o primeiro termine.
Vantagens da Tradução: Execução mais rápida! Por esse
motivo, o nível de linguagem de
montagem é implementado por tradução.
Ø INTERPRETAÇÃO: Existe apenas um passo:
Executar o programa fonte.
Na interpretação não existe
a geração de um módulo ou programa objeto.
Vantagens da Interpretação:
Programas menores e mais flexíveis.
OBS.: Após a tradução, apenas 3 programas podem ser
encontrados em memória: o microprograma, o programa objeto e o Sistema
Operacional. O programa fonte já foi carregado, traduzido e já pode estar
liberado da memória.
3.
Tradutores
Os tradutores são programas que convertem
o programa do usuário escrito em uma linguagem para uma outra linguagem. A
linguagem na qual o programa é escrito é denominada de linguagem fonte e a linguagem
para a qual o programa é convertido é denominada de linguagem alvo.
O objetivo dos tradutores é disponibilizar
o programa em uma linguagem aceita pelo processador (hardware ou um interpretador). Se estiver disponível um
processador, que possa executar diretamente programas escritos na linguagem
fonte, não há necessidade de traduzir o programa fonte para a linguagem alvo.
A
execução do programa objeto deve
produzir os mesmos resultados que a execução do programa fonte daria se
houvesse um processador disponível para ele.
Os tradutores podem ser mais ou menos divididos em dois grupos,
dependendo da sua relação com a linguagem fonte:
Ø
MONTADORES: Quando a linguagem fonte é
essencialmente uma representação simbólica para a linguagem de máquina (ex. assembly). A linguagem fonte, nesses
casos, é denominada de linguagem de
montagem.
Ø COMPILADORES: Quando a linguagem fonte é uma linguagem orientada para problemas,
como o Pascal, C, etc.
OBS.: As duas classes de tradutores podem gerar linguagem numérica de máquina. O
compilador pode gerar tanto linguagem numérica de máquina quanto linguagem
simbólica, dependendo da implementação do mesmo.
4. MONTADORES
Um programa em linguagem
assembly é preparado para execução em
3 etapas: montagem, ligação e carregamento (veja a figura abaixo).
Ø MONTAGEM: um programa chamado montador (assembler) traduz o programa descrito
na linguagem simbólica (assembly) para o código binário do processador onde o
programa deverá ser executado. Este código binário é denominado módulo objeto,
e além do código de máquina contém também informação simbólica.
Ø LIGAÇÃO: Quando o programa está dividido em mais de um módulo (isto é, o
programa assembly completo está em diversos arquivos), a etapa de ligação é
necessária. Esta segunda etapa é executada pelo programa ligador, que conecta os distintos módulos objetos gerados em um
único módulo para execução. O resultado desta fase é um módulo de carregamento,
que contém o código de máquina combinado e informação de relocação.
Ø CARREGAMENTO: Finalmente, o programa carregador aloca o módulo de carregamento à
memória primária do computador, onde o programa pode ser executado, e inicia a
sua execução.
Um montador é um programa
cujos dados de entrada são seqüências de caracteres que constituem o programa
assembly (código fonte) e cujo resultado é um conjunto de palavras de máquina
(bits) (código objeto). Montadores traduzem os programas em assembly para um ou
mais segmentos[1]
de código objeto em linguagem de máquina.
O principal papel do montador é traduzir automaticamente os códigos
em linguagem simbólica para códigos de máquina, em formato binário. As
instruções de máquina são compostas basicamente de três campos:
Ø
campo
de código de operação;
Ø
campo
de modo de endereçamento; e
Ø
campo
de endereços/operandos.
[1] Consideramos como um segmento um conjunto de instruções que ocupa sempre um espaço contíguo na memória principal. O seu endereço de início é denominado origem do segmento.