Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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
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.
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
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
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.