Mnemonicos suportados

Diretivas

Uma linha de diretiva contém comandos para o montador.

  • A definição de áreas de variáveis;
  • Endereços de memória onde a montagem deve ser feita.
  • Criar uma sub-rotina (procedure).

Uma diretiva (pseudo-instrução) desenvolve alguma função durante o processo de montagem. Não produz qualquer código executável. Pode reservar e inicializar  espaço e dados do programa.

 

Formato de Diretivas

Formato Geral:

[Nome] Diretiva [Operandos] [; Comentário]

Diretivas implementadas:

  • DB
  • DW
  • EQU

 

Diretiva DB

Função: reserva um byte para variáveis, permitindo opcionalmente inicializá-lo com um valor decimal. Formato:

[nomeVariavel] DB valorInicial [; Comentário]

 

Diretiva DW

Função: reserva dois bytes para variáveis, permitindo opcionalmente inicializá-los com um valor decimal. Formato:

[nomeVariavel] DW valorInicial [; Comentário]

 

Diretiva EQU

Função: define o valor de um símbolo a ser usado posteriormente, no lugar de um dado imediato, define uma constante. Formato:

[nomeConstante] EQU valorConstante [; Comentário]

 

Diretiva HLT

Função: usado para acabar com a execução (parar o processador). Formato:

HLT [; Comentário]

 

Diretivas PROC e ENDP, e Instruções CALL e RET

As diretivas PROC e ENDP servem para delimitar uma sub-rotina (intra-segmento). Para “chamar” esta sub-rotina, é utilizada a instrução CALL, seguido do nome da sub-rotina. A instrução RET indica o retorno do procedimento. Segue o exemplo:

ROTINA1 PROC  ; inicio da sub-rotina ROTINA1 

...     ; instruções da sub-rotina ROTINA1 

RET

ROTINA1 ENDP  ; fim da sub-rotina ROTINA1 

 

CALL  ROTINA1   ; chamada intra-segmento

 

Labels(rótulo)

O rótulo deve ser definido uma única vez, e não pode ser redefinido. Deve ser escrito no início da linha e seguido de dois-pontos.

 

Instruções

Uma linha de instrução contém um mnemônico de uma instrução do simulador. Cada linha gera exatamente uma instrução de máquina. Formato geral:

Mnemônico [Operando1], [Operando2] [; Comentário]

Nos operandos instanciados na memória (variáveis) o acesso será feito de dois modos: endereço e conteúdo. Por exemplo, para acesso ao endereço da variável x usa-se somente o nome da variável, para acesso ao conteúdo de x usa-se colchetes, [x].

Conjunto de instruções suportadas:

  • Para movimentação de dados;
  • Para operações aritméticas/lógicas;
  • Desvio do fluxo do programa.

 

Movimentação de Dados

  • Mnemônico MOV: copia o segundo operando (fonte) para o primeiro operando (destino). Os tipos de operandos suportados são:

MOV REG, memória
MOV memória, REG
MOV REG, REG
MOV memória, imediato
MOV REG, imediato

 

Operações aritméticas/lógicas

  • Mnemônico ADD: soma o primeiro operando com o segundo, o resultado fica armazenado no primeiro operando.
  • Mnemônico SUB: subtrai o primeiro operando pelo segundo, o resultado fica armazenado no primeiro operando.
  • Mnemônico AND: “E” entre todos os bits de cada operando, o resultado fica armazenado no primeiro operando.
  • Mnemônico OR: “OU” entre todos os bits de cada operando, o resultado fica armazenado no primeiro operando.
  • Mnemônico XOR: “OU EXCLUSIVO” entre todos os bits de cada operando, o resultado fica armazenado no primeiro operando.

Os tipos de operandos suportados pelos mnemônicos acima são:

[Mnemônico] REG, memória
[Mnemônico] memória, REG
[Mnemônico] REG, REG
[Mnemônico] memória, imediato
[Mnemônico] REG, imediato

  • Mnemônico MUL: multiplicação não-sinalizada do primeiro operando pelo segundo, sendo que o primeiro operando obrigatoriamente é o registrador AL. O resultado da operação sempre será armazenado no registrador AX. Os tipos de operandos suportados são:

MUL memória
MUL REG

  • Mnemônico DIV: divisão não-sinalizada do primeiro operando pelo segundo, sendo que o primeiro operando obrigatoriamente é o registrador AX. O quociente da operação sempre será armazenado no registrador AL e o resto da operação no registrador AH. Os tipos de operandos suportados são:

DIV memória
DIV REG

  • Mnemônico NOT: inverte cada bit do operando.

Os tipos de operandos suportados são:

NOT REG
NOT memória

 

  • Mnemônico CMP: compara o primeiro operando com o segundo, e em seguida usa-se um "salto" para concluir a comparação (desviando o fluxo do programa).

Exemplo de utilização:

CMP AL, 2
JE label ; pode ser outro "salto" a ser utilizado, "saltosque serão tratados no tópico abaixo.

 

Desvio do Fluxo do Programa

  • Mnemônico JMP: Salto incondicional, precisa ser passado apenas o rótulo, que este jump transfere o controle para outra parte do programa.

JMP label

  • Mnemônicos JE, JNE, JG, JGE, JL e JLE: Saltos que representam as operações de comparação ==,!=,>,>=,<,<= respectivamente, sua utilização é a mesma da instrução JMP.

*Operações equivalentes a linguagem C.

 

  • Mnemônico CALL: transfere o controle para uma sub-rotina (procedure).

CALL procedure

 

Copyright © 2007 Yamada-san. All Rights Reserved.