diff options
| author | Charles Cabergs <me@cacharle.xyz> | 2021-11-15 19:58:43 +0100 |
|---|---|---|
| committer | Charles Cabergs <me@cacharle.xyz> | 2021-11-15 19:58:43 +0100 |
| commit | 2d3d9d3a5fd436735b912d1fe0ad731a81eca036 (patch) | |
| tree | 64b0ed16e7c208b0931bb818f5711e7e08e65f48 | |
| download | bfc-2d3d9d3a5fd436735b912d1fe0ad731a81eca036.tar.gz bfc-2d3d9d3a5fd436735b912d1fe0ad731a81eca036.tar.bz2 bfc-2d3d9d3a5fd436735b912d1fe0ad731a81eca036.zip | |
Initial commit
| -rw-r--r-- | .gitignore | 3 | ||||
| -rw-r--r-- | bfc.c | 59 |
2 files changed, 62 insertions, 0 deletions
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 @@ -0,0 +1,59 @@ +#include <stddef.h> +#include <stdlib.h> +#include <stdio.h> + +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; +} |
