Untitled

 avatar
unknown
plain_text
21 days ago
1.3 kB
7
Indexable
```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