Interface de Entrada e Saída (I/O) do microprocessador 8086

Se a primeira função de um microprocessador é fazer operações (matemática, computacionais), a segunda função dele é trocar essas informações.
De nada adianta realizar cálculos e operações complexas, numa velocidade incrível, se o resultado destes processos não puder ser enviado para o mundo externo.

E é sobre isso que iremos falar nesse artigo sobre o microprocessador Intel 8086/8088, sobre a interface de entrada e saída (I/O).

Instruções de entrada e saída (I/O Instructions)

A maneira mais comum que temos de controlar a entrada e saída é através das instruções IN e OUT, da linguagem de programação Assembly. Elas servem para transferirmos dados, fazer a comunicação, entre o 8086 e os dispositivos de entrada e saída.

IN, em inglês, é dentro.
Ou seja, usamos a instrução IN para entrada de dados.

OUT, em inglês, é fora.
Portanto, usamos, a instrução OU para a saída de dados.

Essas instruções usam o registro acumulador (AX, que é composto pelo AL e o AH) do microprocessador Intel para transferir dados entre o 8086 e os dispositivos de entrada e saída, onde o endereço de I/O fica armazenado no registrador DX.

Exemplos de instruções Assembly de entrada e saída:
IN AH, p8  -> o registro AL recebe o byte de dados da porta p8
IN AX, DX  -> AX recebe o endereço da porta contido em DX
OUT p8, AH -> o byte sai do registrador AH para a porta p8
OUT DX, AX -> o endereço da porta armazenada em AX vai para a porta endereçada por DX

Sempre que alguma dessas instruções rodam, o 8086 terá informações sobre endereço em sua via de endereços (barramento).
Essas informações de endereços são compostas de 8 bits, ou seja 1 byte, que variam de:
$$A_0 - A_7$$

Como a via do microprocessador Intel 8086 é de 16 bits, o seguintes restantes tem valores lógicos nulos, 0:
$$A_8 - A_{15}$$

Esses 8 bits podem selecionar 256 endereços de periféricos de entrada e saída (como mouse, teclado, monitor etc).

Caso usemos as instruções INS e OUTS, esse endereçamento de dispositivos de entrada e saída I/O é feito usando-se o registro DX:

INSB (byte), INSW (word) e INSD (doubleword)
OUTSB, OUTSW e OUTSD

Ao contrário das instruções IN e OUT, as INS e OUTS não transferem dados entre o acumulador (AX) e os dispositivos de entrada e saída, mas entre a memória e os dispositivos, diretamente.
Na memória o endereço fica armazenado nos registradores ES:DI, cujos ponteiros são automaticamente in/decrementados (depende do registro de flag DF).

Nenhum comentário:

Veja também: