ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES Computador Cleópatra Interface Hardware e Software Alexandre Amory Edson Moreno 2/9 Nas Aulas Anteriores … • Vimos como descrever e implementar circuitos combinacionais • Como descrever a ULA da Cleo usando lógica combinacional • Vimos como descrever e implementar circuitos sequenciais e máquinas de estados 3/9 Na Aula de Hoje … • Retomamos a Arquitetura Cleópatra • Foco no fluxo de dados/instruções internamente ao processador • Como as instruções Assembly são executadas – Relação: instrução+ME com a máquina de estados e ULA 4/9 Arquitetura Cleópatra - Von Neumann CPU ck BLOCO DE CONTROLE µinst n z c v PROGRAMA ARMAZENADO - dados - instruções IR ce ck rw reset µinst n z ck reset c v IR BLOCO DE DADOS dados endereços MEMÓRIA dados e programa 5/9 Bloco de Dados µinst ck reset DATAMEM CE RW escreve na memória ADDRESS MAR lê da memória 0 mux 1 BUS_B BUS_A MDR sel IR PC CE RW AC RS w Codificação de escrita ULA NZCV r Codificação de leitura u lnz lcv n z c Bloco de Dados v IR 6/9 Bloco de Controle CPU ck BLOCO DE CONTROLE µinst n z c v IR ce ck rw reset µinst n z ck reset c BLOCO DE DADOS v IR dados endereços MEMÓRIA dados e programa 7/9 Diagrama de Estados da Cleo 8/9 Cleo: Carrega Endereço da Instrução Memória ADD #5 200 ADD, # 201 5 CPU PC 200 MAR 200 9/9 Cleo: Carrega Endereço da Instrução DATAMEM CE RW escreve na memória ADDRESS MAR lê da memória 0 mux 1 BUS_B BUS_A MDR sel IR PC CE RW AC RS w Codificação de escrita ULA NZCV r Codificação de leitura u lnz lcv 10 / 9 Cleo: Lê Instrução da Memória Memória CPU endereço ADD #5 200 ADD, # 201 5 dado MAR 200 MDR ADD, I 11 / 9 Cleo: Lê Instrução da Memória DATAMEM CE RW escreve na memória ADDRESS MAR lê da memória 0 mux 1 BUS_B BUS_A MDR sel IR PC CE RW AC RS w Codificação de escrita ULA NZCV r Codificação de leitura u lnz lcv 12 / 9 Cleo: Decodifica Instrução Memória ADD #5 200 ADD, # 201 5 CPU IR ADD, I MDR ADD, I 13 / 9 Cleo: Decodifica Instrução DATAMEM CE RW escreve na memória ADDRESS MAR lê da memória 0 mux 1 BUS_B BUS_A MDR sel IR PC CE RW AC RS w Codificação de escrita ULA NZCV r Codificação de leitura u lnz lcv 14 / 9 Cleo: Inicia Busca do Operando Memória ADD #5 200 ADD, # 201 5 CPU PC 201 MAR 201 15 / 9 Cleo: Inicia Busca do Operando DATAMEM CE RW escreve na memória ADDRESS MAR lê da memória 0 mux 1 BUS_B BUS_A MDR sel IR PC CE RW AC RS w Codificação de escrita ULA NZCV r Codificação de leitura u lnz lcv 16 / 9 Cleo: Leitura do Operando Memória CPU endereço ADD #5 200 ADD, # 201 5 MAR 201 MDR 5 dado 17 / 9 Cleo: Leitura do Operando DATAMEM CE RW escreve na memória ADDRESS MAR lê da memória 0 mux 1 BUS_B BUS_A MDR sel IR PC CE RW AC RS w Codificação de escrita ULA NZCV r Codificação de leitura u lnz lcv 18 / 9 Cleo: Realiza a Operação CPU AC AC + MDR MDR 5 19 / 9 Cleo: ADD Imediato Exemplo: ADD #5 DATAMEM CE RW escreve na memória ADDRESS MAR lê da memória 0 mux 1 BUS_B BUS_A MDR sel IR PC CE RW AC RS w Codificação de escrita ULA NZCV r Codificação de leitura u lnz lcv 20 / 9 Datapath Cleo – ULA DATAMEM CE RW escreve na memória ADDRESS MAR lê da memória 0 mux 1 BUS_B BUS_A MDR sel IR PC CE RW AC RS w Codificação de escrita ULA NZCV r Codificação de leitura u lnz lcv 21 / 9 Bloco de Controle - Máquina de Estados Finita 22 / 9 Modo de Endereçamento • Imediato – Operando é o próprio dado – Usado para representar constantes • Ex.: Número 45 do trecho de código C • Direto – Operando é endereço do dado – Usado para representar variáveis int valor; int *p = &valor; int entrada = 8; *p = entrada + 45; • Ex. Variável entrada do trecho de código C • Indireto – Operando é endereço do endereço do dado – Usado para representar ponteiros • Ex. Ponteiro *p (que aponta para valor) do trecho de código C 23 / 9 Descrição das Instruções Mnemônico Operação NOT Complementa (inverte) todos os bits de AC. STA oper Armazena AC na memória dada por oper. LDA oper Carrega AC com conteúdos de memória da posição dada por oper. ADD oper Adiciona AC ao conteúdo da memória dada por oper. OR oper Realiza OU lógico do AC com conteúdo da memória dada por oper. AND oper Realiza E lógico do AC com conteúdo da memória dada por oper. JMP oper PC recebe dado especificado por oper (desvio incondicional). JC oper Se C=1, então PC recebe valor dado por oper (desvio condicional). JV oper Se V=1, então PC recebe valor dado por oper (desvio condicional). JN oper Se N=1 então PC recebe valor dado por oper (desvio condicional). JZ oper Se Z=1, então PC recebe valor dado por oper (desvio condicional). JSR oper RS recebe conteúdo de PC e PC recebe dado de oper (subrotina). RTS PC recebe conteúdos de RS (retorno de subrotina). HLT Suspende processo de busca e execução de instruções. 24 / 9 Meu Primeiro Prog Assembly • Linguagem alto nível (e.g. C, JAVA) – *C = A+3 • Assembly da Cleo – LDA – ADD – STA A #3 C,I 25 / 9 Meu Primeiro Prog Assembly • Linguagem alto nível (e.g. C, JAVA) – *C = A+3 • Assembly da Cleo – LDA – ADD – STA A #3 C,I Carrega a variável A no reg interno 26 / 9 Meu Primeiro Prog Assembly • Linguagem alto nível (e.g. C, JAVA) – *C = A+3 • Assembly da Cleo – LDA – ADD – STA A #3 C,I Soma o conteúdo do reg interno (A) com a constante 3. o resultado é salvo no reg interno. Utiliza Modo Imediato. 27 / 9 Meu Primeiro Prog Assembly • Linguagem alto nível (e.g. C, JAVA) – *C = A+3 • Assembly da Cleo – LDA – ADD – STA A #3 C,I Carrega conteúdo do reg interno (A+3) na variável C 28 / 9 Meu Primeiro Prog Assembly • Linguagem alto nível (e.g. C) – *C = A+3 • Assembly da Cleo – LDA – ADD – STA A #3 C,I 29 / 9 Meu Primeiro Prog Assembly • Linguagem alto nível (e.g. C) – *C = A+3 • Assembly da Cleo – LDA – ADD – STA A #3 C,I 30 / 9 Meu Primeiro Prog Assembly • Linguagem alto nível (e.g. C) – *C = A+3 • Assembly da Cleo – LDA – ADD – STA A #3 C,I DATAMEM CE RW escreve na memória ADDRESS MAR BUS_B BUS_A 0 lê da memória mux 1 sel MDR IR PC CE RW AC RS w Codificação de escrita ULA NZCV r Codificação de leitura u lnz lcv 31 / 9 Meu Primeiro Prog Assembly • Linguagem alto nível (e.g. C) – *C = A+3 • Assembly da Cleo – LDA – ADD – STA A #3 C,I 32 / 9 Meu Primeiro Prog Assembly • Linguagem alto nível (e.g. C) – *C = A+3 • Assembly da Cleo – LDA – ADD – STA A #3 C,I 33 / 9 Resumo • Como um programa Assembly é executado – O que acontece dentro do processador durante a execução de uma instrução