next up previous contents
Next: Estrutura de programa assembly Up: Montadores Previous: Montadores   Sumário


Programas assembly

O montador recebe como entrada um arquivo texto cujas linhas são instruções assembly. Embora o formato específico de um arquivo-fonte em assembly possa sofrer ligeiras variações de acordo com o sistema, a descrição a seguir cobre a maior parte dos aspectos relevantes para a operação do montador.

O seguinte trecho de código apresenta um típico programa assembly:

 POS      DS.W      1
 ; Busca 0 na sequencia de inteiros
 SRCH0    MOVEA.L   #DATUM,A0   ; (DATUM) definido alhures
          MOVE.L    #DATUM,D0   ; guarda inicio
          CLR.W     D1
 LOOP     CMP.W     (A0)+,D1
          BNE       LOOP
          SUB.L     A0,D0       
          MOVE.W    D0,POS
          RTS
          END

Cada linha desse programa pode conter instruções ou comentários; uma linha é de comentário quando contém no início da linha o caráter ; (ponto-e-vírgula).

As linhas de instrução contêm até quatro campos. A primeira coluna pode apresentar um rótulo opcional. A função básica do rótulo é criar uma identificação para poder referenciar simbolicamente a linha de código rotulada. O montador pode reconhecer rótulos pela presença de caracteres distintos de ; a partir da primeira posição da linha.

A segunda coluna contém o campo de operação, que especifica a instrução que será montada. A operação pode ser tanto uma instrução de máquina, a exemplo de MOVE e RTS, como uma pseudo-instrução, como DS. Os sufixos às instruções presentes no exemplo indicam o tamanho do operando -- no caso dos processadores da família 68K, .B (byte), .W (word) ou .L (long word) respectivamente para um, dois ou quatro bytes. Se for omitido, o tamanho word é usado como padrão.

Dependendo da instrução presente na segundo coluna, o montador sabe se deve esperar zero, um ou dois operandos na terceira coluna, que corresponde ao campo de operandos. Operandos podem fazer referências a registradores do processador (no caso do 68K, registradores de dados D0 a D7, de endereços A0 a A7, contador de programas PC e, para algumas instruções, de códigos de condição CCR), a símbolos definidos pelos programas através de rótulos e a valores constantes.

A especificação do valor de uma constante que representa um operando imediato, indicado pelo prefixo #, pode se dar sob diversas formas de representação. Por exemplo, nas instruções

          MOVE.B    #48,D0
          MOVE.B    #$30,D0
          MOVE.B    #@60,D0
          MOVE.B    #%110000,D0
          MOVE.B    #'0',D0

o operando imediato é sempre o mesmo valor, representado respectivamente como um número decimal (sem prefixo adicional), hexadecimal (prefixo $), octal (prefixo @), binário (prefixo %) e ASCII (entre aspas simples). Qualquer que fosse a forma selecionada, o código de máquina gerado para essa instrução seria o mesmo:

    00010000 00111100
    00000000 00110000
A especificação do código de máquina para as principais instruções da família 68K usadas neste texto são apresentadas no Apêndice B.

Seqüências de caracteres (strings) são definidas também entre aspas simples. Por exemplo, 'ABC' define uma seqüência de três bytes com valores $41, $42 e $43.

A quarta e última coluna, também opcional, corresponde ao campo de comentários. No exemplo, cada comentário é iniciado pelo caráter ;, após o qual todo o restante da linha pode ser ignorado pelo montador.

Através do uso de pseudo-instruções e dos rótulos, é possível fazer referências a posições de memória e a variáveis através de identificadores simbólicos. Isso permite que o programador possa usar esses identificadores simbólicos como operandos de suas instruções sem ter que necessariamente saber a qual posição de memória a variável ou instrução está alocada. A regra para a composição de tais identificadores pode apresentar diferenças entre montadores distintos. Em geral, identificadores podem incluir letras minúsculas ou maiúsculas, dígitos e o caráter _, mas não podem ser iniciados por um dígito.



Subsections
next up previous contents
Next: Estrutura de programa assembly Up: Montadores Previous: Montadores   Sumário
Ivan L. M. Ricarte 2003-02-14