Implementando um Montador com LEX e YACC - 3 Trabalho 5 – Não obrigatório: até mais 1.0 ponto na média (enviar para [email protected]) A partir de seu montador, faça um interpretador da MIPS ISA O interpretador recebe como entrada um arquivo texto contendo um programa em linguagem assembly e o executa diretamente. Ele deve percorrer o programa, a partir de seu ponto de entrada, executando cada comando. Cada instrução executada deve ser impressa e, a seguir, devem ser impressos os valores dos 32 registradores e do PC em hexadecimal, sempre com oito algarismos. O interpretador deve ser capaz de executar todas as instruções do último slide. Interpretador MIPS ISA Os circuitos que compõem um processador MIPS podem ser divididos em duas partes: Datapath – circuitos do processador responsáveis pela manipulação dos dados. Controle – circuitos responsáveis por controlar o fluxo dos dados através do datapath. Interpretador MIPS ISA Um processador é uma máquina de estados que executa a seguinte seqüência de estados continuamente: 1. Leia da memória a instrução apontada pelo registrador Program Counter (PC) 2.Incremente o PC (PC = PC + 1; ou PC = PC + 4 se a instrução for de 4 bytes) 3.Decodifique a instrução 4.Execute a instrução 5.Volte ao passo 1 Interpretador MIPS ISA A memória é usada para guardar as instruções e os dados dos programas. PC guarda o endereço da instrução corrente. Somador pode ser usado para incrementar o PC de modo a fazê-lo apontar para a próxima instrução. 32 registradores para manipulação dos dados. Exemplo Interpretador - Memória: - Registradores: 0x000000 0x27BDFFE8 0x000004 0xAFA40010 0x000008 0x03020100 0x00000C 0xAFA20008 0x000010 0x2402000A 0x000014 0x27BDFFE8 0x000018 0xAFA40010 0x00001C 0x2402000C 0x000020 0xAFA20008 0x000024 0x2402000A 0x000028 0x27BDFFE8 0x00002C 0xAFA40010 $0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $20 $21 $22 $23 $24 $25 $26 $27 $28 $29 $30 $31 - PC 0x000008 Exemplo Interpretador lw PC 0x000008 Fetch instruction from Memory. Memory 0x2402000C $2, 0(4) op rd imm 3 2 4 Decode Instruction Execute Instruction $2 = memory[0x0000004] pc = pc + 1 PC++