Montadores - DCA

Propaganda
EA869
Montadores
Faculdade de Engenharia Elétrica e de Computação (FEEC)
Universidade Estadual de Campinas (UNICAMP)
Prof. Levy Boccato
Objetivos
• Introduzir o conceito de software de sistema.
• Conhecer as funções básicas de um sistema
operacional.
• Conhecer a função e o modo de operação do
montador (Assembler).
Recordando a disciplina...
Problema
Estruturas
de dados
Representação
numérica
Algoritmo
NÍVEL
CONCEITUAL
Linguagem
Assembly
HIERARQUIA
DE
LINGUAGENS
Arquitetura de
Computadores
HARDWARE
Quem gerencia os
recursos do computador?
SISTEMA OPERACIONAL
SOFTWARE DE
SISTEMA
Sistema Operacional
O que é?
É um programa ou um conjunto de programas cuja função é gerenciar os recursos do
sistema (definir qual programa recebe atenção do processador, gerenciar a memória, criar
um sistema de arquivos, etc),
fornecendo uma interface segura e simples entre
o computador e o usuário.
CPU
COMPUTADOR
UC
MEMÓRIA
BANCO DE
REGISTRADORES
UAL
DMA
Interf. Entrada/Saída
Sistema Operacional
O que é?
É um programa ou um conjunto de programas cuja função é gerenciar os recursos do
sistema (definir qual programa recebe atenção do processador, gerenciar a memória, criar
um sistema de arquivos, etc),
fornecendo uma interface segura e simples entre
o computador e o usuário.
Quais são suas funções?
GERENCIAMENTO DE PROCESSOS
 Garantir multiprocessamento (multicore).
 Pipeline.
 Definir tempo para cada processo e alterná-los quando necessário (threads).
GERENCIAMENTO DE MEMÓRIA
 Acesso completo à memória do sistema.
 Permitir que os processos do usuário tenham acesso seguro à memória.
 Criar e gerenciar memória virtual.
INTERFACE COM O USUÁRIO
 Os SOs fornecem uma abstração de hardware para que seus recursos possam ser
usados de maneira correta e padronizada. Há uma interface para que o usuário possa
desfrutar dos recursos do sistema.
Sistema Operacional
Evolução
Primeiro SO: Pessoas!
Sistema Operacional
Evolução
1980: MS-DOS
Sistema Operacional
Evolução
1985: WINDOWS 1.0
Sistema Operacional
Evolução
1990: WINDOWS 3.0
Sistema Operacional
Evolução
WINDOWS 95
Sistema Operacional
Evolução
2007/2008: S.O. MOBILE
Sistema Operacional
• O Sistema Operacional faz parte de um conjunto de programas que define a
maneira como os diversos elementos de hardware devem operar de
modo a tornar o computador funcional.
• A estes programas denominamos...
SOFTWARES DE SISTEMA
USUÁRIOS
SOFTWARE DE APLICAÇÃO
SOFTWARE DE SISTEMA
HARDWARE
Softwares de Sistema
Quatro outros programas completam a lista dos softwares de sistema:
MONTADORES
Foco deste tópico
CARREGADORES
Próximo tópico
LIGADORES
Próximo tópico
COMPILADORES
Tema da disciplina EA879
Montadores
• Um dos processos mais importantes de um computador é a montagem, ou seja,
a tradução de um programa em linguagem Assembly para a linguagem de
máquina, e a preparação para seu carregamento na memória principal para
ser executado.
MONTADOR
AND R1, #3
MOV R1 , R2
SUB R2, #3
MUL R3 , R1, R2
LDR R3 , [R1]!
ROT:MOV R2 , #4
STR R1 , [R2,R3]
End
Conteúdo
Montadores
• Um dos processos mais importantes de um computador é a montagem, ou seja,
a tradução de um programa em linguagem Assembly para a linguagem de
máquina, e a preparação para seu carregamento na memória principal para
ser executado.
OBSERVAÇÃO!
MONTADOR
AND R1, #3
MOV R1 , R2
SUB R2, #3
MUL R3 , R1, R2
LDR R3 , [R1]!
ROT:MOV R2 , #4
STR R1 , [R2,R3]
End
1A
1B
1C
AND R1, #3
1D
1E
1F
20
Tabela de
instruções
Como os processadores
trabalham com
Conteúdo
palavras
de 16, 32 e até
de 64 bits, não é
150B
conveniente
representar
os valores
1F0A
da memória em
binário.AB3F
A partir de
agora, para mostrar a
memória,237C
iremos usar,
tanto para o endereço
1A1B
quanto
para o
conteúdo, a
FFFA
representação
hexadecimal.
EA86
Montadores
O QUE É?
É um programa cujos dados de entrada são sequências
de caracteres que constituem o programa em
linguagem de montagem ou Assembly, e cujo resultado
é um conjunto de palavras (sequências de bits) que
constituem o programa em linguagem de máquina.
O programa gerado, em linguagem de máquina, pode
ser carregado na memória e executado ("load and go"),
ou, então, ser a entrada de outro programa, o
carregador, que após algum processamento para
adequar os endereços ao bloco de memória disponível,
carrega-o na memória principal para ser executado.
COMO É FEITA A TRADUÇÃO?
O montador possui Tabelas com os mnemônicos de
todas as instruções do computador e os símbolos
(rótulos) manipuláveis. Além disso, pseudo-instruções
auxiliam na tomada de decisão dos endereços de
montagem.
Montadores
• Vamos entender melhor o funcionamento do montador a partir de um
exemplo.
• Seja o programa abaixo. Queremos montá-lo na memória do processador:
A: AND R1, #3
MOV R1 , #5
SUB R2, A
1. Onde o programa será montado?
Para o montador saber o local (endereço de
memória) que será montado um código, o
programador precisa, ao escrever o
programa, fornecer algumas informações
através das pseudo-instruções.
End
Conteúdo
Montadores
• Vamos entender melhor o funcionamento
do montador a partir de um
PSEUDO-INSTRUÇÕES
exemplo. É um tipo especial de instrução não executável, que
• Seja o programa abaixo. Queremos montá-lo na memória do processador:
insere valores em posições de memória, reserva
ORG
1F e organiza na memória o local End
Conteúdo
espaço
de instalação
A: AND
#3
das R1,
instruções.
Quem lê e “executa” as pseudoMOV R1 , #5
instruções é o montador ao alocar o programa
SUB R2, A
Assembly na memória.
Em resumo, pseudo-instruções são regras que ajudam
2. Montando oo programa
memória
montador na
a definir
o conteúdo de cada posição da
memória ao instalar um programa.
DS X
Reserva X palavras da memória a
partir da posição da pseudo-instrução;
DW V
Posição de memória desta pseudoinstrução recebe o valor V;
ORG Y A próxima instrução é alocada na
posição Y de memória;
ADR rótulo Posição recebe o endereço de
“rótulo”;
Rot: EQU Z Rótulo Rot está associado ao valor
definido por Z.
Montadores
• Vamos entender melhor o funcionamento do montador a partir de um
exemplo.
• Seja o programa abaixo. Queremos montá-lo na memória do processador:
ORG 1F
A: AND R1, #3
MOV R1 , #5
SUB R2, A
2. Montando o programa na memória
Montador lê linha a linha todas as
instruções e/ou pseudo-instruções do
programa.
Ao ler uma pseudo-instrução, ele busca na
TABELA DE PSEUDO-INSTRUÇÕES (TPI)
informações para executá-la.
Ao ler uma instrução, ele a busca na
TABELA DE INSTRUÇÕES DE MÁQUINA
(TIM) o código de máquina correspondente
e monta a instrução na memória.
End
Conteúdo
Montadores
• Vamos entender melhor o funcionamento do montador a partir de um
exemplo.
• Seja o programa abaixo. Queremos montá-lo na memória do processador:
ORG 1F
A: AND R1, #3
MOV R1 , #5
SUB R2, A
End
1F
2. Montando o programa na memória
TABELA DE PSEUDO-INSTRUÇÕES
•
Relaciona a pseudo-instrução com a rotina que o montador
deve chamar para processá-la.
MENÔNICO
COMP
(BYTES)
ROTINA DE TRAT.
ORG
-
RORG
DW
1
RDW
DS
i
RDS
END
...
REND
...
...
Conteúdo
Montadores
• Vamos entender melhor o funcionamento do montador a partir de um
exemplo.
• Seja o programa abaixo. Queremos montá-lo na memória do processador:
ORG 1F
A: AND R1, #3
MOV R1 , #5
SUB R2, A
2. Montando o programa na memória
TABELA DE INSTRUÇÕES DE MÁQUINA
•
Associa o mnemônico de uma instrução com o seu código
de máquina .
MNC
C. M.
COMP
(BYTES)
ROT. DE
TRAT
AND R1
2A
2
RANDR2
MOV R1
1E
2
RMOVR1
SUB R2
F3
2
RSUBR2
...
...
...
...
End
Conteúdo
1F
2A
20
03
Montadores
• Vamos entender melhor o funcionamento do montador a partir de um
exemplo.
• Seja o programa abaixo. Queremos montá-lo na memória do processador:
ORG 1F
A: AND R1, #3
MOV R1 , #5
SUB R2, A
2. Montando o programa na memória
TABELA DE INSTRUÇÕES DE MÁQUINA
•
Associa o mnemônico de uma instrução com o seu código
de máquina .
MNC
C. M.
COMP
(BYTES)
ROT. DE
TRAT
AND R1
2A
2
RANDR2
MOV R1
1E
2
RMOVR1
SUB R2
F3
2
RSUBR2
...
...
...
...
End
Conteúdo
1F
2A
20
03
21
1E
22
05
Montadores
• Vamos entender melhor o funcionamento do montador a partir de um
exemplo.
• Seja o programa abaixo. Queremos montá-lo na memória do processador:
ORG 1F
A: AND R1, #3
MOV R1 , #5
SUB R2, A
2. Montando o programa na memória
TABELA DE INSTRUÇÕES DE MÁQUINA
•
Associa o mnemônico de uma instrução com o seu código
de máquina .
MNC
C. M.
COMP
(BYTES)
ROT. DE
TRAT
AND R1
2A
2
RANDR2
MOV R1
1E
2
RMOVR1
SUB R2
F3
2
RSUBR2
...
...
...
...
End
Conteúdo
1F
2A
20
03
21
1E
22
05
F3
1F
23
24
Montadores
• Um montador é um programa que lê um código em Assembly (Código
Fonte), traduz para o código de máquina (Programa em Linguagem de
Máquina) e o monta na memória.
• Algumas diretivas auxiliam o montador a decidir conteúdos de
memória e em que local o código será instalado. Estas diretivas são
conhecidas como pseudo-instruções.
• Para traduzir e montar o código na memória, o montador segue
alguns passos sequencialmente:
Lê Linha do
Código
Assembly
Instrução
Busca o C.M.,
na tabela TIM
PseudoInstrução
Busca Instruções
de execução na
tabela TIP
Monta inst. na
memória
Define
endereços /
monta dados
na memória
Montadores
• Vamos agora para um novo exemplo.
• Seja o programa abaixo. Queremos montá-lo na memória do processador:
End
Conteúdo
1F
ORG 1F
DADO: DS 3
MOV R1, DADO
SUB R2, ROT
ROT: DW 10
TABELA DE PSEUDO-INSTRUÇÕES (TPI)
MNENÔNICO
COMP
(BYTES)
ROTINA DE
TRAT.
ORG
-
RORG
DW
1
DS
TABELA DE INSTRUÇÕES DE MÁQUINA (TIM)
MNC
C. M.
COMP
(BYTES)
ROT. DE
TRAT
RDW
AND R1
2A
2
RANDR2
i
RDS
MOV R1
1E
2
RMOVR1
END
-
REND
SUB R2
F3
2
RSUBR2
...
...
...
...
...
...
...
Montadores
• Vamos agora para um novo exemplo.
• Seja o programa abaixo. Queremos montá-lo na memória do processador:
ORG 1F
DADO: DS 3
MOV R1, DADO
SUB R2, ROT
ROT: DW 10
End
Conteúdo
1F
00
20
00
21
00
TABELA DE PSEUDO-INSTRUÇÕES (TPI)
MNENÔNICO
COMP
(BYTES)
ROTINA DE
TRAT.
ORG
-
RORG
DW
1
DS
TABELA DE INSTRUÇÕES DE MÁQUINA (TIM)
MNC
C. M.
COMP
(BYTES)
ROT. DE
TRAT
RDW
AND R1
2A
2
RANDR2
i
RDS
MOV R1
1E
2
RMOVR1
END
-
REND
SUB R2
F3
2
RSUBR2
...
...
...
...
...
...
...
Montadores
• Vamos agora para um novo exemplo.
• Seja o programa abaixo. Queremos montá-lo na memória do processador:
ORG 1F
DADO: DS 3
MOV R1, DADO
SUB R2, ROT
ROT: DW 10
End
Conteúdo
1F
00
20
00
21
00
22
1E
23
1F
TABELA DE PSEUDO-INSTRUÇÕES (TPI)
MNENÔNICO
COMP
(BYTES)
ROTINA DE
TRAT.
ORG
-
RORG
DW
1
DS
TABELA DE INSTRUÇÕES DE MÁQUINA (TIM)
MNC
C. M.
COMP
(BYTES)
ROT. DE
TRAT
RDW
AND R1
2A
2
RANDR2
i
RDS
MOV R1
1E
2
RMOVR1
END
-
REND
SUB R2
F3
2
RSUBR2
...
...
...
...
...
...
...
Montadores
• Vamos agora para um novo exemplo.
• Seja o programa abaixo. Queremos montá-lo na memória do processador:
ORG 1F
DADO: DS 3
MOV R1, DADO
SUB R2, ROT
ROT: DW 10
Como
Neste momento,
o montador ainda
não conhece
o endereço de ROT!
solucionar?!
End
Conteúdo
1F
00
20
00
21
00
22
1E
23
24
1F
F3
25
???
TABELA DE PSEUDO-INSTRUÇÕES (TPI)
MNENÔNICO
COMP
(BYTES)
ROTINA DE
TRAT.
ORG
-
RORG
DW
1
DS
TABELA DE INSTRUÇÕES DE MÁQUINA (TIM)
MNC
C. M.
COMP
(BYTES)
ROT. DE
TRAT
RDW
AND R1
2A
2
RANDR2
i
RDS
MOV R1
1E
2
RMOVR1
END
-
REND
SUB R2
F3
2
RSUBR2
...
...
...
...
...
...
...
Montadores
Problema: Muitas vezes, ao deparar-se com um rótulo, o
montador pode não conhecer seu endereço ou
significado por não ter processado este símbolo
em instruções anteriores.
ORG 1F
DADO: DS 3
MOV R1, DADO
SUB R2, ROT
ROT: DW 10
Solução:
 Antes de começar a ler o código Assembly e
montar o código de máquina na memória, o
montador deve ler TODOS os SÍMBOLOS
(RÓTULOS) do programa e definir previamente
seus endereços.
 Os símbolos e seus endereços são alocados na
TABELA DE SÍMBOLOS.
Em seguida, o montador lê o código novamente
e o monta na memória.
MONTADOR DE DOIS PASSOS
Montadores
MONTADOR DE DOIS PASSOS
End
- Para realizar a tradução, os montadores
sãoConteúdo
geralmente
ORG 1Fcomo Montadores de dois1F
implementados
Passos; 00
DADO: DS 3
- Os dois
passos
significam que o Montador
deverá
00 ler o
20
MOV
R1, DADO
programa fonte duas vezes:
SUB R2, ROT
21
00
ROT: DW 10
1E
22
• PASSO 1
1F
23
- Montador lê o código fonte 24
e determina os
endereços para as referências simbólicas
(rótulos)
25
a partir das pseudo-instruções, construindo a TABELA
DE SÍMBOLOS.
TABELA DE PSEUDO-INSTRUÇÕES (TPI)
MNENÔNICO
• PASSO
COMP 2
(BYTES)
ORG
DW
DS
ROTINA DE
TRAT.
TABELA DE INSTRUÇÕES DE MÁQUINA (TIM)
MNC
C. M.
-O
COMP
ROT. DE
(BYTES)
TRAT
mnemônicos
RORG é lido novamente e os
código fonte
1das instruções
RDW
AND R1 são2A substituídos
2
e rótulos
porRANDR2
i códigos deRDS
2
RMOVR1
máquina. MOV R1 1E
END
-
REND
SUB R2
F3
2
RSUBR2
...
...
...
...
...
...
...
Montadores
• Vamos então executar o passo 1 e definir a TABELA DE SÍMBOLOS antes de
prosseguir com a montagem.
End
Conteúdo
1F
00
20
00
21
00
22
1E
23
24
1F
ORG 1F
DADO: DS 3
MOV R1, DADO
SUB R2, ROT
ROT: DW 10
TABELA DE SÍMBOLOS (TS)
SÍMBOLO
ENDEREÇO
DADO
1F
ROT
26
25
TABELA DE PSEUDO-INSTRUÇÕES (TPI)
MNENÔNICO
COMP
(BYTES)
ROTINA DE
TRAT.
ORG
-
RORG
DW
1
DS
TABELA DE INSTRUÇÕES DE MÁQUINA (TIM)
MNC
C. M.
COMP
(BYTES)
ROT. DE
TRAT
RDW
AND R1
2A
2
RANDR2
i
RDS
MOV R1
1E
2
RMOVR1
END
-
REND
SUB R2
F3
2
RSUBR2
...
...
...
...
...
...
...
Montadores
• Vamos então executar o passo 1 e definir a TABELA DE SÍMBOLOS antes de
prosseguir com a montagem.
End
Conteúdo
1F
00
20
00
21
00
22
1E
23
24
1F
F3
25
26
ORG 1F
DADO: DS 3
MOV R1, DADO
SUB R2, ROT
ROT: DW 10
TABELA DE SÍMBOLOS (TS)
SÍMBOLO
ENDEREÇO
DADO
1F
ROT
26
TABELA DE PSEUDO-INSTRUÇÕES (TPI)
MNENÔNICO
COMP
(BYTES)
ROTINA DE
TRAT.
ORG
-
RORG
DW
1
DS
TABELA DE INSTRUÇÕES DE MÁQUINA (TIM)
MNC
C. M.
COMP
(BYTES)
ROT. DE
TRAT
RDW
AND R1
2A
2
RANDR2
i
RDS
MOV R1
1E
2
RMOVR1
END
-
REND
SUB R2
F3
2
RSUBR2
...
...
...
...
...
...
...
Montadores
• Vamos então executar o passo 1 e definir a TABELA DE SÍMBOLOS antes de
prosseguir com a montagem.
End
Conteúdo
1F
00
20
00
21
00
22
1E
23
24
1F
F3
25
26
26
10
ORG 1F
DADO: DS 3
MOV R1, DADO
SUB R2, ROT
ROT: DW 10
TABELA DE SÍMBOLOS (TS)
SÍMBOLO
ENDEREÇO
DADO
1F
ROT
26
TABELA DE PSEUDO-INSTRUÇÕES (TPI)
MNENÔNICO
COMP
(BYTES)
ROTINA DE
TRAT.
ORG
-
RORG
DW
1
DS
TABELA DE INSTRUÇÕES DE MÁQUINA (TIM)
MNC
C. M.
COMP
(BYTES)
ROT. DE
TRAT
RDW
AND R1
2A
2
RANDR2
i
RDS
MOV R1
1E
2
RMOVR1
END
-
REND
SUB R2
F3
2
RSUBR2
...
...
...
...
...
...
...
Montadores
• Conforme vimos anteriormente, o montador é um
software de sistema, ou seja, por definição, um programa.
• Apesar de termos visto intuitivamente o seu
funcionamento, o montador é implementado em um
computador a partir de algoritmos que executam o
passo 1 e o passo 2.
• Vamos conhecer esses dois algoritmos e montar o
mesmo programa que montamos anteriormente...
Montadores
ALGORITMO DO PASSO 1 – PROCESSANDO SÍMBOLOS
ORG 1F
DADO: DS 3
MOV R1, DADO
SUB R2, ROT
ROT: DW 10
TPI
MENÔNICO
COMP.
ORG
-
DW
1
DS
i
END
-
TIM
Ii
CP
L
1
2
3
4
5
1F
22
24
26
27
3
2
2
1
TS
MNC
C. M.
COMP.
SÍMBOLO
END.
AND R1
2A
2
MOV R1
1E
2
DADO
ROT
1F
26
SUB R2
F3
2
Montadores
ALGORITMO DO PASSO 2 – GERANDO O CÓDIGO
ORG 1F
DADO: DS 3
MOV R1, DADO
SUB R2, ROT
ROT: DW 10
TPI
MENÔNICO
COMP.
ORG
-
DW
1
DS
i
END
-
TIM
Ii
CP
L
1
2
3
4
5
1F
22
24
26
27
3
2
2
1
TS
MNC
C. M.
COMP.
SÍMBOLO
END.
AND R1
2A
2
MOV R1
1E
2
DADO
ROT
1F
26
SUB R2
F3
2
End
Conteúdo
1F
20
21
00
00
00
22
1E
23
1F
24
F3
25
26
26
10
Montador de um passo
• Realiza uma única passagem pelo código fonte.
• A principal dificuldade em tentar montar um programa em uma única
passagem envolve referências a rótulos/símbolos que ainda não foram
definidos no programa fonte.
• Como lidar com referências futuras?
 Quando o montador encontra um operando da instrução que é um
símbolo ainda não definido, ele:
 Deixa o campo do operando da instrução vazio (tudo zero).
 Insere o símbolo usado como operando na tabela de símbolos, marcando esta
entrada da tabela como não-resolvida.
 Adiciona o endereço do campo de operando da instrução que faz referência
ao símbolo indefinido a uma lista de referências futuras associadas àquela
entrada da tabela de símbolos.
 Quando o montador encontra a definição de um símbolo, ele insere o
valor do contador de programa na entrada adequada dentro da tabela de
símbolos.
 Se há uma lista de referências futuras associada a este símbolo, o montador
insere o valor correto do símbolo em todas as instruções geradas
previamente que estejam nesta lista.
Desafio
• Um montador de dois passos pode lidar com qualquer tipo de
referência a símbolos futuros?
• Exemplo: A EQU B
 A pseudo-instrução EQU associa a um rótulo (no caso, A) o valor
do operando (B).
 Fácil de executar (passo 1) caso o valor de B tenha sido definido
previamente.
 Mas e se B ainda não foi definido?
 O montador de dois passos que vimos não conseguiria lidar com esta
situação.
 A razão desta limitação está associada ao fato de que as instruções são
montadas no passo 2, quando todos os símbolos já estão na tabela de
símbolos; as diretivas, porém, são “executadas” (têm efeito) apenas no
passo 1, quando símbolos futuros ainda não foram encontrados. Por
isso, pseudo-instruções, como EQU, não podem usar símbolos futuros.
Observações
• Tipicamente, o Montador executa sua atividade em dois passos:
 No Passo 1, constrói a Tabela de Símbolos, ou seja, determina os
rótulos e seus endereços.
 No Passo 2, constrói o Programa em Linguagem de Máquina e o
aloca na memória.
• Por fim, nem sempre o programa em linguagem de máquina é alocado
diretamente na memória pelo montador. Muitas vezes recorre-se a
outro programa dedicado exclusivamente ao carregamento na
memória. Esse programa é conhecido como
CARREGADOR
• Além disso, o programa pode utilizar recursos fornecidos por outras
rotinas, desenvolvidas por outros programadores. Assim, é preciso
realizar um outro processo que combina tais rotinas com o código
montado. O programa que realiza esta tarefa é conhecido como
LIGADOR
Download