Com as instruções de movimentação podemos mover dados entre os registradores do 8086. As instruções de permuta trocam valores entre registradores. Já as instruções de cópia, trabalham utilizando valores em memória apontados pelos registradores DI e SI.

Notação utilizada
MEM Endereço de memória
<- Atribuição
<-> Troca de valores
; Comentário
REG Registrador de uso geral
SREG Registrador de segmento
MEM Endereço de memória

Quando uma instrução, indepedente do grupo, utiliza dois operando ou argumentos, a leitura da operação pode ser feita como abaixo. A leitura é feita da direita para esquerda.

Sintaxe
MNEMÔNICO destino, origem
MNEMÔNICO operando1, operando2

Mais informações sobre registradores e flags podem ser vistas em Registradores e Flags.

A instrução MOV é utilizada para mover valores de um registradores ou valor em memória. Essa instrução não altera as flags de status.

Regras:
MOV não pode ser utilizado para movimentar dados para CS e IP
MOV não pode ser utilizado para mover dados entre registradores de segmento. Um registrador de uso geral deve ser usado.
MOV não pode mover dados imediatos para registradores de segmento. Um registrador de uso geral deve ser usado.
Operação
destino <- origem
Operandos:
MOV REG, MEM
MOV MEM, REG
MOV REG, REG
MOV MEM, IME
MOV REG, IME
MOV SEG, MEM
MOV MEM, SEG
MOV REG, SEG
MOV SEG, REG
Exemplo:
MOV DS, AX        
MOV BX, 1FFh      
MOV [BX], AX

Com a instrução MOVSB, podemos mover bytes de um endereço de memória origem para um endereço de destino. A origem e destino são definidos por DS:[SI] e ES:[DI] respectivamente, tendo os registradores DI e SI alterados de acordo com a flag Direction(D) é usada para definir a direção.

Operação:
ES:[DI] <- DS:[SI]

Flag D = 0 
     SI <- SI + 1
     DI <- DI + 1
Flag D = 1
     SI <- SI - 1
     DI <- DI - 1
Operandos:
-
Exemplo:
MOV SI, vetor1      ;origem
MOV DI, vetor2      ;destino
MOV CX, 5           ;contador
CLD                 ;incremental
REP MOVSB           ;loop

vetor1 DB -5,-6,-7,-8,-9    ; vetor de cinco posições
vetor2 DB 5 DUP(0)          ; vetor com espaço reservado

Semelhante à instrução MOVSB, MOVSW é utilizada para mover words de um endereço de memória origem para um endereço de destino. A origem e destino são definidos por DS:[SI] e ES:[DI] respectivamente tendo os registradores DI e SI atualizados de acordo com a flag Direction(D) que define a direção.

Operação:
ES:[DI] <- DS:[SI]

Flag D = 0 
     SI <- SI + 2
     DI <- DI + 2
Flag D = 1
     SI <- SI - 2
     DI <- DI - 2
Operandos:
-
Exemplo:
MOV SI, vetor1      ;origem
MOV DI, vetor2      ;destino
MOV CX, 5           ;contador
CLD                 ;incremental
REP MOVSW           ;loop

vetor1 DW 256,257,258,259,360  ; vetor de cinco posições
vetor2 DW 5 DUP(0)             ; vetor com espaço reservado

A instrução LODSB carrega um byte de em endereço de memória para o registrador AL. O indexador SI é utilizado como DS:[SI] e atualizado de acordo com a flag Direction.

Operação
AL <- DS:[SI]

Flag D = 0 
     SI <- SI + 1
Flag D = 1
     SI <- SI - 1
Operandos:
-
Exemplo:
MOV SI, vetor1      ;origem
CLD                 ;
LODSB               ; AL <- 'O'

vetor1 DB 'O','l','a'

Utilizando a instrução LODSW podemos mover um valor word contido em um endereço de memória para o registrador AX. SI é utilizado para formar o endereço de origem como DS:[SI] e também atualizado com base na flag D.

Operação
AX <- DS:[SI]

Flag D = 0 
     SI <- SI + 2
Flag D = 1
     SI <- SI - 2
Operandos:
-
Exemplo:
MOV SI, vetor1      ;origem
CLD                 ;
LODSW               ; AL <- 'O'

vetor1 DW 'O','l','a'

A instrução LDS carrega um endereço doubleword em que uma primeira word é carregada em registrador e uma segunda word é carregada no registrador de segmento DS, respectivamente.

Operação:
REG <- 1a word
  DS <- 2a word
Operandos:
REG, MEM
Exemplo:
LDS DX, vetor1
vetor1  DW  0001h, A000h

Semelhante a instrução LDS, a LES carrega um endereço doubleword em que uma primeira word é carregada em um registrador e a uma segunda word é carregada no registrador ES, ao invés de DS.

Operação:
REG <- 1a word
  ES <- 2a word
Operandos:
REG, MEM
Exemplo:
LES DX, vetor1
vetor1  DW  0001h, A000h

A instrução XCHG, Exchange, realiza a permuta ou troca de valores entre registradores ou registradores e valor contido em memória. Diferente da instrução MOV, a origem e destino são alterados.

Operação:
origem <-> destino
Operandos:
REG, MEM
MEM, REG
REG, REG
MEM, IME
REG, IME
Exemplo:
MOV AH, -0Fh
XCHG AL, AH 

A instrução XLATB move ou copia um valor byte de um endereço de memória. O endereço é formado como DS:[BX + AL] para o registrador AL. O endereço BX + AL tem esse último registrado, AL, como sendo não-sinalizado.

Operação
AL <- DS:[BX + (não-sinalizado)AL]
Operandos:
-
Exemplo:
MOV BX, vetor
MOV AL, 3
XLATB 
; AL = 3

vetor DB 0, 1, 2, 3, 4
  1. 18/02/2025 - revisão 1 - ajustes pontuais
  2. 03/12/2024 - versão inicial