Buscar

Aula08 ArqComp ADS 2014 1

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

Continue navegando