Modos de endereçamento dos microprocessadores Intel x86

Nesse artigo de nosso curso sobre os microprocessadores Intel x86 (8086 e 8088), vamos estudar os modos de endereçamento usado nas instruções deste processador, como a MOV, JMP e CALL.

Vamos aprender quais tipos de endereçamentos existem, para que cada um serve, onde são usados, como são feito os mais diferentes tipos e modos de endereçamento, bem como suas relações com as instruções Assembly que alteram o fluxo de funcionamento de um programa escrito nessa linguagem, que é a usada nos microprocessadores da Intel.


Modos de endereçamento do 8086

Por que endereçar?

Para ler uma informação na memória, você precisa do endereço dela, de onde começa até onde vai.
Para escrever, você precisa do endereço de onde está a informação e para onde ela deve ir.
Para apagar um dado, você precisa saber o endereço em que ele está.

Resumindo: é preciso endereçar, para praticamente tudo são necessários endereços, sejam nos registros ou na memória, para dados.

Modos e tipos de endereçamento - A instrução MOV
A instrução mais usada no endereçamento de dados é a MOV.
Sua sintaxe geral é a seguinte:

MOV destino, origem

Ou seja, ela move o que está em 'origem' para 'destino'.
É importante salientar que o que está armazenado em 'origem' permanece intacto, e as informações que estão em 'destino' são as informações que estão em 'origem'.
Ou seja, embora o comando MOV se lembre a palavra mover (ou move, em inglês), o que ela faz na verdade é COPIAR informação de um lugar para outro, e não mover, pois os dados permanecem inalterada na origem.

Por exemplo, para colocar os dados do registro BX no registro AX, usamos a instrução MOV da seguinte maneira:
MOV AX, BX

Tipos de endereçamento

A instrução MOV é muita poderosa e flexível, sendo possível usá-la nos seguintes modos de endereçamento:

  • Endereçamento de registro

Nesse modo ocorre de registro ou memória para outro registro ou memória. Ou seja, os dados saem do registro para outro registro ou para outra memória, bem como podem sair da memória para um registro ou para outro local da memória.

  • Endereçamento imediato

Nesse modo, se transfere da fonte de forma imediata, através de um número constante em hexadecimal.
Por exemplo: MOV AH, 2112H
Ou seja, estamos transferindo diretamente do endereço 2112H para o registro AH (poderia ser para outro local na memória).

  • Endereçamento direto

Move uma informação entre um endereço de memória e um registro.

  • Endereçamento indireto de registro 

Ocorre entre registro e local da memória, onde esta é endereçada por um registro de índice ou registro de base, que são BP, BX(BH e BL), SI e DI. Usado em endereços de segmentos de dado do offset.
Por exemplo: MOV AX, [CX]
[CX] é o endereço de offset do segmento de dados, e em AX temos um endereço de memória.

  • Endereçamento de Base+Índice

Igual ao modo de endereçamento indireto de registro, porém ele também usa o registro de índice (SI ou DI).
Por exemplo: MOV [BX + DI], CH

  • Endereçamento relativo de registro 

Também usa registro de índice ou registro de base, mas com algum deslocamento no endereço.
Por exemplo:
MOV AH,[BH + 2]
MOV AH,VETOR[BL]

  • Endereçamento relativo de Base+Índice

Igual ao caso anterior, mas usando ambos registros (de índice e de base), além do deslocamento.
Por exemplo: MOV AX,[BX + SI + 4]

Um comentário:

Anônimo disse...

como faz com endereçamento de registro? pode me dar um exemplo?

Veja também: