Você está na página 1de 17

EA869

INTRODUÇÃO A SISTEMAS DE COMPUTAÇÃO DIGITAL


2S2018

PED Tiago Novaes Angelo

CARREGADORES E LIGADORES
Aulas 27 e 28
Revisão...
• Nas últimas aulas começamos o estudo dos SOFTWARES DE SISTEMA

• Softwares de Sistema nada mais são do que programas que gerenciam o


hardware de um sistema computacional, definindo quais processos serão
executados pela CPU, como a memória será usada, como um programa será
instalado, etc; além de estabelecer uma interface com o usuário

• O principal Software de Sistema é o Sistema Operacional (Ex: Linux, Windows,


iOS, Android, entre outros) e será estudado em disciplinas posteriores

• O primeiro Software de Sistema estudado foi o Montador

• O Montador é responsável por traduzir um programa em linguagem Assembly


para Linguagem de Máquina. Por vezes, pode carregar diretamente este
programa na memória (Montador Load and Go).

• Nas próximas duas aulas iniciaremos o estudo de outros dois Softwares de


Sistema: Ligadores e Carregadores
Carregadores e Ligadores
• Vamos ver os passos de todo processo de tradução de um Programa Assembly até
seu carregamento completo na memória:

PROGRAMA ASSEMBLY MÓDULO OBJETO

AND R1, #3 ESD.´MAIN´.´SD´.0000.001C


MOV R1 , R2 TXT.0C.2.5E00
MONTADOR TXT.0E.4.06000030
SUB R2, #3 RLD.14.4.´MAIN´
MUL R3 , R1, R2 END.00

Definem os endereços
LIGADOR\ adequados, transferem
o programa para a
CARREGADOR memória e iniciam sua
execução
ESQUEMAS DE CARREGAMENTO
MONTAGEM E CAREGAMENTO COMBINADOS

PROGRAMA ASSEMBLY

AND R1, #3
MOV R1 , R2
MONTADOR
SUB R2, #3
MUL R3 , R1, R2

transfere o programa
para a memória
ESQUEMAS DE CARREGAMENTO
CAREGAMENTO ABSOLUTO

PROGRAMA ASSEMBLY MÓDULO OBJETO

AND R1, #3 ESD.´MAIN´.´SD´.0000.001C


MOV R1 , R2 TXT.0C.2.5E00
MONTADOR TXT.0E.4.06000030
SUB R2, #3 RLD.14.4.´MAIN´
MUL R3 , R1, R2 END.00

CARREGADOR

transfere o programa
para a memória
ESQUEMAS DE CARREGAMENTO
CAREGAMENTO COM AJUSTE A REFERÊNCIAS

PROGRAMA ASSEMBLY MÓDULO OBJETO

AND R1, #3 ESD.´MAIN´.´SD´.0000.001C


MOV R1 , R2 TXT.0C.2.5E00
MONTADOR TXT.0E.4.06000030
SUB R2, #3 RLD.14.4.´MAIN´
MUL R3 , R1, R2 END.00

MÓDULO DE CARGA
- Define o endereço inicial de
instalação do programa na memória
(IPLA)
- Liga todos os segmentos que
compõe o programa;
LIGADOR - Aloca espaço na memória CARREGADOR
suficiente para carregar todos os
segmentos do programa;
- Define o endereço de cada símbolo
(rótulo);
transfere o programa
- Ajusta, no código, posições de
para a memória
memória que fazem referencias a
outras posições de memória;
MÓDULO OBJETO
MÓDULO OBJETO

ESD.´MAIN´.´SD´.0000.001C
TXT.0C.2.5E00
MÓDULOTXT.0E.4.06000030
OBJETO
RLD.14.4.´MAIN´
ESD.´MAIN´.´SD´.0000.001C
END.00
TXT.0C.2.5E00
TXT.0E.4.06000030
RLD.14.4.´MAIN´
END.00
MÓDULO OBJETO
MÓDULO OBJETO
• O que é?
ESD.´MAIN´.´SD´.0000.001C
- Código gerado pelo montador que possui todas as TXT.0C.2.5E00
informações necessárias para carregar o código na TXT.0E.4.06000030
memória e definir os endereços das variáveis (rótulos); RLD.14.4.´MAIN´
END.00
- Possui 4 tipos de registros:

ESD
Dicionário de Símbolos Externos
informações sobre o nome de um rótulo

ESD . ‘nome do rótulo’ . tipo .end relativo do simb .comprimento

SD: indica que o rótulo representa um segmento de código;


LD: indica que o rótulo é uma variável do código;
MÓDULO OBJETO
MÓDULO OBJETO
• O que é?
ESD.´MAIN´.´SD´.0000.001C
- Código gerado pelo montador que possui todas as TXT.0C.2.5E00
informações necessárias para carregar o código na TXT.0E.4.06000030
memória e definir os endereços das variáveis (rótulos); RLD.14.4.´MAIN´
END.00
- Possui 4 tipos de registros:

TXT
Contém o código de máquina e sua localização relativa na memória

TXT . end relativo . comprimento. código


MÓDULO OBJETO
MÓDULO OBJETO
• O que é?
ESD.´MAIN´.´SD´.0000.001C
- Código gerado pelo montador que possui todas as TXT.0C.2.5E00
informações necessárias para carregar o código na TXT.0E.4.06000030
memória e definir os endereços das variáveis (rótulos); RLD.14.4.´MAIN´
END.00
- Possui 4 tipos de registros:

RLD
Posição relativa e dimensão das referências que precisam ser
ajustadas no código de máquina. Qual o valor (símbolo) usado
como base para este ajuste.

RLD . end relativo a ser ajustado . comprimento . símbolo usado para ajuste

• Caso o símbolo usado para ajuste esteja definido no próprio


módulo, dizemos que foi feita uma relocação;
• Caso o símbolo usado para ajuste esteja definido em outro
módulo, dizemos que foi feito um ajuste de ligação;
MÓDULO OBJETO
MÓDULO OBJETO
• O que é?
ESD.´MAIN´.´SD´.0000.001C
- Código gerado pelo montador que possui todas as TXT.0C.2.5E00
informações necessárias para carregar o código na TXT.0E.4.06000030
memória e definir os endereços das variáveis (rótulos); RLD.14.4.´MAIN´
END.00
- Possui 4 tipos de registros:

END
Indica o fim do segmento/módulo

END . endereço de execução

Endereço de execução é o valor que PC irá receber para começar a


executar o programa. Caso o módulo não seja o módulo principal,
este campo estará vazio
ALGORITMOS DE CARREGAMENTO
MÓDULO OBJETO
• O processo de carregamento com ajuste de referências ESD.´MAIN´.´SD´.0000.001C
é executado por um carregador de ligação direta, o qual TXT.0C.2.5E00
faz tanto a ligação quanto o carregamento do módulo TXT.0E.4.06000030
RLD.14.4.´MAIN´
objeto na memória. END.00
• Todo o processo é executado em dois passos:

Passo 1 Passo 2

• Cria a TABELA DE SÍMBOLOS GLOBAIS (GEST) • Realiza o carregamento do código de


Tabela que contém o endereço de todos os rótulos
máquina na memória;
(símbolos) • Como?
A partir da leitura dos campos TXT
• Como?
• Realiza o ajuste do código;
A partir da leitura dos campos ESD
• Como?
A partir da leitura dos campos RLD
• Inicia a execução do código já carregado
• Como?
A partir da leitura dos campos END
EXEMPLO •

O PLA foi definido como 1000
• Ao final do processamento, o montador gerou os seguintes segmentos: Main será carregado seguido
pelo PGM

PASSO 1

GEST
SÍMBOLO END
MAIN 1000
PGM 101C
DIGIT 102C

PASSO 2

Posição 00 02 04 06 08 0A 0C 0E
1000 1039 0000 0000 0C00 000A 6D02 5E00 0600
1010 0030 13C0 0000 001A 4E75 0000 3039 0000
1020 000E 33C0 0000 0010 4E75 0000 0000
EXEMPLO •

O PLA foi definido como 1000
• Ao final do processamento, o montador gerou os seguintes segmentos: Main será carregado seguido
pelo PGM

PASSO 1

GEST
SÍMBOLO END
MAIN 1000
PGM 101C
DIGIT 102C

PASSO 2

Posição 00 02 04 06 08 0A 0C 0E
1000 1039 0000 0000
102C 0C00 000A 6D02 5E00 0600
1010 0030 13C0 0000 101A
001A 4E75 0000 3039 0000
1020 102A
000E 33C0 0000 102C
0010 4E75 0000 0000
BIBLIOTECAS
• Conforme vimos no capítulo de Subrotinas, um programa pode solicitar diversas
Rotinas de Serviço durante a sua execução;
• Estas Rotinas de Serviço ajudam a enxugar o código já que evitam que
programador fique repetindo uma mesma parte do código diversas vezes;
• Muitas dessas Rotinas de Serviço podem ser utilizadas por programas diferentes
já que, muitas vezes, são rotinas de uso comum que fazem operações
elementares: funções de E/S, matemáticas, etc;
• Desta forma, os Sistemas Operacionais possuem Bibliotecas que contém estas
Rotinas de Serviço já em forma de Módulo Objeto, eliminando a necessidade
de montá-las;
• A leitura destes Módulos Objetos podem se dar em dois momentos:

Windows Linux
Biblioteca DLL Biblioteca ELF
(Dynamic Link Library) (Executable and Linkable Format)
- O módulo objeto é lido e as referências - O módulo objeto só é lido se durante
dos símbolos são todas definidas em a execução seus símbolos forem
tempo de carregamento (antes da referenciados (Tempo de Execução)
execução)
CONCLUSÕES
• O objetivo da disciplina EA869 foi apresentar como se organizam os Sistemas de Computação Digital;

• Após uma contextualização histórica, começamos nosso estudo sobre os possíveis problemas que um
computador pode ou não pode resolver;

• Estudamos a natureza de um problema, sua computabilidade e complexidade;

• Em seguida começamos a conhecer como um computador se organiza. Criamos duas arquiteturas e as


diferenciamos conforme sua forma de controle: RISC x CISC;

• Definidas as arquiteturas, vimos como as instruções podem ser executadas de forma eficiente
(pipeline) e como códigos podem ser escritos também de forma eficiente (subrotinas);

• Seguimos estudando como o processador trata sinais externos: as interrupções; e como se comunica
com dispositivos de entrada e saída (periféricos);

• Por fim, estudamos os Softwares de Sistema, os quais são responsáveis por gerenciar o hardware de um
sistema computacional;

• Falamos brevemente sobre os sistemas operacionais e vimos como um código em Assembly é


traduzido em linguagem de máquina por um montador e instalado na memória por um ligador e
carregador;

• Toda esta teoria foi ilustrada na prática com o uso de um simulador de um processador ARM;

• A última aula desta disciplina se dará no laboratório de computação digital e terá como objetivo
prepará-los para a disciplina de EA871, além de vermos na prática como se programa um processador
ARM;
FIM

Você também pode gostar