Objetivos
Clique sobre os objetivos listados abaixo para navegar até o conteúdo desejado.
Instruções de Movimentação, Cópia e Permuta
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
XLATB - Translate Byte to AL
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
Histórico de atualizações
- 18/02/2025 - revisão 1 - ajustes pontuais
- 03/12/2024 - versão inicial
Os cursos oferecidos nesta página são cursos fornecidos por parceiros. Ao comprar um curso clicando
em seu banner, você está ajudando a manter o projeto TutorialDev vivo. Os sites dos cursos parceiros utilizam cookies.