Você está na página 1de 6

Universidade Metodista de Piracicaba

Centro de Ciências Exatas

TURBO PASCAL

REGISTRADORES

José Antonio D'Alkmin

novembro/98
Registradores

- Introdução

Um Registrador pode ser entendido como sendo uma variável como outra qualquer que
possui uma certa função específica. Cada registrador possui um limite (mínimo e
máximo) para armazenamento de informações. Os principais registradores são
chamados de registradores de 16 bits porque podem armazenar um número de 16
dígitos binários no máximo (0 a 65535) ou FFFF hexadecimal.

- Função dos Registradores

Os registradores de 16 Bits são classificados em AX, BX, CX e DX. Cada um é formado


por dois registradores de 8 bits (o primeiro armazena os bits altos “High”e o segundo
armazena os bits baixos do registrador “Low”.)
Dessa forma, o primeiro registrador de 8 bits de AX (que armazena os bits altos de AX) é
denominado AH) e o segundo registrador de 8 bits (que armazena os bits baixos de AX) é
denominado AL. Logo, se o valor de AX = 255 (1111111111111111 em dígitos binários),
AH = 11111111 e AL = 11111111 ambos na base binária. A Mesma coisa acontece com os
registradores BX, CX e DX.

Registrador Descrição
AX / AH e AL Acumulador, mas pode ser utilizado para
outra finalidade.
BX / BH e BL Índice, mas geralmente é utilizado para
gerenciamento de memória,
CX / CH e CL Contador, utilizado em loops para contar o
número de vezes
DX / DH e DL Dados – Semelhante ao bx, só que ao
contrário dele, ele endereça as portas de
hardware.
SI Índice de Origem – Em instruções que
movem blocos de memória ele é o endereço
inicial do bloco.
DI Índice de Destino – Em instruções que
movem blocos de memória ele é o endereço
final do bloco.
BP Ponteiro da Base – Tem função semelhante
ao BX
DS Segmento de Dados – Este registrador
contém o valor de segmento, todas as
instruções de acesso à memória vão se
utilizar deste valor para acessar a memória.
ES Segmento de Dados Extra – Somente um
segmento de dados não é suficiente.
SS Segmento de Pilha – Semelhante ao DS e ao
ES, mas ele é utilizado pelo processador para
indicar o segmento em que o irá usar para
armazenar os dados da pilha.
SP Ponteiro da Pilha – Também utilizado pelo
processador para ver o endereço onde serão
armazenados os dados da pilha.
CS Segmento de Código – O processador utiliza
esse registrador para saber em qual segmento
está o programa que está sendo executado no
momento
IP Ponteiro de Instruções – Assim como o SP, o
processador usa este registrador para saber
em qual endereço da memória está a
instrução a ser executada no momento.

Os registradores Ax, Bx, Cx, Dx, Si, Di, Bp podem ser alterados livremente, eles devem ter
valores específicos em algumas instruções, mas geralmente podem ter qualquer valor.

- Classificação dos Registradores

Registradores de Propostas Genéricas


AH/AL AX Acumulador
BH/BL BX Base
CH/CL CX Contador
DH/DL DX Dado

Registradores Ponteiros (Ponteiros propriamente ditos)


SI Índice de Origem
DI Índice de Destino
IP Ponteiro de Instruções

Registradores de Segmentos
CS Segmento de Código
DS Segmento de Dados
SS Segmento da Pilha
ES Segmento Extra
Registradores de Pilha
SP Pointeiro para a pilha
BP Ponteiro da Base

- Registradores extendidos de 32 Bits (386 e superiores)


Nos processadores 386 e superior encontramos os registradores de 32 bits, todos os
registradores do processador com exceção dos registradores de segmento, receberam o
prefixo E, esse prefixo identifica que o registrador é um registrador extendido, vejamos o
exemplo do ax, que é de 16 bits, mas se nos referirmos a ele como eax, o compilador
entenderá que estamos nos referindo a um registrador de 32 bits, assim como eax, temos o
ebx, ecx, edx, esi, edi, ebp, esp, eip, mas ao contrário dos registradores de 16 bits que são
divididos em dois de 8 bits , nos registradores de 32 bits isso não acontece.
Veja o gráfico abaixo :

AH AL Extendido

AX E

- Como acessar os Registradores na Linguagem Turbo Pascal

Como vimos anteriormente, cada registrador possui uma função específica, principalmente
quando os utilizamos para acessar interrupções (Rotinas da Bios para Acesso ao Hardware),
mas podem ser utilizados livremente quando não tivermos essa finalidade. Para acessar os
registradores na linguagem Turbo Pascal, basta utilizarmos a biblioteca DOS na seção Uses
do Programa e declararmos uma variável como do tipo Registers. A estrutura Registers é
um Record cujos campos possuem nomes dos próprios registradores.
Exemplo 1-)

Program Test;

Uses crt,dos;

Var
Registradores: registers;

Begin
Registradores.AX:= $FF; { Coloca o valor FF em Hexadecimal (255 em decimal) dentro
{do Registrador AX }

Registradores.BX:= 45; { Coloca o valor 45 dentro do Registrador BX, etc... }


End.

Os Registradores não possuem muita utilidade se não forem utilizados para acessar o hardware através
das rotinas da ROM-BIOS. Uma das rotinas mais fáceis de utilizar é a rotina que acessa o Mouse.

Exemplo 2-)

Program Mouse;

Uses Crt, Dos;

Var
Registradores: Registers;

Procedure MostraMouse;
Begin
Registradores.Ax:= 1; { Move o valor 1 para dentro do registrador AX – Função p/ mostrar o
{ Mouse) }
Intr($33,Registradores); (Comunicação com a interrupção 33 em hexadecimal) - Mouse
End;

Procedure EscondeMouse;
Begin
Registradores.Ax:= 0; {Move o valor 0 para o registrador AX – Função p/ esconder o mouse }
Intr($33, Registradores);
End;

Begin
MostraMouse;
Repeat
Until Keypressed;
EscondeMouse;
End.

Você também pode gostar