Aluno: Guilherme Braga Pinto
Matrícula: 17/0162290
Professor: Bruno Macchiavello
UnB, 2020/01
Prazo de entrega: 09/10/2020
Data de envio: 09/10/2020
Escolha de implementação: detectar erros.
REGRA DE USO: Arquivo de input precisa terminar com uma linha vazia (tanto no pré-processamento como na hora de montar).
Ao seu utilizado o programa, ao longo do desenvolvimento, localizou-se sempre na pasta src todos os arquivos em questão (.asm, .pre e .obj). Os outputs também foram criados nesta pasta junto dos arquivos usados como input. Porém, a necessidade real é a de que o arquivo executável deve estar na mesma pasta do arquivo .pre ou .asm que se deseja processar, para que o output também seja gerado nesta pasta.
Para compilar o programa, rode "make" dentro da pasta source.
Para rodar o programa, execute "./main" seguido de um espaço com "-o" (para ter como um retorno o arquivo ".obj", tendo como entrada um arquivo ".asm") ou "-p" (para ter como um retorno o arquivo ".pre", tendo como entrada um arquivo ".pre"), e então seguido de um espaço e o nome do seu arquivo.
Exemplos: "./main -p bin.asm" e "./main -o bin.pre"
Para então limpar os arquivos compilados, pode ser utilizado o comando "make clean".
Programa feito em C no Ubuntu 18.04
Makefile baseado em: https://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/
Link para o Github do trabalho: https://github.com/gui1080/SB_Trabalho_1
SB_Trabalho1
├── _include
├── _src
└── _Casos de Teste
└── _obj
Na pasta include estão os arquivos .h
Na pasta src, se encontram os arquivos .c, .asm, .pre e .obj
Também na pasta src, se encontram as pastas obj (para onde vão os arquivos objeto) e a pasta Casos de Teste (com alguns programas que testam a detecção de erros)
A seguinte demo vem pronta junto deste trabalho:
Recomenda-se rodar um "make clean" seguido de um "make" no início, na pasta src (atenção para detectar se a pasta obj está presente).
Então executa-se:
./main -p bin.asm
./main -o bin.pre
E assim se chega no código objeto/pré-processado desejado.
A2: equ 0
SECTION TEXT
INPUT OLD_DATA
LOAD OLD_DATA
L1:
DIV DOIS
STORE NEW_DATA
MULT DOIS
STORE TMP_DATA
LOAD OLD_DATA
SUB TMP_DATA
STORE TMP_DATA
output TMP_DATA
COPY NEW_DATA OLD_DATA
LOAD OLD_DATA
JMPP L1
STOP
SECTION DATA
DOIS: CONST 2
OLD_DATA: SPACE
NEW_DATA: SPACE
TMP_DATA: SPACE
12 29 10 29 4 28 11 30 3 28 11 31 10 29 2 31 11 31 13 31 9 30 29 10 29 7 4 14 2 O O O