Untitled
```c int putchar(int c); void print_string(const char* p) { for(;*p;p++) { putchar(*p); } } int main() { print_string("Hi, mom!\n"); } ``` ```asm .text jmp main print_string: #{push:print_string} mov D, SP add D, -1 store BP, D mov SP, D mov BP, SP .file 1 "wow.c" .loc 1 5 0 # } .L0: .loc 1 4 0 # putchar(*p); mov B, BP add B, 2 load A, B mov B, A load A, B jeq .L3, A, 0 jmp .L4 .L3: .loc 1 5 0 # } jmp .L2 .L4: mov B, BP add B, 2 load A, B mov B, A load A, B mov D, SP add D, -1 store A, D mov SP, D putc A add SP, 1 .L1: .loc 1 4 0 # putchar(*p); mov B, BP add B, 2 load A, B mov D, SP add D, -1 store A, D mov SP, D add A, 1 mov B, BP add B, 2 store A, B load A, SP add SP, 1 .loc 1 5 0 # } jmp .L0 .L2: #{pop:print_string} mov SP, BP load A, SP add SP, 1 mov BP, A load A, SP add SP, 1 jmp A .text main: #{push:main} mov D, SP add D, -1 store BP, D mov SP, D mov BP, SP .loc 1 10 0 # } .data .L5: .string "Hi, mom!\n" .text mov A, .L5 mov D, SP add D, -1 store A, D mov SP, D mov A, .L6 mov D, SP add D, -1 store A, D mov SP, D jmp print_string .L6: mov A, B add SP, 1 #{pop:main} exit ``` here's some example C and IR
Leave a Comment