9. Software de Sistema - Montadores
(capítulo 9 do livro texto)
Carregadores Montador
Compiladores
Sistema Operacional
(Gerenciador de Processador, Memória, E/S, etc)
Microprogramas Circuitos Físicos Ligadores Processador de Macro Depuradores Programas Utilitários Programas de Aplicação Usuário Software Aplicativo Software de Sistema Hardware
Software de Sistema – cont.
Software de Sistema é um conjunto de programas que define a maneira como os
diversos elementos do hardware devem operar de modo a resolver os problemas dos usuários de forma simples e eficiente.
Software de Sistema – cont.
Sem um software de sistema os usuários seriam responsáveis pelo controle direto de todas as operações executadas pelos elementos de hardware.
• os programas seriam escritos em linguagem de máquina;
• o programador seria responsável pelo carregamento, na memória, do programa a ser executado;
• não seria fácil utilizar os mecanismos de entrada e saída, exigindo-se
conhecimento das peculiaridades de cada periférico e fazendo com que o esforço de programação fosse desviado do problema a ser resolvido;
• o programador seria responsável pelo gerenciamento do uso da memória para garantir a completa execução de um programa;
• em caso de sistemas com múltiplos usuários, o gerenciamento dos recursos existentes e a sincronização entre os diversos programas seriam
9.1 Montadores (Assemblers)
Um Montador é um programa cujos dados de entrada são sequências de caracteres que constituem o programa em Linguagem Simbólica, de Montagem ou
"Assembly", e cujo resultado é um conjunto de palavras de máquina (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 ser a entrada de outro programa, o Carregador, que após algum processamento para adequar os endereços ao bloco de memória
Montadores (Assemblers) – cont.
MONTADOR tabelas Programa em linguagem de montagem ( Assembly ) Programa em linguagem de máquina9.2 Linguagem de Montagem – L. Assembly
FORMATO GENÉRICO DE INSTRUÇÃO
<RÓTULO> <CÓDIGO DE OPERAÇÃO> <OPERANDOS/MODIFICADORES> <COMENTÁRIOS>
RÓTULO - composto de variáveis alfanuméricas, iniciando com letras, identifica endereços onde são armazenados instruções e dados;
CÓDIGO DE OPERAÇÃO - conjunto de letras que formam mnemônicos para as instruções;
OPERANDOS - identificam variáveis, pelos rótulos, ou registradores da UCP;
MODIFICADORES - identificam modos de endereçamento;
Linguagem de Montagem – cont.
Exemplo:
ROT: MOVE R1,R2 ; armazena o conteúdo do registrador R1 em R2
DELIMITADORES
Os campos da instrução em linguagem simbólica são separados por delimitadores.
Novamente, estes delimitadores são definidos pelo projetista do MONTADOR.
Exemplos de delimitadores:
espaço - entre campos : - separa o rótulo
; - separa o comentário , - separa operandos
Linguagem de Montagem – cont.
Exemplos de Instruções Assembly
• Máquina de 1 endereço
LDA S1 ; load S1 em Acc ou Acc (S1) ADD S2 ; Acc (Acc) + (S2)
STORE R ; store R ou R (Acc) Exemplo de programa de Saída de dado (isolada)
LOOP: IN RS ; leitura do registrador RS TSTBIT 2 ; bit 2 de RS=1 ?
JNZ LOOP ; loop de espera ou saída de dado ? LDA dado ; Acc (dado)
OUT RD ; porta RD (Acc) : : : :
RS: EQU 10000 ; porta de status da interface RD: EQU 10002 ; porta de dados (saída)
Linguagem de Montagem – cont.
Exemplos de Instruções Assembly – cont.
• Máquina de 2 endereços
MOVE S1, R ; R (S1)
ADD S2, R ; R (R) + (S2)
Exemplo de programação de Interface (E/S mapeada) PROG: MOVE #10, RC ; RC 10
: : : : : : : :
Linguagem de Montagem – cont.
Exemplos de Pseudo-Instruções
Pseudo-instruções facilitam a programação. São diretrizes para os programas montadores, não gerando código executável.
DC / DW / DB - atribui a uma posição da memória um valor (dado);
CINCO: DW 5 ; a posição de memória referenciada por CINCO recebe o valor 5
DS - define área alocada em quantidade de palavras/bytes
AREA: DS 20 ; reserva 20 posições :
MOVE #3,AREA+5 ; acesso à área especificada
EQU - define rótulo
Linguagem de Montagem – cont.
Exemplos de Pseudo-Instruções – cont.
ORG - define origem
ORG 1000 ; o que segue (dado ou instrução) estará na posição 1000
ADR - define que a posição contém o endereço do rótulo especificado
X1: DW 12 :
AX1: ADR X1 ; a posição AX1 contém o endereço X1
END - define fim de programa
Exemplo: ...
ORG 5000 X1: DW 12
: : : :
9.3 Tarefas de um Montador
Para traduzir o programa em linguagem simbólica para um programa em linguagem de máquina, o Montador deve :
a. substituir os mnemônicos da instrução e modificadores de endereço pelos equivalentes binários;
b. determinar posições de memória, relativas ao programa, para os endereços simbólicos (rótulos);
c. substituir todas as referências a um dado endereço simbólico pelo endereço binário correspondente.
Para determinar posições de memória para os endereços simbólicos (b), o montador utiliza a informação dada pelo programador nas pseudoinstruções; estas não são traduzidas para Linguagem de Máquina, servindo somente para orientar o montador na geração do programa em linguagem de máquina.
Tarefas de um Montador-cont.
exemplo de tradução por um montador (palavra de 16 bits) – Motorola 68000
END n : : : : 0000000000000100 28 0011000111000001 26 MOVE D1, C 5 0000000000000010 24 1101001000111000 22 LOOP: ADD B, D1 4 0000000000000000 20 0011001000111000 18 MOVE A,D1 3 0000000000000000 16 : : : : 0000000000000000 4 C: DS 7 2 0000000000010100 2 B: DW 20 1 0000000000001010 0 A: DW 10 0 Código Objeto End. Relativo Instrução N° comando
Tarefas de um Montador-cont.
exemplo de tradução por um montador (palavra de 16 bits) – Motorola 68000
END n : : : : 0000000000000100 28 0011000111000001 26 MOVE D1, C 5 0000000000000010 24 1101001000111000 22 LOOP: ADD B, D1 4 0000000000000000 20 0011001000111000 18 MOVE A,D1 3 0000000000000000 16 : : : : 0000000000000000 4 C: DS 7 2 00000000.00010100 2 B: DW 20 1 00000000.00001010 0 A: DW 10 0 Código Objeto End. Relativo Instrução N° comando byte 0 , 1 2, 3 7 x 2 bytes end.A end.C end.B modo Abs. - Reg.
Código de máquina (68000)
0 0 x x y y y z z z y y y z z z
size op.destino op.fonte
MOVE A, D1
001
word=11
111
seguido do valor do rótulo A (seu endereço)
Na transparência 472: endereços 18 a 21
(em bytes)
end. 18
end. 20
modo
000
9.4 Estruturas de dados no processo de
montagem
Montador
(ASM)
P L M
T P I
T I M
P F
T S
Programa Fonte Programa em Linguagem de Máquina
Tabela de Símbolos
Tabela de Instruções de Máquina
Estruturas de dados no processo de
montagem – cont.
Tabela de Instruções de Máquina - TIM
• TIM associa o mnemônico de uma instrução com a instrução de máquina em binário • a tabela TIM – a seguir - pode possuir vários campos com informações relevantes.
O número de campos que compõe a tabela TIM depende de características específicas do processador e da sintaxe da linguagem simbólica.
Dois campos estão sempre presentes na tabela TIM :
MNEMÔNICO - onde estão os mnemônicos das instruções, definidos pela sintaxe da linguagem simbólica.
CÓDIGO DE OPERAÇÃO - onde estão os códigos de operação das instruções de máquina.
Outros campos podem completar a informação :
COMPRIMENTO DA INSTRUÇÃO (em bytes) - contém o comprimento da instrução.
ROTINA DE TRATAMENTO DE OPERANDOS - onde estão relacionadas as
rotinas que o montador deve ativar para gerar o endereço dos operandos, quando estes são expressões ou dependem dos modos de endereçamento.
Estruturas de dados no processo de
montagem – cont.
Tabela de Instruções de Máquina – TIM – cont.
Exemplo de tabela TIM - TABELA DE INSTRUÇÕES DE MÁQUINA
: : : : RRTS 2 0100 1110 0111 0101 RTS RMOV 2 a 6 00xx ???????? ?????? MOVE : : : : Rotina de Tratamento de operandos Comprimento (bytes) Código de Operação Mnemônico
Estruturas de dados no processo de
montagem – cont.
Tabela de Pseudo-Instruções – TPI
• relaciona o mnemônico da pseudoinstrução com a rotina que o montador deve ativar para processar a pseudoinstrução
• a tabela TPI pode possuir vários campos com informações relevantes.
Dois campos estão sempre presentes na tabela TPI :
MNEMÔNICO - onde estão os mnemônicos das pseudoinstruções, definidos pela sintaxe da linguagem simbólica.
ROTINA DE TRATAMENTO DE OPERANDOS - onde estão relacionadas as rotinas que o montador deve ativar para processar a pseudoinstrução.
Outros campos podem completar a informação, como :
COMPRIMENTO DA PSEUDOINSTRUÇÃO - contém o número de bytes ou palavras que deve ser reservado para
pseudoinstruções como em DB (Define Byte) ou DW (Define Word).
Estruturas de dados no processo de
montagem – cont.
Tabela de Pseudo-Instruções – TPI – cont.
Exemplo de tabela TPI – Tabela de Pseudoinstruções
: : : : 4 DC.L : 2 DC.W : 1 DC.B RDW 2 DW RORG -ORG : : : Rotina de Tratamento Comprimento (bytes) Mnemônico
Estruturas de dados no processo de
montagem – cont.
Tabela de Símbolos - TS
A Tabela de Símbolos é construída durante a montagem e relaciona cada
símbolo (ou rótulo) definido no código fonte com um valor em representação
binária do seu endereço de memória.
Exemplo de tabela TS – Tabela de Símbolos
(para o exemplo da transparência 472)
0022 LOOP 0004 C 0002 B 0000 A Valor (em decimal) Símbolo
9.5 O processo de montagem
Para realizar a tradução, os Montadores são geralmente implementados como
Montadores de dois Passos.
Os dois Passos significam que o Montador deverá ler o programa fonte duas vezes.
Existem Montadores de 1 Passo, onde o programa fonte é lido uma única vez; porém, este fato implica em restrições no programa fonte (ver Exercícios 3, 5 e 6 do livro texto).
Para o Montador de dois Passos:
. no primeiro passo o Montador lê o código fonte e determina os endereços
para as referências simbólicas, construindo a Tabela de Símbolos.
. no segundo passo o código fonte é lido novamente e os mnemônicos das instruções e referências simbólicas são substituídos por códigos de
O processo de montagem – cont.
As tarefas associadas aos dois passos são:
PASSO 1 - Definir símbolos (rótulos)
• processar pseudoinstruções, utilizando a Tabela de Pseudoinstruções; • determinar o comprimento da instrução de máquina, de acordo com a
Tabela de Instruções de Máquina;
• atualizar o contador de posições CP, de acordo com o comprimento de cada instrução ou pseudoinstrução;
• guardar os valores dos símbolos (endereço equivalente) na Tabela de Símbolos.
PASSO 2 - Gerar o programa em linguagem de máquina
• substituir símbolos por valores indicados na Tabela de Símbolos; • gerar instruções de máquina;
não encontrou
O processo de montagem – cont.
CP ← 0 lê CP ← valor CP ← CP + L PASSO 2 L ← 0 busca TPI busca TIM L ← comprimento dos dados L ← comprimento da instrução guardar rótulo = CP na TS encontrou encontrou ORG EQU END DW DS não encontrou
Passo 1 – processar símbolos
O processo de montagem – cont.
Passo 2 – gerar códigos
CP ← 0 lê CP ← valor CP ← CP + L FIM busca TPI
busca TIM calcula / insereconstante L ← comprimento dos dados L ← comprimento da instrução processa C.O. processa operandos insere no PLM encontrou encontrou
ORG EQU END DS
DW
não encontrou
A cada instrução lida é feita a busca nas tabelas TPI e TIM. No Passo 2 não é necessário prover um
tratamento de erro quando a instrução não pertencer às tabelas TIM e TPI; o
tratamento de erro é ativado no Passo 1 e o Passo 2 não é executado.
No Passo 2 o contador de posições CP é zerado e o programa fonte é lido novamente.
O processo de montagem – Fluxo de Dados
As estruturas de dados manipuladas nos passos 1 e 2 são:
• Programa Montador (ASM); • Contador de posições (CP);
• Tabela de Instruções de Máquina (TIM); • Tabela de Pseudoinstruções (TPI);
• Tabela de Símbolos (TS);
• Programa em linguagem de Máquina (PLM).
PLM ASM PASSO 2 PASSO 1 TIM TPI CP CP TS PF
9.6 Exemplo
ORG 0100H START: MOVE DADO,R0 VOLTA: DCR R0 JNZ VOLTA MVI #11H,R1 HLT DADO: DW 20H END
Para ilustrar as diferenças entre processadores, neste exemplo, diferentemente do apresentado na
transparência 472 temos palavra de 8 bits (1 byte) bem como outros códigos de operação e comprimentos de instrução.
Exemplo – cont.
TIM - TABELA DE INSTRUÇÕES DE MÁQUINA
: : : : RDCR 1 30 DCR R0 RJMP 3 60 JNZ RHLT 1 00 HLT RMVI 2 21 MVI R1 RMOV 3 11 MOVE R0 Rotina de Tratamento de operandos Comprimento (bytes) Código de Operação (hexadecimal) Mnemônico (*)
Exemplo – cont.
: : RDW DW RDS DS REND END RORG ORG Rotina de Tratamento MnemônicoExemplo – cont.
No Passo 1 é gerada a tabela TS a partir do processamento do
comprimento das instruções conforme mostrado a seguir.
Endereço (CP)
0100 START: MOVE DADO,R0 0101 0102 0103 VOLTA: DCR R0 0104 JNZ VOLTA 0105 0106 0107 MVI #11H,R1 0108 0109 HLT 010A DADO: DW 20H
Exemplo – cont.
No Passo 1 é gerada a tabela TS a partir do processamento do
comprimento das instruções conforme mostrado a seguir.
Endereço (CP)
0100 START: MOVE DADO,R0 0101 0102 0103 VOLTA: DCR R0 0104 JNZ VOLTA 0105 0106 0107 MVI #11H,R1 0108 0109 HLT 010A DADO: DW 20H 010A DADO 0103 VOLTA 0100 START Valor Símbolo Tabela de Símbolos
Exemplo – cont.
Seguindo o algoritmo descrito no Passo 2 e utilizando a tabela gerada no Passo 1, obtemos o seguinte PLM (devemos observar que os endereços dos operandos estão armazenados em 2 bytes, por exemplo nos endereços 101-102 e 105-106) :
Endereço PLM (em hexadecimal)
0100 11 0101 01 0102 0A 0103 30 0104 60 0105 01 0106 03 0107 21 0108 11 0109 00 010A 20