Vous êtes sur la page 1sur 32

INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo

LINGUAGEM DE MONTAGEM

LINGUAGEM DE MONTAGEM 1/32


INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
INTRODUÇÃO A LINGUAGEM DE MONTAGEM
● TRADUTOR: Programa que converte um programa de usuário
escrito em uma linguagem para outra linguagem.
● LINGUAGEM-FONTE: Linguagem na qual o programa foi
originalmente escrito.
● LINGUAGEM-OBJETO:Linguagem para a qual a linguagem-fonte

será traduzida.
● O método de Tradução é utilizado quando o processador
disponível (hardware ou software) pode executar programas na
linguagem-objeto, mas não na linguagem-fonte.
● Diferença entre Tradução e Interpretação:

● Na tradução: o programa é primeiro convertido na linguagem-

objeto e depois executado. Dois passos distintos e não


simultâneos.
● Na interpretação: o programa é executado diretamente a partir

da linguagem-fonte.
LINGUAGEM DE MONTAGEM 2/32
INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
INTRODUÇÃO A LINGUAGEM DE MONTAGEM
● Durante o processo de execução de um programa-objeto existem
três programa carregados na memória:
● o programa-objeto;

● o sistema operacional; e

● o microprograma, caso a máquina seja microprogramada.

● Todas as evidências do programa-fonte desaparecem.

●De acordo com a relação entre a linguagem-fonte e a linguagem-


objeto, os tradutores podem ser classificados em:
● Montador: quando a linguagem-fonte é apenas uma
representação simbólica da linguagem de máquina;
● Compilador: quando a linguagem-fonte for uma linguagem de

alto nível (C, Pascal, etc...) e a linguagem de máquina for a


linguagem-objeto.
LINGUAGEM DE MONTAGEM 3/32
INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
O QUE É LINGUAGEM DE MONTAGEM?
● É aquela na qual cada comando do programa-fonte, produz
exatamente uma instrução de máquina no programa-objeto.
● Mantém correspondência um-para-um entre as instruções de

máquina e os comando de um programa escrito na linguagem de


montagem.
● É mais simples programar em linguagem de montagem do que em

linguagem de máquina.
● É muito mais simples lembrar dos mnemônicos da linguagem do

que os códigos numéricos de cada instrução de máquina.


● Na linguagem de montagem é possível atribuir nomes simbólicos

para variáveis e endereços de memória.


● A linguagem de máquina dá acesso direto a todo o hardware, o

que não é totalmente possível em linguagens de alto nível.


● A linguagem de montagem só pode rodar uma família de
máquinas; a linguagem de alto nível pode rodar qualquer máquina.
LINGUAGEM DE MONTAGEM 4/32
INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
POR QUE USAR LINGUAGEM DE MONTAGEM?
● Desvantagens:

● Não é fácil programar;

● Consome muito mais tempo do que programar em linguagem

de alto nível;
● Depuração e manutenção muito mais difíceis.

● Vantagens:

● Performance:

● É a mais importante das razões;

● Um bom programador em linguagem de montagem pode

produzir um código muito menor e mais rápido do que um


programador em linguagem de alto nível, o que éxigido em
algumas aplicações críticas (ex.: aplicações embarcadas);
● Acesso aos recursos da máquina:

● Algumas aplicações exigem acesso direto a todos os

recursos da máquina E,x: tratamento de interrupções de


sistemas embarcados.
LINGUAGEM DE MONTAGEM 5/32
INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
POR QUE USAR LINGUAGEM DE MONTAGEM?
Performance:
● Na maioria dos programas, uma pequena parte do código é

responsável por uma grande parte do tempo de execução de um


programa. Ex. 10% do código é responsável por 90% do tempo de
execução.
● SINTONIZAÇÃO: Metodologia para desenvolvimento de
programas que visa melhorar a performance. Consiste em:
● Escrever o programa e linguagem de alto nível;

● Realizar medições para identificar as partes do programa

responsáveis pelo maior tempo da execução do programa;


● Rescrever as partes mais lentas do programa em linguagem

de máquina;
● O programador de linguagem de alto nível está mais preocupado

com o problema e o de Linguagem de montagem está mais


preocupado como código.
LINGUAGEM DE MONTAGEM 6/32
INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
POR QUE USAR LINGUAGEM DE MONTAGEM?
QUATRO RAZÕES
●Primeira: Porque o sucesso ou fracasso de um grande projeto
pode estar na habilidade de se melhorar o seu desempenho em 2
ou 3 vezes.
●Segunda: Porque muitas vezes o uso da linguagem de baixo nível
é a única alternativa para economia de memória. A falta de
disponibilidade de memória pode estar ligada ao tipo de hardware
(embarcado) ou a complexidade da tarefa a ser executada (cálculos
científicos).
Terceira: É essencial para entender como um compilador trabalha,

pois sua saída é a entrada de um montador.


● Quarta: A linguagem de máquina coloca a máquina em real
exposição, permitindo o melhor entendimento do seu hardware.
LINGUAGEM DE MONTAGEM 7/32
INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
FORMATO DOS COMANDOS DA LINGUAGEM DE MONTAGEM
● Cada máquina possui seu própria conjunto de instruções e

consequentemente a sua própria linguagem de montagem.


● Apesar disso elas possuem mnemônicos parecidos e os seus

montadores guardam características comuns.


● Os comando de um Montador têm quatro partes, ou campos:

● Label: Campo destinado a possibilitar o uso de representação

simbólica para endereços de memória e variáveis; começa, em


geral, na coluna 1; Normalmente limitado a 6 ou 8 caracteres.
● Operação: Deve conter a abreviatura simbólica do código de

operação de uma instrução de máquina (mnemônico) ou um


comando para o montador. Os mnemônicos das instruções de
diversas máquinas são semelhantes.
● Operandos: Serve para especificar os endereços e operandos

usados nas instruções de máquina.


● Comentários: Comentários úteis sobre o código.

LINGUAGEM DE MONTAGEM 8/32


INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
FORMATO DOS COMANDOS DA LINGUAGEM DE MONTAGEM

● Exemplo de programa para o x86:


Label Código da Operação Operando Comentários

FORM: MOV EAX,I ;registrador EAX=I


ADD EAX,J ;registrador EAX=I+J
MOV N,EAX ;N=I+J

I DW 3 ;reserva 4 bytes com o valor inicial 3


J DW 4 ;reserva 4 bytes com o valor inicial 4
N DW 0 ;reserva 4 bytes com o valor inicial 0

LINGUAGEM DE MONTAGEM 9/32


INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
PSEUDO-INSTRUÇÕES OU DIRETIVAS DO MONTADOR
● Além das instruções de máquina, o programa fonte pode conter

comandos para o próprio montador.


● Esses comandos são conhecidos como Pseudo-instruções ou

Diretivas do Montador.
● Cada montador tem o seu próprio conjunto de Diretivas.

● Seguem alguns exemplos:

● SEGMENT e ENDS: Inicia e encerra um segmento de texto ou

dados;
● ALIGN: força que a linha seguinte, em geral com dados, se

inicie em um endereço múltiplo do argumento. Ex.: se existem


61 byte já usados, ALIGN 4 faz com que o próximo byte
ocupado seja o endereço 64.
● EQU: serve para dar nome simbólico a uma expressão
numérica. Ex.: BASE EQU 1000, faz com que BASE represente
o valor 1000.

LINGUAGEM DE MONTAGEM 10/32


INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
PSEUDO-INSTRUÇÕES OU DIRETIVAS DO MONTADOR
● DB, DD, DW e DQ: reservam memória para uma ou mais

variáveis de 1, 2, 4 ou 8 bytes de tamanho;


● PROC e ENDP: definem o início e o fim de um procedimento

na linguagem de montagem;
● MACRO e ENDM: definem o início e o fim de uma Macro.

● PUBLIC: Declara que o símbolo definido em um determinado

arquivo pode ser visto por códigos contidos em outros


arquivos.
● EXTERN: Declara que o símbolo foi definido em outro arquivo.

● INCLUDE: faz com que o montador busque um outro arquivo e

o inclua no arquivo corrente.


● IF, ELSE e ENDIF: permite que uma decisão seja tomada

durante o processo da montagem. Ex.: tipo da máquina.


● COMMENT: define o caractere usado para comentários.

● PAGE e END: Controlam a paginação da listagem do montador

LINGUAGEM DE MONTAGEM 11/32


INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
MACROS
● Em um programa escrito em linguagem de montagem há a

necessidade freqüente em se repetir um conjunto de instruções.


● Soluções comuns:
● Repetir o código sempre que necessário: muito trabalhoso.

● Elaborar um procedimento e chamá-lo sempre que necessário:

executa uma instrução de chamada do procedimento, sempre


que necessário e uma instrução de retorno, causando um
overhead de chamada.
●Solução simples e eficiente para esse problema é o uso de
MACROS.
● DEFINIÇÃO DE MACRO: é a maneira de se atribuir um nome a
uma parte do código escrito em linguagem de montagem.
● Após a definição da macro o programador pode escrever o nome

da macro ao invés do bloco de códigos.


LINGUAGEM DE MONTAGEM 12/32
INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
MACROS

● Exemplo de uma macro que realiza a troca dos valores das


variáveis P e Q:

Sem MACRO Com MACRO


MOV EAX,P SWAP: MACRO
MOV EBX,Q MOV EAX,P
MOV Q,EAX MOV EBX,Q
MOV P,EBX MOV Q,EAX
MOV P,EBX
MOV EAX,P ENDM
MOV EBX,Q
MOV Q,EAX SWAP
MOV P,EBX
SWAP

LINGUAGEM DE MONTAGEM 13/32


INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
MACROS
● Para se definir uma macro usa-se:

● Um cabeçalho informando o nome da macro;

● Um texto englobando as instruções da macro; e

● Uma pseudo-instrução para encerrar a definição.

● Definida a macro, cada vez que aparecer uma chamada a macro, o

montador substituirá o nome da macro pelo seu conteúdo.


● O uso do nome da macro chama-se chamada a macro.

● E a substituição do nome pelo corpo da macro é chamado de

expansão da macro.
● A expansão da macro se dá durante o processo de montagem, e

não durante a execução.


● Os dois exemplos anteriores irão gerar o mesmo código
executável. Não será possível mais identificar se uma macro foi ou
não usada.
● Não confundir chamada a macro (que ocorre durante a montagem)

com chamada a procedimento (que ocorre durante a execução).


LINGUAGEM DE MONTAGEM 14/32
INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
MACROS COM PARÂMETROS
● Os montadores permitem o uso de macros semelhantes, através

do uso de parâmetros formais, com chamadas por parâmetros


reais.
● Quando uma macro é expandida, os parâmetros formais são

substituídos por parâmetros reais.


● Refazendo o exemplo: Sem MACRO Com MACRO
MOV EAX,P SWAP: MACRO P1,P2
MOV EBX,Q MOV EAX,P1
MOV Q,EAX MOV EBX,P2
MOV P,EBX MOV P2,EAX
MOV P1,EBX
MOV EAX,R ENDM
MOV EBX,S
MOV S,EAX SWAP P,Q
MOV R,EBX
SWAP R,S
LINGUAGEM DE MONTAGEM 15/32
INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
CARACTERÍSTICAS AVANÇADAS DAS MACROS
● Duplicação de LABELS:
●Um grande problema no uso de macros, consiste na
duplicação de LABELS.
● O correto é não permitir que o usuário repita o uso do mesmo

label.
● Alguns montadores permitem que o LABEL seja definido com

a pseudo-instrução LOCAL, substituindo por outro durante o


processo de expansão da macro.

●A maioria dos montadores permite a definição de uma macro dentro


de outra macro.

●Macros podem chamar outras macros, ou a si mesmas, ou seja,


macros podem ser recursivas. É necessário tomar cuidado para que o
montador não entre em LOOP infinito.
LINGUAGEM DE MONTAGEM 16/32
INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
PROCESSO DE MONTAGEM
Montadores de Dois Passos:
● Como o programa em linguagem de montagem é constituído de
comandos, um por linha de programa, parece natural que o montador
leia o programa fonte, codifique cada linha e grave um arquivo.
● Essa estratégia não funciona. Ex.: Se a primeira instrução do
programa for um salto para o endereço X (definido simbolicamente).
● X pode estar em qualquer parte do programa e o montador poderá ter

que ler quase todo o programa para calcular o endereço de X.


● Isso é conhecido como problema da referência posterior, pois o

símbolo X foi definido antes de ser usado. Duas soluções:


● Montador de dois passos: o programa-fonte é lido duas vezes, na

primeira monta tabelas com referências e na segunda converte


todo o código.
● Única leitura do programa-fonte: ao ler o programa fonte o

montador converte para um código intermediário; o segundo


passo não é realizado sobre o código-fonte.
LINGUAGEM DE MONTAGEM 17/32
INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
PROCESSO DE MONTAGEM

Montadores de Dois Passos - Passo 1:

● A principal função do montador de dois passos é construir uma


tabela de símbolos, contendo os valores de todos os símbolos usados
no programa.
● Um símbolo é um label ou um nome simbólico ao qual é atribuído um

valor através de uma pseudo-instrução.


● Para atribuir um valor a um label, o montador precisa saber aonde a

instrução será armazenada durante a execução do programa.


● O montador usa uma variável chamada ILC (Instunction Location

Counter) para conhecer o endereço em que uma instrução será


armazenada durante a execução.
● O montador usa no mínimo três tabelas durante o processo de

montagem: a tabela de símbolos, a tabela de pseudo-instruções e a


tabela de códigos de operação.
LINGUAGEM DE MONTAGEM 18/32
INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
PROCESSO DE MONTAGEM
Montadores de Dois Passos - Passo 1:
● A tabela de símbolos contém, além do próprio símbolo, o seu valor
numérico e e, em alguns casos outras informações referentes a ele.
● A tabela de código de operações contém, no mínimo, uma entrada

para cada código de operação simbólico (mnemônico) existente na


linguagem de montagem. Cada entrada dessa tabela contém o código
de operação simbólico, o valor numérico do código de operação, o
tamanho da instrução e um número que separa os códigos de
operação em grupos dependendo da quantidade e do tipo dos seus
operandos.
● Alguns montadores permitem que o programador use instruções com

endereçamento imediato, mesmo que ela não existe explicitamente no


conjunto de instruções do processador.
●O montador as transforma em constantes e reserva memória
automaticamente para elas. São chamadas de literais.
● O montador deve, nesse caso, montar uma tabela de literais.

LINGUAGEM DE MONTAGEM 19/32


INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
PROCESSO DE MONTAGEM
Montadores de Dois Passos - Passo 2:
● A principal função do passo 2 é gerar o programa objeto e, se for o
solicitado, gerar a impressão de uma listagem de informações
contendo, além do programa fonte, algumas outras informações sobre
o processo de montagem.
● O passo 2 também disponibiliza algumas informações para o
programa ligador (linker).
● A função do ligador é efetuar a ligação com os outros procedimento

que foram montados independentemente em um único arquivo


executável.
● A operação do passo 2 é parecida com a do passo 1: ele lê as linhas

do programa-fonte e as processa, usando as informações contidas nas


tabelas geradas pelo passo 1.
● Para não perder tempo na busca das informações nas tabelas, essas

devem estar ordenadas e algum método de busca eficiente deve ser


usado.
LINGUAGEM DE MONTAGEM 20/32
INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
LIGAÇÃO E CARGA DE PROCEDIMENTOS.
● A maioria dos programas é composta por mais de um procedimento.
● Cada procedimento, geralmente, é montado separadamente e
armazenado em disco.
● Antes que o programa seja executado, todos os procedimentos

devem ser encontrados e ligados para formarem um único código


executável.
● O programa que executa essa tarefa é conhecido como: ligador,

carregador ligador, editor de ligações ou likeditor.


● A tradução completa é composta por duas fases:

● A compilação ou montagem dos procedimentos fonte (realizado

pelo montador ou compilador)


● A ligação dos módulos-objeto (realizada pelo linkeditor)

● A função do linkeditor é coletar procedimentos traduzidos


separadamente, ligá-los uns aos outros para que eles possam
executar como uma unidade chamada programa executável binário.

LINGUAGEM DE MONTAGEM 21/32


INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
LIGAÇÃO E CARGA DE PROCEDIMENTOS.
● A vantagem dos montadores trabalharem com procedimentos
separados é que na ocorrência de alteração de um procedimento, só
ele necessita ser remontado.
● Se fosse feito um bloco único, todo o trabalho necessitaria ser feito.

● O processo de ligação é muito mais rápido que o da montagem.

Procedimento Módulo
fonte 1 objeto 1

Programa
Procedimento Módulo
Tradutor Ligador Executável
fonte 2 objeto 2
Binário

Procedimento Módulo
fonte 3 objeto 3

LINGUAGEM DE MONTAGEM 22/32


INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
TAREFAS EXECUTADAS PELO LIGADOR
● O contador de posições (ILC) assume o valor zero no princípio de
cada processo de montagem.
● O montador assume que o módulo-objeto estará localizado na

memória a partir do endereço zero durante a execução.


● Considere os três módulos-objeto A, B e C, cada um realizando um

salto como primeira instrução e também chamando outro


procedimento.

Módulo-objeto A Módulo-objeto B Módulo-objeto C


400 600 300
300 CALL B 500 CALL C 200 MOVE S, X
200 MOVE P, X 300 MOVE Q, X
0 BRANCH 200
0 BRANCH 200 0 BRANCH 300

LINGUAGEM DE MONTAGEM 23/32


INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
TAREFAS EXECUTADAS PELO LIGADOR 1400
● Para montar um programa executável, o 1300 MOVE S, X
ligador coloca na memória, ou em uma C
arquivo em disco, todos os módulos objeto
que serão necessários a constituição do 1100 BRANCH 200
referido programa executável. 1000 CALL C
● A pesar de ter todos os módulos-objetos

necessários carregados na memória, o 800 MOVE Q, X B


programa ainda não está pronto para
execução.
500 BRANCH 300
● O programa teve que ser carregado na

memória a partir do endereço 100.


400 CALL B
● Note todas as referências de memória feitas

pelo programa vão falhar. 300 MOVE P, X


● O problema da relocação ocorre porque
A
cada módulo-objeto representa um espaço
100 BRANCH 200
de execução separado.
LINGUAGEM DE MONTAGEM 24/32
INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
TAREFAS EXECUTADAS PELO LIGADOR
● Além disso, um procedimento não poderá chamar o outro pois o
endereço de B e C não são conhecidos pelos módulos-objetos A e B
respectivamente.
● Esse problema é chamado de problema da referência externa.

● Os problemas de relocação e de referência externa são resolvidos pelo

ligador.
● O ligador resolve esses problemas através dos seguintes passos:

● Constrói uma tabela contendo todos os módulos-objeto e seus

respectivos tamanhos.
● Com base nessa tabela, atribui um endereço inicial a cada módulo-

objeto.
● O ligador descobre todas as instruções que fazem referência a
memória e soma a cada um dos endereços referenciados uma
constante de relocação que é igual ao valor do endereço incial do
módulo a que pertence.
● Encontra as instruções que fazem referência a um procedimento e

insere o endereço adequado.


LINGUAGEM DE MONTAGEM 25/32
INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
TAREFAS EXECUTADAS PELO LIGADOR 1400
● Abaixo um exemplo da tabela criada pelo 1300 MOVE S, X
ligador na primeira fase. C
● A direita o programa executável após a
1100 BRANCH 1300
tarefa do ligador.
1000 CALL1100

800 MOVE Q, X B

Módulo Tamanho Endereço Inicial 500 BRANCH 800


A 400 100
B 600 500 400 CALL 500
C 300 1100
300 MOVE P, X
A

100 BRANCH 300

LINGUAGEM DE MONTAGEM 26/32


INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
ESTRUTURA DE UM MÓDULO-OBJETO
● Em geral, os módulos-objetos são divididos em seis partes:
1. Identificação: contém informações necessárias ao trabalho do
ligador, como nome e data de montagem.
Fim do módulo
2. Tabela de Pontos de Entrada: lista dos
símbolos definidos nesse módulo, com Dicionário de
seus respectivos valores; símbolos que Relocação
podem ser acessado por outros módulos.
3. Tabela de referências externas: lista de Instruções de
símbolos que são usados no módulo, mas Máquina e
que são definidos em outro módulo. Constantes
4. Instruções de Máquina e Constantes:
contém o código montado; é a única parte Tabela de referências
carregada na memória durante a execução. Externas
5. Dicionário de relocação: instruções Tabela de Pontos
que precisam ser somadas a constante de de Entrada
relocação.
Identificação
6. Fim do Módulo.
LINGUAGEM DE MONTAGEM 27/32
INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
MOMENTO DA LIGAÇÃO 1700
● É praticamente impossível assegurar que 1600 MOVE S, X
um programa compilado será carregado no C
endereço para o qual foi ligado.
● O momento em que um é determinado um
1400 BRANCH 1300
endereço da memória principal 1300 CALL1100
correspondente a um símbolo é chamado de
Momento da Ligação. Pode ocorrer quando: 1100 MOVE Q, X B
● o programa é escrito;

● o programa é traduzido;
800 BRANCH 800
● o programa é ligado, antes de ser
carregado;
700 CALL 500
● o programa é carregado;

● o registrador base usado para 600 MOVE P, X


endereçamento for carregado; e A
● a instrução que contém o endereço for
400 BRANCH 300
executada.
LINGUAGEM DE MONTAGEM 28/32
INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
MOMENTO DA LIGAÇÃO
● Se uma instrução que contenha um endereço de memória for movida
antes da ligação, ela executará normalmente.
● Se o tradutor produzir um código binário executável, a ligação

ocorreu em tempo de tradução e o código precisa ser carregado no


endereço para o qual foi projetado.
● Como o método de ligação descrito anteriormente relaciona os

valores simbólicos a constantes, o programa só funcionará se for


carregado no endereço para o qual foi ligado.
● Dois aspectos a considerar;

● Quando os nomes simbólicos são convertidos em endereços

virtuais.
● Quando os endereços virtuais são convertidos em endereços

simbólicos.
● A ligação só estará completa após esses dois passos estarem

completos.

LINGUAGEM DE MONTAGEM 29/32


INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
MOMENTO DA LIGAÇÃO

● O programa binário executável estabelece uma correspondência


entre nomes simbólicos e endereços virtuais.
● Soluções para o movimento do programa:

1. Qualquer mecanismo que permita mapear endereços virtuais de


memória em endereços físicos, Ex.: paginação: para deslocar um
programa na memória principal, basta modificar a tabela de
páginas, nunca o programa;
2. Usar um registrador para relocação em tempo de execução:
depende do hardware; todos os endereços a serem acessados são
somados com esse registrador.
3. Usar referências relativas ao program counter: sempre que um
programa é deslocado na memória principal, somente o program
counter necessita ser atualizado. Um programa assim é dito
independente da posição, pois as referências à memória são
relativas ao program counter ou absolutas.
LINGUAGEM DE MONTAGEM 30/32
INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
LIGAÇÃO DINÂMICA
● É uma de uma maneira mais flexível de se efetuar a ligação de
procedimentos compilados separadamente;
● Consiste em realizar a ligação na primeira vez que um procedimento

for chamado.
● No Windows, o processo de ligação usa um formato especial de

arquivo chamado DLL (Dynamic Link Library).


● As DLL podem conter procedimentos, dados ou ambos.

● São usados para permitir que dois ou mais processos compartilhem

procedimentos de bibliotecas ou dados.


● Podem ter também as extensões: .drv (driver) ou .fon (fontes)

● A construção de um arquivo DLL é bem semelhante ao arquivo

binário executável.
● Economizam espaço de memória e disco.

● Facilita a atualização de procedimentos e bibliotecas.

● DLL não pode rodar sozinho, pois não tem programa principal.

● Duas maneiras de um programa se ligar a uma DLL:

LINGUAGEM DE MONTAGEM 31/32


INTRODUÇÃO A SISTEMAS COMPUTACIONAIS Prof Saulo
LIGAÇÃO DINÂMICA
● Ligação Implícita: o programa do usuário é ligado estaticamente a um
arquivo especial chamado de Biblioteca de importação.
● Gerado por utilitário que extrai informações da DLL.

● Quando um programa que usa ligação implícita é carregado na

memória, o Windows carrega todas as DLL necessárias na memória,


antes de executar.
● Ligação Explícita: não precisa de bibliotecas de importação e não

exige que as DLL sejam carregadas na memória ao mesmo tempo que


o programa do usuário.
● Nesse caso, o programa do usuário faz uma chamada explícita, em

tempo de execução, para se ligar a DLL.


● UNIX possui um sistema idêntico conhecido como bibliotecas
compartilhadas.
● Suporta somente ligação implícita, e a biblioteca compartilhada é é
composta por: biblioteca hospedeira que é ligada ao arquivo
executável e biblioteca-alvo que é chamada em tempo de execução.
LINGUAGEM DE MONTAGEM 32/32

Vous aimerez peut-être aussi