Baixe o app para aproveitar ainda mais
Prévia do material em texto
Arquitetura de Computadores (ARQI1) ADS171 Aula 08: Registradores Conceito Ao comentarmos sobre memórias, falamos que o processador armazena alguns dados de forma temporária em uma espécie de variável, interna, chamada de registrador. Cada processador tem um conjunto de registradores, capazes de armazenar dados de vários tamanhos, porém, apenas números binários (na prática, qualquer valor convertido para binário, até mesmo o código de um caracter). Cada registrador faz parte de um conjunto, conforme o processador e também tem um nome, utilizado para identificar o registrador nas instruções. . Grupos de registradores Tomemos à princípio os processadores Intel 8086/88. Estes possuem um conjunto de 14 registradores de 16 bits cada um. Estes registradores se encontram divididos e agrupados de acordo com a sua função, e assim teremos os seguintes grupos de registradores: Registradores de Segmento Registadores de Deslocamento e Ponteiros (ou Base e Indexação) Registradores de Uso Geral Registradores de Controle e Status Conforme o fabricante e o tipo de processador, podem ser agrupados de forma diferente. Registradores de segmento Os registradores de segmento tem como finalidade indicar ao processador a localização, na memória, de um determinado segmento. Nestes processadores (8086/88), pode-se trabalhar com 4 registradores distintos ao mesmo tempo, cada um contendo um tipo diferente de informação. Registradores de segmento O registrador de segmento CS – Code Segment – é utilizado para armazenar a localização do segmento destinado a abrigar o código de programa – as instruções. Para alterarmos para um outro segmento que também contenha código, basta colocar um novo valor em CS. Assim, o processador “enxergará” um outro segmento de memória, com outro código. O registrador de segmento DS – Data Segment – é utilizado para apontar o segmento onde estarão armazenados os dados, sejam eles de um determinado aplicativo ou do sistema operacional Registradores de segmento O ES – Extra Segment – é um registrador de segmento auxiliar, para apontar para um outro segmento que também contenha dados, complementando a função de DS. O registrador de segmento SS – Stack Segment - é utilizado para indicar o segmento de pilha – uma área de armazenamento temporário que se utiliza da técnica de armazenamento LIFO (Last In, First Out – último a entrar é o primeiro a sair, ou simplesmente “pilha de memória”). Todos os registradores de segmento são de 16 bits. Registradores de Base e Índice Os registradores deste grupo tem como principal função apontar um offset (ponteiro) dentro de um determinado segmento. Como o offset sempre apontará para um endereço dentro de um segmento, tais registradores sempre trabalharão associados à registradores de segmento. Registradores de Base e Índice SP tem como função apontar o topo da área de armazenamento temporário conhecida por pilha (stack). Também é conhecido por “Apontador de topo”. BP apontará qualquer endereço dentro da pilha. SI e DI muitas vezes trabalham em conjunto nas operações de transferência de dados, onde SI (SOURCE) apontará para um offset onde se encontra um determinado dado e DI (DESTINATION) o offset para onde o dado será transferido. Assim, teremos estes registradores trabalhando em par com os registradores de segmento, conforme a seguinte tabela: DS com SI ES com DI SS com SP ou BP Registradores de Uso Geral Os registradores de uso geral, como o nome já diz, servem para propósito geral. Registradores de Base e Índice Cada um destes registradores tem dupla identidade: podem ser acessados como um registrador de 16 bits, onde seu nome é seguido da letra X, ou como dois registradores de 8 bits, sendo um chamado de parte alta – letra H (high) após o nome – por representar a parte mais significativa de uma word, e parte baixa – letra L (low) por representar a parte menos significativa de uma word. Veja o exemplo à seguir: AX 1234h teremos, simultaneamente, AH com 12h e AL com 34h; AL 56h e AH 78h termos, simultaneamente, AX com 7856h; Registradores de Base e Índice Apesar de o nome ser Uso Geral, determinadas instruções utilizam-se dos registradores de uso geral com uma finalidade específica. Veja a tabela: AX – acumulador para operandos e resultados BX – offset para o segmento DS CX – contador DX – indicador de endereço de dispositivos de E/S Registradores de Controle e Status Há dois registradores bem distintos neste grupo: o IP – Instruction Pointer e o Flag (ou Flags) O IP – em alguns casos chamado de PC – Program Counter - tem por finalidade indicar, dentro do segmento de código (CS – code segment) o offset da próxima instrução à ser executada, sendo automaticamente atualizado pelo processador após a busca da instrução. Desvios no programa, tais como laços de repetição, ou estruturas de decisão, implicam em desvios no programa, que consistem em alterar o valor do IP. Registradores de Controle e Status Já o FLAG não é na verdade um registrador, mas sim um conjunto de sinalizadores – daí o nome Flags (sinalizadores). Os Flags serão analisados e operados por determinadas instruções e cada um deles, sendo um bit, conterá apenas os valores 1 ou 0, sendo que estes indicarão, sinalizarão, a ocorrência de determinada situação dentro do processador. Assim, temos os Flags da seguinte forma: Registradores de Controle e Status CF – Carry Flag (Flag de Carry) Indica se houve o “vai-hum” entre operações de adição ou o “vem- hum”de operações de subtração; PF – Parity Flag (Flag de Paridade) Indica a paridade de um valor resultante de uma operação aritmética: se o número de bits em 1 é par ou ímpar. Setado (em 1) se paridade par AF – Auxiliar Carry Flag (Flag de Carry auxiliar) Indica se houve o “vai-hum” entre operações de adição ou o “vem- hum”de operações de subtração entre a parte baixa e parte alta de um operando (“no meio”); Registradores de Controle e Status ZF – Zero Flag (Flag de Zero) Indica se houve zero (0) na útlima operação aritmética realizada. Útil para comparações. Setado se deu zero. SF – Signal Flag (Flag de Sinal) Indica o sinal de um número resultante de uma operação aritmética. Setado se negativo TF – Trap Flag (Flag de Passo-a-Passo) Indica que o processador está em modo passo-a-passo. Setado se sim Registradores de Controle e Status IF – Interrupt Flag (Flag de Interrupção) Indica se o processador está habilitado a responder à interrupções não- mascaráveis. Setado se sim. DF – Direction Flag (Flag de Direção) Utilizado para indicar se as operações de string se darão em ordem crescente ou decrescente (setado). OF – Overflow Flag (Flag de Sobrecarga) Indica se houve o Overflow (estouro matemático) em determinada operação aritmética. Setado se ocorreu overflow. Registradores de Controle e Status IOPL – I/O Privilege level Flag (Flag de Nível de Privilégio de E/S) Indica o nível de privilégio de operações de entrada e saída de uma determinada tarefa. Dois bits. NT – Nested Task Flag (Flag de Tarefas Aninhadas) Indica se há tarefas aninhadas. Registradores de 32 bits A partir do Intel 80386,os registradores passaram a manipular, também, dados de 32 bits. Então, desde o 80386, temos o seguinte conjunto de registradores: Registradores de 32 bits Os registradores de uso geral, quando utilizados em 32 bits, chamam- se EAX, EBX, ECX e EDX; Os registradores de base e índice, quando utilizados em 32 bits, chamam-se ESI, EDI, EBP e ESP; Os registradores de segmento continuam com 16 bits, sendo, porém, acrescidos de mais dois registradores, FS e GS, para complementar a ação de ES. IP e flags também aumentados para 32 bits: EIP e Eflags, sendo que foram incorporados novos flags. Registradores de 64 bits
Compartilhar