Registradores

Propaganda
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
AX / AH e AL
BX / BH e BL
CX / CH e CL
DX / DH e DL
SI
DI
BP
DS
Descrição
Acumulador, mas pode ser utilizado para
outra finalidade.
Índice, mas geralmente é utilizado para
gerenciamento de memória,
Contador, utilizado em loops para contar o
número de vezes
Dados – Semelhante ao bx, só que ao
contrário dele, ele endereça as portas de
hardware.
Índice de Origem – Em instruções que
movem blocos de memória ele é o endereço
inicial do bloco.
Índice de Destino – Em instruções que
movem blocos de memória ele é o endereço
final do bloco.
Ponteiro da Base – Tem função semelhante
ao BX
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.
Segmento de Dados Extra – Somente um
segmento de dados não é suficiente.
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.
Ponteiro da Pilha – Também utilizado pelo
processador para ver o endereço onde serão
armazenados os dados da pilha.
Segmento de Código – O processador utiliza
esse registrador para saber em qual segmento
está o programa que está sendo executado no
momento
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.
ES
SS
SP
CS
IP
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
AH/AL
BH/BL
CH/CL
DH/DL
Registradores de Propostas Genéricas
AX
Acumulador
BX
Base
CX
Contador
DX
Dado
Registradores Ponteiros (Ponteiros propriamente ditos)
SI
Índice de Origem
DI
Índice de Destino
IP
Ponteiro de Instruções
CS
DS
SS
ES
Registradores de Segmentos
Segmento de Código
Segmento de Dados
Segmento da Pilha
Segmento Extra
Registradores de Pilha
SP
BP
-
Pointeiro para a pilha
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
AX
Extendido
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.
Download