Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Trabalho de Implementação de Instruções em Linguagem de Montagem

Este é um projeto de implementação de instruções em linguagem de montagem. O objetivo é ler um arquivo de entrada contendo instruções em linguagem de montagem e gerar um arquivo de saída contendo o código de máquina correspondente para cada instrução, de acordo com as especificações fornecidas.

Instruções que foram implementadas

Tipo Instrução
I lb, lh, lw, addi, andi, ori
R add, sub, and, or, xor, sll, srl
S sb, sh, sw
SB bne, beq
Pseudo mv

Estrutura do Projeto

organização

A figura acima mostra como foi estruturado.

O projeto é organizado da seguinte maneira:

  • main.c: O arquivo principal do programa, que contém o loop principal para processar as instruções do arquivo de entrada.

  • include/: Esta pasta contém os arquivos de cabeçalho.

  • src/: Esta pasta contém os arquivos de código-fonte.

    • bin_para_hex:

      • binarioParaHex: Converte uma string binária em hexadecimal;
      • binParaHex: Lê um arquivo de entrada contendo instruções binárias, converte cada instrução para hexadecimal e escreve no arquivo de saída.
    • instrucoes.c:

      • converter_offset: Converte um offset (um número inteiro) para sua representação binária de 12 bits, usando complemento de dois se o número for negativo;
      • registrador_para_binario: Converte o número de um registrador para sua representação binária de tamanho variável especificado, começando a partir do índice 1 da string do registrador;
      • inteiro_para_binario: Converte um número inteiro para sua representação binária de um tamanho específico em bits;
      • imediato_para_binario: Converte um imediato (um número inteiro) para sua representação binária de 12 bits, usando complemento de dois se o número for negativo;
      • escrever_no_arquivo: Escreve uma string de código de máquina em um arquivo, seguido de uma nova linha, e verifica se ocorreu algum erro durante a escrita.
    • tipoI.c:

      • Implementa a função obterInstrucaoTipoI, responsável por converter e escrever instruções do tipo I em binário no arquivo de saída.
      • Contém funções auxiliares para conversão de registradores e imediatos para binário.
    • tipoR.c:

      • Implementa a função obterInstrucaoTipoR, responsável por converter e escrever instruções do tipo R em binário no arquivo de saída.
      • Contém funções auxiliares para conversão de registradores para binário.
    • tipoS:

      • Implementa a função obterInstrucaoTipoS, responsável por converter e escrever instruções do tipo S em binário no arquivo de saída.
      • Contém funções auxiliares para conversão de registradores e offset para binário, além da separação do offset em partes.
    • tipoSB:

      • Implementa a função obterInstrucaoTipoSB, responsável por converter e escrever instruções do tipo SB em binário no arquivo de saída.
      • Contém funções auxiliares para conversão de registradores e endereço do destino para binário, além da separação do endereço do destino em partes.
  • entrada.asm: O arquivo de entrada contendo as instruções em linguagem de montagem a serem processadas.

  • Exemplo de entrada teste que foi disponibilizado na documentação:

organização

  • saida/: Esta pasta contém os arquivos de saída onde o código de máquina correspondente a cada instrução será gerado.

  • Saída em binário

organização

  • Saída em hexadecimal

organização

Compilação e Execução

  • 1º: gcc -o main -Iinclude src/*.c main.c

  • 2º: ./main

About

Montador que traduz instruções assembly RISC-V para código de máquina (binário/hexadecimal), desenvolvido para disciplina de Organização de Computadores.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages