next up previous contents
Next: Primeiro passo Up: Montadores em dois passos Previous: Montadores em dois passos   Sumário


Motivação

Considere como exemplo uma subrotina assembly que deverá transferir um valor armazenado em uma posição para outra posição de memória, usando o registrador D0 como armazenador temporário do dado. A subrotina terá o nome PGM, a posição de memória que tem o dado original será rotulada VALUE e a posição de memória destino será rotulada RESULT.

A listagem a seguir apresenta o código fonte, que é simplesmente uma seqüência de caracteres armazenada em um arquivo texto. Como descrito na Seção 4.1.1, strings na primeira coluna denotam rótulos para as posições de memória associadas; a segunda coluna contém strings que representam as instruções (mnemônicos), e a terceira coluna contém strings representando os argumentos das instruções.


\begin{listing}{1}
DATA EQU $6000
PROGRAM EQU $4000
ORG DATA
VALUE DS.W 1
...
...
ORG PROGRAM
PGM MOVE.W VALUE,D0
MOVE.W D0,RESULT
RTS
END PGM
\end{listing}

No primeiro passo de execução, o montador deve gerar a Tabela de Símbolos. Para o exemplo acima, a Tabela de Símbolos associada deve conter a seguinte informação:

Símbolo Valor
DATA $6000
PGM $4000
PROGRAM $4000
RESULT $6002
VALUE $6000

Há duas situações que devem ser consideradas para possibilitar a geração dessa tabela. A primeira situação, a mais simples, é quando a definição do símbolo é derivada de uma pseudo-instrução EQU. Esse caso é o mais simples porque toda a informação necessária para compor a entrada da tabela de símbolos está explícita na instrução. Assim foram definidos os símbolos DATA e PROGRAM na Tabela de Símbolos.

A segunda situação envolve a definição de símbolos usados como rótulos em outras instruções -- no exemplo, o caso de VALUE, RESULT e PGM. Essa situação é mais complexa por necessitar conhecimento da posição no segmento ou na memória que a instrução estará ocupando para poder efetivamente definir seu valor. Para tanto, o contador de localização (LC) deve ser atualizado durante o primeiro passo de acordo com o espaço reservado para cada instrução, informação que deve ser derivada a partir das tabelas de instruções de máquina (MOT) e de pseudo-instruções (POT).

No segundo passo do montador, o código deve ser efetivamente gerado. No caso desse exemplo, dois segmentos serão produzidos.

O primeiro segmento corresponde a uma área de dados, gerada a partir da interpretação das pseudo-instruções DS -- eventualmente, a interpretação de pseudo-instruções DC também poderiam gerar informação para esse segmento, se estivessem presente. O segmento gerado contém a seguinte informação:

Posição $6000 $6002
Conteúdo $0000 $0000

O segundo segmento corresponde à área de instruções, contendo o código de máquina associado a cada instrução. Para gerar esse código, o montador teve que (i) obter a codificação de máquina para cada instrução e (ii) resolver as referências simbólicas presentes nos operandos das instruções.

O conteúdo do segundo segmento, assumindo que endereços absolutos são representados como long word, contém:

Posição $4000 $4002 $4004 $4006 $4008 $400A $400C
Conteúdo $3038 $0000 $6000 $31C0 $0000 $6002 $4E75

Na seqüência, serão analisados os procedimentos que o montador deve realizar para possibilitar essa geração de código.


next up previous contents
Next: Primeiro passo Up: Montadores em dois passos Previous: Montadores em dois passos   Sumário
Ivan L. M. Ricarte 2003-02-14