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.
|
|
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 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 :
|
|
|
|
|
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.
![]() |
![]() |
![]() |
|