Conteúdo:

Instruções de transferência
Instruções de carga
Instruções de pilha
Dicionário de Computação (em inglês)

Instruções de transferência.

São usadas para mover o conteúdo dos operadores. Cada instrução pode ser usada com diferentes modos de endereçamento.

MOV
MOVS (MOVSB) (MOVSW)

INSTRUÇÃO MOV

Propósito: Transferência de dados entre células de memória, registradores e o acumulador.

Sintaxe:

MOV Destino,Fonte

Destino é o lugar para onde o dado será movido e Fonte é o lugar onde o dado está.

Os diferentes movimentos de dados permitidos para esta instrução são:


*Destino: memória.                  Fonte: acumulador

*Destino: acumulador.               Fonte: memória

*Destino: registrador de segmento.  Fonte: memória/registrador

*Destino: memória/regitrador.       Fonte: registrador de segmento

*Destino: registrador.              Fonte: registrador

*Destino: registrador.  	    Fonte: memória

*Destino: memória.  	            Fonte: registrador

*Destino: registrador.  	    Fonte: dado imediato

*Destino: memória.  	            Fonte: dado imediato

Exemplo:


  MOV AX,0006h

  MOV BX,AX

  MOV AX,4C00h

  INT 21h

Este pequeno programa move o valor 0006h para o registrador AX, então ele move o conteúdo de AX (0006h) para o registrador BX, e finalmente move o valor 4C00h para o registrador AX para terminar a execução com a opção 4C da interrupção 21h.

INSTRUÇÕES MOVS (MOVSB) (MOVSW)

Propósito: Mover byte ou cadeias de palavra da fonte, endereçada por SI, para o destino endereçado por DI.

Sintaxe:

MOVS

Este comando não necessita de parâmetros uma vez que toma como endereço fonte o conteúdo do registrador SI e como destino o conteúdo de DI. A seguinte seqüência de instruções ilustra isso:


MOV SI, OFFSET VAR1

MOV DI, OFFSET VAR2

MOVS

Primeiro inicializamos os valores de SI e DI com os endereços das variáveis VAR1 e VAR2 respectivamente, então após a execução de MOVS o conteúdo de VAR1 é copiado para VAR2.

As instruções MOVSB e MOVSW são usadas do mesmo modo que MOVS, a primeira move um byte e a segunda move uma palavra.

Instruções de carga.

São instruções específicas para registradores, usadas para carregar bytes ou cadeias de bytes num registrador.

LODS (LODSB) (LODSW)
LAHF
LDS
LEA
LES

INSTRUÇÕES LODS (LODSB) (LODSW)

Propósito: Carregar cadeias de um byte ou uma palavra para o acumulador.

Sintaxe:

LODS

Esta instrução toma a cadeia encontrada no endereço especificado por SI, a carrega para o registrador AL (ou AX) e adiciona ou subtrai, dependendo do estado de DF, para SI se é uma transferência de bytes ou de palavras.


MOV SI, OFFSET VAR1

LODS



Na primeira linha vemos a carga do endereço de VAR1 em SI e na segunda é tomado o conteúdo daquele local para o regiustrador AL.

Os comandos LODSB e LODSW são usados do mesmo modo, o primeiro carrega um byte e o segundo uma palavra (usa todo o registrador AX).

INSTRUÇÃO LAHF

Propósito: Transferir o conteúdo dos flags para o registrador AH.

Sintaxe:

LAHF

Esta instrução é útil para verificar o estado dos flags durante a execução do nosso programa.

Os flags são deixados na seguinte ordem dentro do registrador:


SF ZF ?? AF ?? PF ?? CF



O "??" significa que haverá um valor indefinido naqueles bits.

INSTRUÇÃO LDS

Propósito: Carregar o registrador de segmento de dados.

Sintaxe:

LDS destino,fonte

O operador fonte deve ser uma double word na memória. A palavra associada com o maior endereço é transferida para DS, em outras palavras isto é tomado como o endereço de segmento. A palavra associada com o menor endereço é o endereço de deslocamento e é depositada no registrador indicado como destino.

INSTRUÇÃO LEA

Propósito: Carregar o endereço do operador fonte.

Sintaxe:

LEA destino,fonte

O operador fonte deve estar localizado na memória, e seu deslocamento é colocado no registrador de índice ou ponteiro especificado no destino.

Para ilustrar uma das facilidades que temos com este comando, vejamos:


MOV SI,OFFSET VAR1



É equivalente a:


LEA SI,VAR1



É muito provável que para o programador é muito mais fácil criar programas grandes usando este último formato.

INSTRUÇÃO LES

Propósito: Carregar o registrador de segmento extra

Sintaxe:

LES destino,fonte

O operador fonte deve ser uma palavra dupla na memória. O conteúdo da palavra com endereço maior é interpretado como o endereço do segmento e é colocado em ES. A palavra com endereço menor é o endereço do deslocamento e é colocada no registrador especificado no parâmetro de destino.

Instruções de manipulação da pilha.

Estas instruções permitem usar a pilha para armazenar ou recuperar dados.

POP
POPF
PUSH
PUSHF

INSTRUÇÃO POP

Propósito: Recuperar uma parte de informação da pilha.

Sintaxe:

POP destino

Esta instrução transfere o último valor armazenado na pilha para o operador de destino, e incrementa de 2 o registrador SP.

Este incremento é duplo pelo fato de que a pilha do mais alto endereço de memória para o mais baixo, e a pilha trabalha apenas com palavras, 2 bytes, logo deve ser 2 o incremento de SP, na realidade 2 está sendo subtraído do tamanho real da pilha.

INSTRUÇÃO POPF

Propósito: Extrair os flags armazenados na pilha.

Sintaxe:

POPF

Este comando transfere os bits da palavra armazenada na parte mais alta da pilha para registrador de flag.

O modo da transferência é como se segue:


BIT    FLAG



  0     CF

  2     PF

  4     AF

  6     ZF

  7     SF

  8     TF

  9     IF

 10     DF

 11     OF

Os locais dos bits são os mesmos para o uso da instrução PUSHF.

Uma vez feita a transferência o registrador SP é incrementado de 2, conforme vimos anteriormente.

INSTRUÇÃO PUSH

Propósito: Coloca uma palavra na pilha.

Sintaxe:

PUSH fonte

A instrução PUSH decrementa de dois o valor de SP e então transfere o conteúdo do operador fonte para o novo endereço desultante no registrador recém modificado.

O decremento no endereço é duplo pelo fato de que quando os valores são adicionados à pilha, que cresce do maior para o menor endereço, logo quando subraímos de 2 o registrador SP o que fazemos é incrementar o tamanho da pilha em dois bytes, que é a única quantidade de informação que a pilha pode manusear em cada entrada e saída.

INSTRUÇÃO PUSHF

Propósito: Colocar os valores dos flags na pilha.

Sintaxe:

PUSHF

Este comando decrementa de 2 o valor do registrador SP e então o conteúdo do registrador de flag é transferido para a pilha, no endereço indicado por SP.

Os flags são armazenados na memória da mesma forma que o comando POPF.

WG
Powered by WebGlimpse