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 00110000A 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.