From 2d3d9d3a5fd436735b912d1fe0ad731a81eca036 Mon Sep 17 00:00:00 2001 From: Charles Cabergs Date: Mon, 15 Nov 2021 19:58:43 +0100 Subject: Initial commit --- .gitignore | 3 +++ bfc.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 .gitignore create mode 100644 bfc.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..445d02b --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.o +a.out +*.asm diff --git a/bfc.c b/bfc.c new file mode 100644 index 0000000..cb1b0f9 --- /dev/null +++ b/bfc.c @@ -0,0 +1,59 @@ +#include +#include +#include + +const size_t buffer_size = 256; +const char* asm_filename = "out.asm"; + +int main(int argc, char *argv[]) +{ + FILE* file = fopen(asm_filename, "w"); + fprintf( + file, + "section .bss\n" + "buffer: resb %zu\n" + "section .text\n", + "mov rax buffer\n", + buffer_size + ); + + char c; + while ((c = fgetc(file)) != EOF) + { + switch (c) + { + case '>': + fputs("inc rax"); + break; + case '<': + fputs("dec rax"); + break; + case '+': + fputs("inc [rax]"); + break; + case '-': + fputs("dec [rax]"); + break; + case '.': + // putchar + break; + case ',': + // getchar + break; + case '[': + // jump to next ] if byte at data ptr is 0 + break; + case '[': + // jump to prev [ if byte at data ptr is not 0 + break; + case ';': + // comment + break; + default: + // error + } + } + + + return 0; +} -- cgit