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