Skip to content

Instantly share code, notes, and snippets.

@shekeru
Last active July 14, 2020 01:36
Show Gist options
  • Save shekeru/d0358d62a4628b7507986a3118ea186d to your computer and use it in GitHub Desktop.
Save shekeru/d0358d62a4628b7507986a3118ea186d to your computer and use it in GitHub Desktop.
Project Euler 1 (Intcode Custom ASM)
rbx, !halt
mul, !halt, 1, *1
0_jmp, 0, !main
-global, 16, sbufR
-global, 16, sbufN
-global, 0, txt
b'Result: \x00'
-global, 0, div
-vars, i, neg, b, a, rsp
rbx, 5
mul, -1, >b, >neg
mul, 0, 0, >i
-global, 0, div_loop_1
lt, >a, >b, $cmp
1_jmp, $cmp, !div_break_1
add, >neg, >a, >a
add, 1, >i, >i
0_jmp, 0, !div_loop_1
-global, 0, div_break_1
mul, 1, >i, $retn
rbx, -5
0_jmp, 0, *1
-global, 0, mod
-vars, neg, b, a, rsp
rbx, 4
mul, -1, >b, >neg
-global, 0, mod_loop_1
lt, >a, >b, $retn
1_jmp, $retn, !mod_break_1
add, >neg, >a, >a
0_jmp, 0, !mod_loop_1
-global, 0, mod_break_1
mul, 1, >a, $retn
rbx, -4
0_jmp, 0, *1
-global, 0, puts
-vars, ch, ptr, rsp
rbx, 3
add, 0, >ptr, &puts_ref
-global, 0, puts_loop_1
add, ^puts_ref, 0, >ch
0_jmp, >ch, !puts_break_1
cout, >ch
add, 1, &puts_ref, &puts_ref
0_jmp, 0, !puts_loop_1
-global, 0, puts_break_1
rbx, -3
0_jmp, 0, *1
-global, 0, show
-vars, int, rsp
rbx, 2
add, 0, !sbufR, &r0
add, 0, !sbufN, &r2
-global, 0, show_loop_1
add, 0, !13, *1
add, 0, >int, *2
add, 0, 10, *3
0_jmp, 0, !mod
add, 48, $retn, ^r0
add, 0, !13, *1
add, 0, >int, *2
add, 0, 10, *3
0_jmp, 0, !div
add, 0, $retn, >int
0_jmp, $retn, !show_break_1
add, 1, &r0, &r0
0_jmp, 0, !show_loop_1
-global, 0, show_break_1
add, 0, &r0, &r1
-global, 0, show_loop_2
add, ^r1, 0, ^r2
eq, &r1, !sbufR, $cmp
1_jmp, $cmp, !show_break_2
add, -1, &r1, &r1
add, 1, &r2, &r2
0_jmp, 0, !show_loop_2
-global, 0, show_break_2
add, 0, !sbufN, $retn
rbx, -2
0_jmp, 0, *1
-global, 0, main
-vars, sum, i, rsp
rbx, 3
mul, 0, 0, >i
mul, 0, 0, >sum
-global, 0, main_loop_2
add, 1, >i, >i
lt, >i, 10, $cmp
0_jmp, $cmp, !main_break_2
add, 0, !13, *1
add, 0, >i, *2
add, 0, 3, *3
0_jmp, 0, !mod
add, 0, $retn, $cmp
add, 0, !13, *1
add, 0, >i, *2
add, 0, 5, *3
0_jmp, 0, !mod
mul, $cmp, $retn, $cmp
1_jmp, $cmp, !main_cond_1
add, >i, >sum, >sum
-global, 0, main_cond_1
0_jmp, 0, !main_loop_2
-global, 0, main_break_2
add, 0, !9, *1
add, 0, !txt, *2
0_jmp, 0, !puts
add, 0, !9, *1
add, 0, >sum, *2
0_jmp, 0, !show
add, 0, !9, *1
add, 0, $retn, *2
0_jmp, 0, !puts
rbx, -3
0_jmp, 0, *1
-global, 1, cmp
-global, 1, retn
-global, 0, halt
halt
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment