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.