diff options
| -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; +} |
