• Nenhum resultado encontrado

2.4 ARQUITETURA DO MICROPROCESSADOR 8088

2.4.4 REGISTRADORES INTERNOS

O 8088 tem internamente um total de 14 registradores de 16 bits. Santos (1989) os divide em cinco grupos:

a) registradores de propósito geral;

b) registradores de índice e ponteiros;

c) registradores de segmento;

d) contador de programa ou ponteiro da instrução;

e) flags (sinalizadores).

No quadro 40 são mostrados os registradores de cada grupo.

QUADRO 40 - REGISTRADORES DO 8088

2.4.4.1 REGISTRADORES DE PROPÓSITO GERAL

Segundo Santos (1989), ao todo são 4 registradores desse tipo, todos de 16 bits: AX, BX, CX e DX. As metades alta e baixa de cada um deles podem ser usadas como registradores de 8 bits. Assim, têm-se os seguintes registradores de 8 bits: AL e AH, BL e BH, CL e CH, DL e DH.

Para muitas operações aritméticas e lógicas, pode-se utilizar qualquer um destes registradores. Porém existem instruções que os usam com certas funções especializadas.

Instruções de multiplicação e divisão concentram-se em AL e AX. Instruções que se repetem por inúmeras vezes, como a rotação do conteúdo de um registrador para a esquerda, ou uma instrução string que move blocos de memória de uma posição à outra, podem requerer a especificação do número de vezes ou de words a mover, nos registradores CL e CX. Devido seus usos especializados em algumas instruções, os registradores de propósito geral recebem os seguintes nomes descritivos:

a) AX é o Acumulador, por concentrar resultados em algumas instruções aritméticas;

b) BX é chamado Base, sendo o único registrador de propósito geral que pode ser usado para gerar um endereço de memória para acessar dados dentro do segmento de dados;

c) CX é o Contador, por conter, normalmente, o número de vezes que se quer repetir um laço ou uma instrução string;

d) DX é chamado Registrador de Dados, por ser usado para especificar um endereço usado nas instruções de entrada e saída.

8 bits AH, AL, BH, BL, CH, CL, DH, DL

16 bits AX, BX, CX, DX

Ponteiro SP, BP

Índice SI, DI

Segmento CS, SS, DS, ES

Contador de programa IP

Sinalizadores FLAGS

Fonte: adaptado de Santos (1989)

2.4.4.2 REGISTRADORES DE ÍNDICE E PONTEIROS

Os registradores deste grupo (BP, SP, SI e DI) são usados para armazenar endereços de offset dentro de segmentos, onde os dados devem ser acessados. O par SP e BP trabalha dentro do Segmento da Pilha, enquanto o par SI e DI trabalha normalmente no Segmento de Dados (Santos, 1989).

O registrador SP é referenciado pelas instruções PUSH e POP para determinar o endereço de offset do topo da pilha, sugerindo assim o nome Stack Pointer (Ponteiro da Pilha) para ele. O BP é usado para indicar o endereço de uma área de dados, dentro da pilha, onde foram deixados parâmetros para manipulação por uma sub-rotina. Assim, a rotina poderá retirar os parâmetros, por exemplo, uma string digitada pelo usuário, usando o valor contido no BP, que indica o início da área de dados. O nome descritivo para o BP é Base Pointer (Ponteiro da Base). Passagem de parâmetros, através da pilha, de uma rotina à outra é uma prática muito freqüente dos procedures em linguagens de alto nível, como Pascal e C. A linguagem FURBOL também utiliza a pilha para a passagem de parâmetros.

Os registradores SI e DI também são utilizados para referenciar dados na área de dados do programa. O uso especializado do par encontra-se nas instruções string MOVS, CMPS, SCAS e LODS, onde se assume que SI contém o endereço de início da área de dados (fonte), daí o nome Source Index, e o DI contém o endereço de destino de dados, daí o nome ser Destination Index. Através das instruções string, pode-se copiar blocos de memória de uma área a outra, preencher um bloco com um valor constante, comparar o conteúdo de dois blocos etc.

2.4.4.3 REGISTRADORES DE SEGMENTO E O PONTEIRO DA INSTRUÇÃO

Segundo Santos (1989), os registradores de segmento (CS, DS, SS e ES) são usados para gerar endereços de memória de 20 bits. Identificam os quatro segmentos endereçáveis naquele momento pelo programa. Cada um deles identifica um bloco de memória de 64 Kbytes onde estão, o código do programa (CS, Code Segment), os dados (DS, Data Segment), a pilha (SS, Stack Segment) e um segmento adicional para dados (ES, Extra Segment). Isto significa que dentro de um espaço de 1 Mbyte, apenas 256 Kbytes são realmente acessíveis num momento de programa. Para acessar o conteúdo de uma posição não abrangida pelos segmentos correntes, precisa-se alterar o valor do registrador associado ao novo segmento.

Os códigos de todas as instruções são buscados no Segmento de Código. Dentro deste segmento, o registrador IP indica o endereço de offset, ou o deslocamento dentro daquele segmento, onde está a instrução a ser executada. Assim, ele atua como um Ponteiro da Instrução (Instruction Pointer). Por exemplo, considerando que o registrador de Segmento de Código (CS) contenha o valor hexadecimal 113A e que IP tenha o valor 210C, assim, o código da próxima instrução a ser executada inicia-se no endereço hexadecimal 134AC (113Ah * 10h + 210Ch = 134ACh).

Conclui-se que o registrador IP associa-se sempre ao CS para formar o endereço de memória onde se encontra a instrução; da mesma forma o SP e o BP associam-se ao SS para formar o endereço de dado na pilha; e o BX, o DI e o SI associam-se ao DS para formar o endereço do dado no segmento de dados, exceto nas instruções string onde o DI trabalhará com o ES.

O registrador IP não é diretamente acessível ao programador, sendo alterado indiretamente pelas instruções JMP, CALL, RET, INT e IRET, que modificam o fluxo seqüencial normal de execução. O que estas instruções fazem é modificar o valor do registrador IP.

2.4.4.4 SINALIZADORES

“O microprocessador 8088 contém em seu interior um total de 9 sinalizadores, também conhecidos como flags. Eles existem para indicar resultados obtidos sempre na última operação lógica ou aritmética executada, ou para definir o comportamento do microprocessador na execução de certas instruções. Estes 9 flags estão agrupados, para facilidade de acesso, em um registrador de 16 bits, chamado de Registrador de Flags. Dentro deste registrador de 16 bits, apenas nove são efetivamente usados” (Santos, 1989).

O significado de cada bit sinalizador no registrador de flags é apresentado no quadro 41.

QUADRO 41 - SINALIZADORES DO REGISTRADOR DE FLAGS