UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO Aula 2 – Estrutura de um processador Prof. Leonardo Augusto Casillo Arquitetura de Von Neumann: ◦ Conceito de programa armazenado; Dados e instruções armazenados em uma única memória de leitura e escrita. ◦ Endereçamento da memória por posição e não pelo tipo; ◦ Execução seqüencial de instruções; ◦ Único caminho entre memória e CPU . Arquitetura de Harvard: ◦ ◦ ◦ ◦ Variação da arquitetura de Von Neumann. Memórias separadas para dados e instruções. Barramentos separados para instruções e dados. Termo originado dos computadores Mark I a Mark IV 2 3 CPU ULA Unidade de controle Bus de Endereços Bus de Dados Bus de Controle MEMÓRIA DE DADOS E DE PROGRAMA UNIDADES DE E/S 4 Bus de Endereços da MD Bus de Endereços da MP Bus de Dados da MP CPU Bus de Dados da MD Bus de Controle MEMÓRIA DE DADOS MEMÓRIA DE PROGRAMA UNIDADES DE E/S 5 Processadores: CPU, controladores e co-processadores Possuem conjunto de instruções operando sobre instruções e dados organizados em palavras Memórias 2 subsistemas: externa e interna Custo relacionado à capacidade de armazenamento e velocidade de operação Sistema de E/S Conversores de representação física de dados Lentos Sistema de interconexão Comunicação entre componentes através de barramentos e slots sob seu controle Disputa pelo uso de recursos compartilhados. Registradores mais comuns dentro de um processador: Acumulador (AC) Contador de programa (PC) Apontador de pilha (SP) Registrador de instrução (IR) Buffer de endereço de memória (MAR) Buffer de dados da memória (MBR) Registradores de uso geral CPU • Unidade operativa (ULA) • Unidade de Controle Memória • Principal • Registradores E/S Processador tipo LOAD-STORE com 40 bits de palavra. Memória consiste em mil posições (palavras) constituídas de 40 bits. Dados e instruções ambos armazenados na memória. Cada instrução possui um código binário de operação (CodOp). Cada número é representado por um bit de sinal e um valor de 39 bits. Uma palavra pode conter duas instruções de 20 bits, sendo 8 bits para o CodOp e endereço de 12 bits, que designa uma palavra de memória (0 a 999). Registradores presentes no IAS: ◦ MAR – especifica o endereço na memória da palavra a ser lida ou escrita do MBR; ◦ MBR – contém uma palavra a ser armazenada na memória ou uma palavra recebida da memória; ◦ IR – contém o código da operação de 8 bits utilizado; ◦ IBR – contém a instrução (completa) do lado direito de uma palavra da memória; ◦ PC – contém o endereço do próximo par de instruções a ser buscado na memória; ◦ AC – armazena temporariamente o operando da ULA e os 40 bits mais significativos de uma multiplicação; ◦ MQ – quociente de multiplicação: armazena os 40 bits menos significativos de uma multiplicação. Início Busca da próxima instrução Execução da instrução Busca: ◦ Busca da instrução ◦ Atualiza PC ◦ Decodificação Execução: ◦ Busca operandos (se necessário) ◦ Executa ◦ Armazena resultado (se necessário) Parada PC = 12 bits MAR = 12 bits MBR = 40 bits IR = 8 bits IBR = 20 bits AC = 40 bits MQ = 40 bits 1ª busca: 1º teste - Não 2º teste - Sim IAS contém 21 instruções, divididas entre os grupos: Transferência de dados: entre memória e registradores da ULA ou entre dois registradores da ULA; Desvio incondicional: altera a sequência de instruções da memória; Desvio condicional: permite dois pontos de decisão; Aritmética: operações executadas pela ULA; Alteração de endereço: calcula endereços utilizando a ULA para inseri-los em instruções armazenadas na memória. Cada processador possui seu próprio conjunto de instruções, embora exista um subconjunto básico utilizado por todos os processadores de modo geral; Instruções com mesma função podem ter nomes variados para cada processador (ex: multiplicação pode ser MUL ou MPY); Os campos das instruções também variam de acordo com cada processador (ex: um campo pode representar um endereço ou um operando); Existem instruções que referenciam 0, 1, 2 ou 3 registradores; Variáveis são, na verdade, ponteiros de endereços de memória. Para converter um programa de alto nível para baixo nível, deve-se adotar os seguintes passos: ◦ Escrever o programa de modo mais detalhado possível na forma de algoritmo (pseudo-código / portugol / português estruturado / descrição narrativa / etc) ◦ Opcionalmente, é válido escrever o algoritmo na forma de fluxograma, sendo cada etapa do fluxograma representando uma ação do processador ou uma transferência entre seus registradores (nível RTL) ou transferência processador memória ◦ É necessário conhecer a arquitetura (parte operativa) do processador que executará o programa, em particular a quantidade de bits e palavras, os registradores do processador e as operações da ULA “C <= A + B;” Uma simples instrução em alto nível pode ser convertida em várias instruções em baixo nível. Para realizar esta conversão, algumas perguntas devem ser respondidas: ◦ ◦ ◦ ◦ Quem são e de onde vêm A e B? Onde armazenar C? Quais as entrada da ULA? O processador é do tipo LOAD-STORE (memória – processador) ou MÁQUINA COM REGISTRADORES (registrador-registrador ou registrador – memória)? Detalhamento da instrução, considerando um computador LOAD-STORE e uma das entradas da ULA fixa (acumulador): Ler valor de A da memória; Transferir o valor de A para o acumulador; Ler valor de B da memória; Transferir o valor de B para o segundo registrador de entrada da ULA; ◦ Realizar operação de SOMA (ADD) na ULA; ◦ Salvar o valor de C (enviar para a memória) ◦ ◦ ◦ ◦ ◦ ***Algumas destas instruções podem ser agrupadas em instruções únicas, dependendo do conjunto de instruções do processador. (EX: ler o valor de A da memória e transferir para o acumulador realizadas em uma única instrução) Utilizando instruções do IAS e definindo posições de memória para as variáveis: ◦ A = endereço 500 na memória ◦ B = endereço 501 na memória ◦ C = endereço 502 na memória LOAD M(X) - Código 01H ADD M(X) - Código 05H STOR M(X) - Código 21H LOAD M(500): 00000001000111110100 0000 0001 0001 1111 0100 (011F4) ADD M(501): 00000101000111110101 0000 0101 0001 1111 0101 (051F5) STOR M(502): 00100001000111110110 0010 0001 0001 1111 0110 (211F6) Endereço Conteúdo 000H 011F4051F5H 001H 211F600000H 002H 0000000000H ... Memória 1F4H 0000000005H 1F5H 0000000003H 1F6H 0000000000H (0000000008H) M(1F6) =M(1F4) + M(1F5) C=5+3 ◦ Considerando um computador com 16 bits de palavra: 4 primeiros bits = CodOp 12 bits restantes = endereço ◦ Ex: 1940H 1H = 0001 – CodOp 940H = 100101000000 – endereço da memória ◦ Registradores utilizados no exemplo: PC IR AC ◦ Instruções utilizadas no exemplo: 0001 = Carrega AC a partir do end. de memória Mnemônico LOAD; Execução AC <- M[X] 0010 = armazena o valor de AC no end. de memória Mnemônico STORE; Execução M[X] <- AC 0101 = soma AC com valor do end. de memória Mnemônico ADD; Execução AC <- AC + M[X] End. Conteúdo Registradores 300 1940 PC = 300 301 5941 IR = 1940 302 2941 AC = ... ... 940 0003 941 0002 Passo 1: Busca da instrução na memória: Simplificando passos: Ocultando MAR e MBR PC = 300 IR <- 1940 (M[300]) End. Conteúdo Registradores 300 1940 PC = 301 301 5941 IR = 1940 302 2941 AC = ... ... 940 0003 941 0002 Passo 2: Decodificação da instrução Simplificando: supondo cada instrução com 4 bytes 1º byte = CodOp; 2º a 4º bytes = endereço IR =1940H: codop = 0001; endereço = 940 Instrução = LOAD (AC <- M[X]) *** PC = PC + 1 End. Conteúdo Registradores 300 1940 PC = 301 301 5941 IR = 1940 302 2941 AC = 0003 ... ... 940 0003 941 0002 Passo 3: Execução da instrução LOAD AC <- M[940] Volta ao ciclo de Busca End. Conteúdo Registradores 300 1940 PC = 301 301 5941 IR = 5941 302 2941 AC = 0003 ... ... 940 0003 941 0002 Passo 4: Busca PC = 301 IR <- 5941 (M[301]) End. Conteúdo Registradores 300 1940 PC = 302 301 5941 IR = 5941 302 2941 AC = 0003 ... ... 940 0003 941 0002 Passo 5: Decodificação IR =5941H: CodOp = 0101; endereço = 941 Instrução = ADD (AC <- AC + M[X]) PC = PC + 1 End. Conteúdo Registradores 300 1940 PC = 302 301 5941 IR = 5941 302 2941 AC = 0005 ... ... 940 0003 941 0002 Passo 6: Execução AC <- AC + M[X] AC = 0003 + 0002 (M[941]) AC = 0005 End. Conteúdo Registradores 300 1940 PC = 302 301 5941 IR = 2941 302 2941 AC = 0005 ... ... 940 0003 941 0002 Passo 7: Busca PC = 302 IR = 2941 (M[302]) End. Conteúdo Registradores 300 1940 PC = 303 301 5941 IR = 2941 302 2941 AC = 0005 ... ... 940 0003 941 0002 Passo 8: Decodificação IR =2941: CodOp = 0010; endereço = 941 Instrução = STORE (M[X] <- AC) PC = PC + 1 End. Conteúdo Registradores 300 1940 PC = 303 301 5941 IR = 2941 302 2941 AC = 0005 ... ... 940 0003 941 0005 Passo 9: Execução M[941] <- AC (0005) Segue funcionamento... Estudar as instruções do IAS e demonstrar a utilização de cada uma delas com exemplos (trechos de código) ◦ exceto SUB |M(X)|, LOAD –M(X), JUMP+M(X,20;39) e STOR M(X, 28:39) LOAD -|M(X)|, Fazer a execução detalhada de um programa que realize A x A utilizando o IAS – incluir os procedimentos envolvendo MAR e MBR; Elabore um programa em assembly utilizando as instruções do IAS que realize a contagem crescente de um valor de 0 a 10. Considere um microprocessador hipotético de 32 bits, cujas instruções de 32 bits são compostas de dois campos: o primeiro byte contém o código da operação e os demais contêm um operando imediato ou um endereço de operando. A. Qual a capacidade máxima de memória endereçável diretamente (em bytes)? B. Quantos bits são necessários para o contador de programa (PC) e para o registrador de instrução (IR)? C. Qual o procedimento necessário para busca de dados e instruções caso a memória não contenha 32 bits de palavra? Como isto poderia ser realizado?