CPU Registos

Propaganda
CPU
CPU – Unidade Central de Processamento
Função: leitura, escrita e processamento de dados
Constituída por:
¾
dispositivos que gerem a entrada (leitura) e saída (escrita)
de dados;
¾
registos (memórias auxiliares) que permitem guardar
dados e resultados de operações;
¾
circuitos combinatórios que permitem efectuar operações
lógicas e aritméticas (ALU - Unidade de Aritmética e
Lógica);
1
Registos
Registos - localizações de memória no interior do chip CPU
identificadas por nomes (ao invés de endereços
numéricos)
O recurso a registos é vantajoso por duas razões:
¾
O acesso a dados guardados em registos internos é muito
mais rápido do que o acesso a dados na memória, devido
à sua proximidade;
¾
Existem menos registos internos que posições de memória
⇒ são necessários menos bits para identificar os registos
⇒ instruções com menos bits
⇒ leitura e execução das instruções mais rápidas.
2
Registos
Registos para Funções Genéricas
31
0
EAX
EBX
ECX
EDX
ESI
EDI
EBP
ESP
Registos de Estado e Controlo
31
0
EFLAGS
31
0
EIP
3
Registos
Registos para Funções Genéricas
31
15
16
8
7
0
16-bit
32-bit
AH
AL
AX
EAX
BH
BL
BX
EBX
CH
CL
CX
ECX
DH
DL
DX
EDX
SI
ESI
DI
EDI
BP
EBP
SP
ESP
Registos de Estado e Controlo
…
15
14
…
31
13
12
11
10
9
8
7
6
O
D
I
T
S
Z
5
4
A
3
2
1
0
P
C
EFLAGS
0
EIP
4
Registos de Segmentos
(guardam os endereços base dos segmentos relativos aos
programas)
¾
CS (“Code Segment”)
contém o endereço do Segmento de Código da instrução
que está a ser executada (poderão existir vários
segmentos de código);
¾
DS (“Data Segment”)
contém o endereço do Segmento de Dados das variáveis
ou outros dados que estão a ser utilizados (poderão existir
vários segmentos de dados);
5
Registos de Segmentos
¾
SS (“Stack Segment”)
contém o endereço do Segmento Pilha que está a ser
utilizado para guardar temporariamente dados e
endereços;
¾
ES (“Extra Segment”)
contém o endereço de um segmento extra da memória;
¾
FS e GS (“Extra Segment”)
contêm endereços de segmentos adicionais sem funções
especiais (existem desde os CPU 386).
6
Registos para Funções Genéricas
(registos capazes de desempenhar diversas funções, alguns
dos quais apresentam, contudo, um conjunto de tarefas
específicas dos mesmos)
¾
AX (“Accumulated Extended”)
conhecido como acumulador principal, utilizado para
operações que envolvem entrada/saída de dados e para a
maioria das operações aritméticas;
¾
BX (“Base Extended”)
conhecido como registo de base, uma vez que é o único
registo genérico que pode ser usado como um indicador
para endereçamento indexado (pode ser combinado com
o DI ou SI);
7
Registos para Funções Genéricas
¾
CX (“Count Extended”)
conhecido como registo contador, uma vez que pode
conter o valor de controlo do número de vezes que uma
subrotina é repetida ou o valor do deslocamento lógico;
¾
DX (“Data Extended”)
conhecido como o registo de dados, utilizado em
operações de entrada/saída de dados e operações
aritméticas que envolvem valores elevados que
pressupõem a utilização de DX e AX juntos.
8
Registos de Índex
(disponíveis para endereçamento indexado e para algumas
operações de adição e subtracção)
¾
SI (“Source Index”)
registo de índex da origem, necessário para operações de
manipulação de cadeias de caracteres;
¾
DI (“Destination Index”)
registo de índex do destino, também necessário para
operações de manipulação de cadeias de caracteres.
9
Registos Apontadores
(guardam os
instruções)
¾
endereços
efectivos
de
parâmetros
ou
IP (“Instruction Pointer”)
contém o endereço efectivo que, associado com o
endereço base do Segmento de Código (contido no
registo CS), dá o endereço físico da próxima instrução a
ser executada;
- constitui o único registo que não pode ser lido ou escrito
directamente;
- cada vez que é executada uma instrução, o valor do IP é
incrementado de um nº de bits que depende do tamanho da
instrução a ser executada (normalmente de 1 a 6 bits), por
forma a apontar para a instrução seguinte (com a excepção das
instruções de interrupção ou de salto);
10
Registos Apontadores
¾
SP (“Stack Pointer”)
contém o endereço efectivo que, associado com o
endereço base do Segmento Pilha (contido no registo SS),
dá o endereço físico da palavra que está sendo
processada no Segmento Pilha;
¾
BP (“Base Pointer”)
facilita o recurso a parâmetros (dados ou endereços) que o
programa utiliza via o Segmento Pilha.
11
Registo de Flags
Registo que permite, nos programas, a execução de:
- testes para determinar de várias acções, a que deve ser
tomada;
- sub-rotinas nas quais uma série de passos repete-se até
um determinado requerimento ser atingido.
A maioria dos bits deste Registo são registos de bit unitário
chamados de Flags.
Um teste na linguagem Assembly baseia-se em duas
opções: a Flag toma o valor 1 ou 0 (se toma o valor 1 o
programa segue um rumo, se toma o valor 0 o programa
segue outro rumo)
12
Registo de Flags
Posição →
Registos de bit unitário
15
14
13
12
11
10
9
8
7
6
O
D
I
T
S
Z
5
4
A
3
2
1
P
0
C
¾
OF (“Overflow Flag”)
toma o valor 1 quando ocorre transbordo, ou seja, quando
numa operação aritmética entre números com sinais, o
resultado torna-se grande demais para o operando que
ocupa;
¾
DF (“Direction Flag”)
indica ao CPU a direcção dos deslocamentos em
operações de manipulação de cadeias de caracteres
(quando toma o valor 1 a cadeia de caracteres desloca-se
da direita para a esquerda);
13
Registo de Flags
¾
IF (“Interrupt Enable Flag”)
quando toma o valor 1, devido a certas condições do CPU
ou instruções do programador, permite a ocorrência de
interrupções quando solicitadas;
¾
TF (“Trap Flag”)
quando toma o valor 1 permite que o comando Trace do
Debug exerça a sua função, de forçar o CPU a executar
apenas 1 instrução antes de solicitar uma rotina de
interrupção (de modo a permitir detectar falhas);
¾
SF (“Sign Flag”)
toma o valor 1 quando o resultado de uma operação
aritmética é negativo (o dígito mais significativo é 1);
14
Registo de Flags
¾
ZF (“Zero Flag”)
toma o valor 1 quando o resultado de uma operação lógica
ou aritmética toma o valor 0 (note-se que CMP ≈ SUB, só
que não guarda o resultado);
¾
AF (“Auxiliary Carry Flag”)
utilizada apenas para cálculos aritméticos em código BCD,
que toma cada operando (byte) como um par de nibbles
(conjuntos de 4 bits);
¾
PF (“Parity Flag”)
indica se o número de bits 1 de uma sequência de bits no
byte de ordem inferior resulta num valor par ou ímpar, de
modo a detectar erros de comunicação;
15
Registo de Flags
¾
CF (“Carry Flag”)
toma o valor 1 se for gerado transporte no resultado de
uma operação aritmética ou de deslocamento lógico (Flag
mais utilizada).
16
Download