Está en la página 1de 4

Processadores INTEL

O conjunto de
registradores
Registradores, nada mais são do que variáveis só que ao invés de se
situarem em memória como toda variável se situam dentro do próprio
processador.
São estruturas de armazenamento particulares ao processador que nós
programadores Assembly teremos acesso.
Também devemos lembrar que pelo fato de já estarem dentro do
processador o acesso a tais estruturas será muito mais rápido do que o acesso à
uma variável em memória.
Importante que se diga que o conjunto de registradores difere de
processador para processador, e assim ao estudarmos um novo modelo devemos
ter a preocupação de conhecer seu conjunto de registradores.
No caso dos processadores da INTEL existem um grupo de registradores
que são básicos e acompanham os processadores desta marca desde o bom e
velho 8088 e são justamente esses registradores que iremos agora apresentar.
O 8088 apresentava um conjunto de 14 registradores, e como tal
processador era um processador de 16 bits, cada um de seus registradores era de
16 bits.
Volto a ressaltar que tais registradores se fazem presentes até os dias de
hoje nos mais recentes processadores.
Estes registradores se encontram divididos e agrupados de acordo com a
sua função e assim teremos:

• Registradores de Segmento
• Registadores de Deslocamento ou Ponteiros
• Registradores de uso geral
• e os Flags

Os Registradores de Segmento são em número de quatro e são destinados


exclusivamente ao armazenamento de endereços de segmento de memória.

Registradores Função
CS – Code Segment Reservado ao armazenamento do endereço de segmento
onde estarão armazenados os nossos códigos, ou
melhor, nosso programa.
DS – Data Segment Reservado ao armazenamento do endereço de segmento
onde estarão armazenados os nossos dados.
ES – Extra Segment Reservado ao armazenamento do endereço de um

Organização e Arquitetura de Computadores 15


segundo segmento onde estarão armazenados os nossos
dados, utilizado apenas se necessário.
SS – Stack Segment Reservado ao armazenamento do endereço de segmento
onde estará armazenada a nossa pilha.
* os quatro registradores são de 16 bits.

Porém como já vimos se trabalharmos apenas com endereços de segmento


não chegaremos a lugar nenhum uma vez que um segmento aponta para uma
área relativamente grande de memória.
Ao lado do endereço de um segmento sempre encontraremos o endereço
de Offset, que na verdade apontará para o byte desejado dentro do segmento
especificado.
Assim teremos um outro conjunto de registradores chamado de
Registradores de Deslocamento ou Ponteiros.
Os Registradores de Deslocamento são em número de cinco e são
destinados exclusivamente ao armazenamento de endereços de Offset como
podemos conferir a seguir.

Registradores Função
IP – Instruction Pointer Reservado ao armazenamento do endereço de offset da
próxima instrução a ser executada pelo processador.
SI – Source Index Usado exclusivamente em operações de movimentação
de strings quando deve apontar para o offset da string
que será movimentada.
DI – Destination Index Usado exclusivamente em operações de movimentação
de strings quando deve apontar para o offset do destino
da string a ser movimentada.
SP – Stack Pointer Reservado ao armazenamento do endereço de offset do
topo da pilha utilizada pelo processador.
BP – Base Pointer Reservado ao armazenamento do endereço de offset da
base da pilha utilizada pelo processador.
* os cinco registradores são de 16 bits.

Da mesma forma que apenas com endereços de segmentos não


chegávamos a lugar nenhum, apenas com endereços de Offset também não.
Assim é importante frisarmos que trabalharemos sempre com os
registradores de deslocamento em par com os registradores de segmento,
fazendo papel de offset.
Assim teremos diferentes pares a serem utilizados de acordo com nossa
necessidade, é o que podemos visualizar a seguir:

Pares Função
CS:IP Armazenar o endereço segmento:offset da próxima
instrução a ser executada pelo processador.
DS:SI Usado exclusivamente em operações de movimentação
de strings quando o par deve apontar para a string a ser

Organização e Arquitetura de Computadores 16


movida, a string fonte.
ES:DI Usado exclusivamente em operações de movimentação
de strings quando o par deve apontar o destino para o
qual a string apontada por DS:SI deve ser movida, a
string destino.
SS:SP Armazenar o endereço segmento:offset do topo da pilha
SS:BP Armazenar o endereço segmento:offset da base da pilha

Como vimos, os nove registradores apresentados até o momento tem


função bastante específica e todos estão limitados a trabalhar com endereços de
memória.
Existe um outro grupo de quatro registradores cuja utilidade dos mesmos é
mais flexível, ou seja, podem ser usados para qualquer finalidade. Esse grupo é
conhecido pelo nome de Registradores de Uso Geral, os quais apresentamos a
seguir.

Registradores Função
AX Normalmente utilizado como Acumulador, usado
preferencialmente para receber resultados de cálculos.
BX Pode ser utilizado para armazenar endereços de offsets,
como um ponteiro, ou se preferir um registrador de
deslocamento.
CX Normalmente utilizado como Contador, usado
preferencialmente em controles de looping.
DX Utilizado para o armazenamento de dados temporários ao
processador
* os quatro registradores são de 16 bits.

Perceba que apesar do nome, cada registradore de uso geral tem uma
função específica, no entanto, você realmente pode utilizá-los como melhor
preferir, a função acima descrita para cada um deles é apenas uma sugestão que
em alguns casos nos traz algumas facilidades.
Por exemplo o uso de CX nos controles de looping nos permitira o uso de
instruções de controle de repetição automáticas como LOOP e REP que por si só
se preocupam em incrementar/decrementar o contador e verificar se o final do
looping já foi alcançado.
Também observe que BX pode ser utilizado para armazenar endereços de
Offset e quando assim for usado fará par com o registrador de segmento DS,
constituindo assim o par:

DS:BX

Ainda sobre os registradores de uso geral, os quatro registradores


apresentados podem ser utilizados na íntegra como foram apresentados ou em
suas metades de acordo com nossa conveniência.

Organização e Arquitetura de Computadores 17


Se você não entendeu lembre-se de que quando você cria uma variável em
seus programas você define para estas um tipo e dependendo desse tipo você
definirá também o tamanho das variáveis, assim existirão variáveis de tamanho 8
bits, 16 bits, 32 bits e assim por diante.
Quando programamos em Assembly também podemos, dependendo de
nossa necessidade e de nossos dados precisar de registradores de 16 bits ou de 8
bits.
Se nossa necessidade for por registradores de 16 bits, nosso problema esta
resolvido pois todos os registradores apresentados até então são de 16 bits, mas
se precisarmos de registradores de 8 bits poderemos trabalhar com apenas
metade dos registradores de uso geral.

AX
AH AL
BX
BX BL
CX
CH CL
CX
DH DL
8 bits 8 bits

Perceba que cada um dos registradores de uso geral que tem originalmente
tamanho de 16 bits, se dividem em duas metades de 8 bits cada, a metade alta (H
– High) e a metade baixa (L – Low).
Assim se nos referirmos a AX estaremos trabalhando com um registrador
de 16 bits, mas se nos referirmos a AH estaremos nos referindo a um registrador
de 8 bits, mais especificamente a metade alta do registrador AX.

Organização e Arquitetura de Computadores 18

También podría gustarte