Escolar Documentos
Profissional Documentos
Cultura Documentos
TURBO PASCAL
REGISTRADORES
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.
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.
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
AH AL Extendido
AX E
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 }
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;
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.