Implementando um Montador com LEX e YACC - 3. Trabalho 5 – Não obrigatório: até mais 1.0 ponto...
Transcript of Implementando um Montador com LEX e YACC - 3. Trabalho 5 – Não obrigatório: até mais 1.0 ponto...
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:
- PC
0x27BDFFE8
0xAFA40010
0x03020100
0xAFA20008
0x2402000A
0x27BDFFE8
0xAFA40010
0x2402000C
0xAFA20008
0x2402000A
0x27BDFFE8
0xAFA40010
0x000000
0x000004
0x000008
0x00000C
0x000010
0x000014
0x000018
0x00001C
0x000020
0x000024
0x000028
0x00002C
$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
0x000008
Exemplo Interpretador lw $2, 0(4)
PC
PC++
0x000008
Fetch instruction from Memory.
Decode Instruction
Execute Instruction
Memory
0x2402000C
op rd imm
3 2 4
$2 = memory[0x0000004]pc = pc + 1