Created
March 12, 2015 13:09
-
-
Save nbdd0121/2936be6bf7b497b3d87d to your computer and use it in GitHub Desktop.
Brainf*ck Norlit IR Compiled to Assembly
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[bits 64] | |
[global norlit.lib.zeroinitialize] | |
[extern memset] | |
norlit.lib.zeroinitialize: | |
mov r8, rdx | |
mov rdx, 0 | |
jmp memset | |
[extern putchar] | |
[extern getchar] | |
[global main] | |
main: | |
push rbp | |
mov rbp, rsp | |
sub rsp, 112 | |
;i8* %heap = alloca [4096 x i8] | |
sub rsp, 4096 | |
mov [rbp - 8], rsp | |
;i8** %data = alloca i8* | |
sub rsp, 16 | |
mov [rbp - 16], rsp | |
;store i8** %data, i8* %heap | |
mov rax, [rbp - 16] | |
mov rdx, [rbp - 8] | |
mov [rax], rdx | |
;call void(i8*, i32) @norlit.lib.zeroinitialize, i8* %heap, i32 4096 | |
mov rcx, [rbp - 8] | |
mov rdx, 4096 | |
sub rsp, 32 | |
call norlit.lib.zeroinitialize | |
add rsp, 32 | |
;i8 %2 = call i8() @getchar | |
sub rsp, 32 | |
call getchar | |
add rsp, 32 | |
mov [rbp - 24], rax | |
;i8* %3 = load i8** %data | |
mov rax, [rbp - 16] | |
mov rax, [rax] | |
mov [rbp - 32], rax | |
;i8 %4 = i8 %2 + i8 1 | |
mov rax, [rbp - 24] | |
inc rax | |
mov [rbp - 40], rax | |
;store i8* %3, i8 %4 | |
mov rax, [rbp - 32] | |
mov rdx, [rbp - 40] | |
mov [rax], dl | |
.8: | |
;i8* %5 = load i8** %data | |
mov rax, [rbp - 16] | |
mov rax, [rax] | |
mov [rbp - 48], rax | |
;i8 %6 = load i8* %5 | |
mov rax, [rbp - 48] | |
movzx rax, byte[rax] | |
mov [rbp - 56], rax | |
;jz i8 %6, .21 | |
mov rax, [rbp - 56] | |
test rax, rax | |
jz .21 | |
;i8* %7 = load i8** %data | |
mov rax, [rbp - 16] | |
mov rax, [rax] | |
mov [rbp - 64], rax | |
;i8 %8 = load i8* %7 | |
mov rax, [rbp - 64] | |
movzx rax, byte[rax] | |
mov [rbp - 72], rax | |
;i8 %9 = i8 %8 - i8 1 | |
mov rax, [rbp - 72] | |
dec rax | |
mov [rbp - 80], rax | |
;store i8* %7, i8 %9 | |
mov rax, [rbp - 64] | |
mov rdx, [rbp - 80] | |
mov [rax], dl | |
;call void(i8) @putchar, i8 %9 | |
mov rcx, [rbp - 80] | |
sub rsp, 32 | |
call putchar | |
add rsp, 32 | |
;i8 %10 = call i8() @getchar | |
sub rsp, 32 | |
call getchar | |
add rsp, 32 | |
mov [rbp - 88], rax | |
;i8* %11 = load i8** %data | |
mov rax, [rbp - 16] | |
mov rax, [rax] | |
mov [rbp - 96], rax | |
;i8 %12 = i8 %10 + i8 1 | |
mov rax, [rbp - 88] | |
inc rax | |
mov [rbp - 104], rax | |
;store i8* %11, i8 %12 | |
mov rax, [rbp - 96] | |
mov rdx, [rbp - 104] | |
mov [rax], dl | |
;jmp .8 | |
jmp .8 | |
.21: | |
mov rsp, rbp | |
pop rbp | |
mov rax, 0 | |
ret | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment