Skip to content

Instantly share code, notes, and snippets.

@nbdd0121
Created March 12, 2015 13:09
Show Gist options
  • Save nbdd0121/2936be6bf7b497b3d87d to your computer and use it in GitHub Desktop.
Save nbdd0121/2936be6bf7b497b3d87d to your computer and use it in GitHub Desktop.
Brainf*ck Norlit IR Compiled to Assembly
[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