Skip to content

Latest commit

 

History

History
107 lines (76 loc) · 4.01 KB

README-pt.md

File metadata and controls

107 lines (76 loc) · 4.01 KB

Go CodeQL

Read this document in English

EGG, um emulador de processadores genérico

Tutorial em Vídeo (legendado)

Documentação para RISC-V

RISC-V Cheatsheet

Documentação para MIPS

Documentação para Sagui

Contribuindo, bugs, requisição de features

EGG (Emulador Genérico do Gabriel) é um emulador modular de arquiteturas de processador, criado para fins educacionais.

O pacote egg provém uma interface para interagir com máquinas, assim provendo suporte a diferentes backends provendo arquiteturas. No momento, há backends de RISC-V IM de 32 bits e MIPS32 (experimental).

O pacote egg/assembler provém uma pequena biblioteca para criação de assemblers e o suporte ao debugger do EGG.

Estudantes da UFPR

Quer ajuda, ou tem alguma dúvida? Me mande um email: [email protected]. Ou me procure no campus e nos laboratórios!

Instalação

Baixe o binário estático para o seu sistema na página de releases, ou, caso tenha o compilador de Go instalado, baixe e compile o projeto.

Nota: o binário para Windows não foi testado. Não tenho acesso a nenhuma máquina Windows atualmente.

Uso

Rode o emulador com um arquivo de Assembly para montá-lo e iniciar uma máquina rodando o programa. O backend utilizado por padrão é uma máquina de RISC-V 32 bits. Use a opção -a ou -arch para mudar a arquitetura. A opção -h mostra todas as opções de linha de comando e a opção -l mostra todas as arquiteturas suportadas.

A sintaxe de Assembly varia com a arquitetura, porém, como o projeto provém uma biblioteca para tal, os backends podem usar uma sintaxe bem semelhante (RISC-V e MIPS usam). Exemplo:

; Ponto e vírgula define comentários até o fim da linha.

; Labels são definidos com dois pontos.
label:
	; Os argumentos começam sempre pelo destino.
	addi t0, zero, 2

	; Também é possível colocar instruções logo após os labels.
label2:	add t0, t0, t0

	; Não há parênteses como no RARS e stores usam imediatos normais.
	sb t0, ra, 3

	; Imediatos hexadecimais, octais e binários também são suportados.
	addi t1, zero, 0xff
	addi t1, zero, 0b010110
	addi t1, zero, 0o644
	addi t1, zero, 0755	; Um zero à esquerda também define um octal.

; # define um literal até o final da linha.
; Literais são inseridos no binário (assim como 'db' em outros assemblers).
; Se uma % é seguida de dois digitos hexadecimais, o valor hexadecimal é
; inserido. Use %% para inserir um % (ou %25).
msg:
#Hello, World!%0a

Cada diretório de cada arquitetura possui programas Assembly de teste que podem ser usados de exemplo.

Chamadas

As chamadas (environment calls) respondidas pelo emulator são as seguintes. Consulte a documentação da arquitetura para realizá-las:

  • BREAK (Número 1): Transfere o controle para o debugger ou finaliza a máquina.
    Nenhum argumento.
  • READ (Número 2): Lê uma entrada da linha de comando.
    • Argumento 1: Endereço do buffer.
    • Argumento 2: Tamanho da entrada em bytes.
  • WRITE (Número 3): Escreve uma saída.
    • Argumento 1: Endereço do buffer.
    • Argumento 2: Tamanho da saída em bytes.

Debugger

A interface do debugger é semelhante à do gdb porém bem enxuta. Use a opção -d para entrar no debugger assim que iniciar o emulador. Não há comando run, como no gdb, pois não há necessidade de iniciar um processo do sistema. Os comandos next e continue podem ser utilizados para iniciar o programa normalmente. Use o comando help para ver todos os comandos disponíveis.