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 MP Bus de Endereços da MD Bus de Dados da MP C P U Bus de Dados da MD MEMÓRIA DE Bus de Controle 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 E/S Principal Registradores
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 Busca: Busca da instrução Atualiza PC Decodificação Execução: Busca operandos (se necessário) Executa Armazena resultado (se necessário) Execução da instrução 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 000H 001H 002H... 1F4H 1F5H 1F6H Conteúdo 011F4051F5H 211F600000H 0000000000H 0000000005H 0000000003H 0000000000H (0000000008H) Memória 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 300 1 9 4 0 301 5 9 4 1 302 2 9 4 1...... Registradores PC = 300 IR = 1940 AC = 940 0 0 0 3 941 0 0 0 2 Passo 1: Busca da instrução na memória: Simplificando passos: Ocultando MAR e MBR PC = 300 IR <- 1940 (M[300])
End. Conteúdo 300 1 9 4 0 301 5 9 4 1 302 2 9 4 1...... Registradores PC = 301 IR = 1940 AC = 940 0 0 0 3 941 0 0 0 2 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 300 1 9 4 0 301 5 9 4 1 302 2 9 4 1...... Registradores PC = 301 IR = 1940 AC = 0003 940 0 0 0 3 941 0 0 0 2 Passo 3: Execução da instrução LOAD AC <- M[940] Volta ao ciclo de Busca
End. Conteúdo 300 1 9 4 0 301 5 9 4 1 302 2 9 4 1...... Registradores PC = 301 IR = 5941 AC = 0003 940 0 0 0 3 941 0 0 0 2 Passo 4: Busca PC = 301 IR <- 5941 (M[301])
End. Conteúdo 300 1 9 4 0 301 5 9 4 1 302 2 9 4 1...... Registradores PC = 302 IR = 5941 AC = 0003 940 0 0 0 3 941 0 0 0 2 Passo 5: Decodificação IR =5941H: CodOp = 0101; endereço = 941 Instrução = ADD (AC <- AC + M[X]) PC = PC + 1
End. Conteúdo 300 1 9 4 0 301 5 9 4 1 302 2 9 4 1...... Registradores PC = 302 IR = 5941 AC = 0005 940 0 0 0 3 941 0 0 0 2 Passo 6: Execução AC <- AC + M[X] AC = 0003 + 0002 (M[941]) AC = 0005
End. Conteúdo 300 1 9 4 0 301 5 9 4 1 302 2 9 4 1...... Registradores PC = 302 IR = 2941 AC = 0005 940 0 0 0 3 941 0 0 0 2 Passo 7: Busca PC = 302 IR = 2941 (M[302])
End. Conteúdo 300 1 9 4 0 301 5 9 4 1 302 2 9 4 1...... Registradores PC = 303 IR = 2941 AC = 0005 940 0 0 0 3 941 0 0 0 2 Passo 8: Decodificação IR =2941: CodOp = 0010; endereço = 941 Instrução = STORE (M[X] <- AC) PC = PC + 1
End. Conteúdo 300 1 9 4 0 301 5 9 4 1 302 2 9 4 1...... Registradores PC = 303 IR = 2941 AC = 0005 940 0 0 0 3 941 0 0 0 5 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), LOAD - M(X), JUMP+M(X,20;39) e STOR M(X, 28:39) 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?