Universidade Metodista de Piracicaba
Centro de Ciências Exatas
 
 
 
 
 
 
 

TURBO PASCAL

REGISTRADORES
 
 
 
 
 
 
 


 
 
 
 
 

José Antonio D'Alkmin



        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 a tabela 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.



 

Dúvidas, críticas, sugestões??? Clique aqui.