hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/aoc-2025/day2.asm
diff options
context:
space:
mode:
Diffstat (limited to 'aoc-2025/day2.asm')
-rw-r--r--aoc-2025/day2.asm94
1 files changed, 4 insertions, 90 deletions
diff --git a/aoc-2025/day2.asm b/aoc-2025/day2.asm
index c1ae232..987fbf9 100644
--- a/aoc-2025/day2.asm
+++ b/aoc-2025/day2.asm
@@ -5,18 +5,11 @@ default rel
global _start
-%define SYS_EXIT 60
-%define SYS_READ 0
-%define SYS_WRITE 1
-%define SYS_OPEN 2
-%define SYS_CLOSE 3
-
-%define O_RDONLY 0
-%define STDOUT 1
+%include "utils/io.asm"
+%include "utils/parse.asm"
section .data
input_path db "input/day2.txt", 0
- newline db 10
label1 db "Part 1: ", 0
label2 db "Part 2: ", 0
@@ -29,8 +22,6 @@ section .bss
sum1 resq 1
sum2 resq 1
- number_buffer resb 32 ; for printing and number_to_string
-
section .text
_start:
@@ -139,7 +130,7 @@ print_results:
handle_line:
next_range:
; parse start
- call parse_int64
+ call parse_u64
mov r13, rax
cmp byte [rsi], '-'
@@ -147,7 +138,7 @@ next_range:
inc rsi
; parse end
- call parse_int64
+ call parse_u64
mov r14, rax
range_loop:
@@ -186,26 +177,6 @@ after_range:
done_line:
ret
-; RSI points at decimal digits; stops on first non-digit
-parse_int64:
- xor rax, rax
-.parse:
- mov dl, [rsi]
- cmp dl, '0'
- jl .done
- cmp dl, '9'
- jg .done
-
- sub dl, '0'
- movzx rdx, dl
- imul rax, rax, 10
- add rax, rdx
-
- inc rsi
- jmp .parse
-.done:
- ret
-
; number_to_string: convert RAX to decimal ASCII, MSB-first
; Output:
; RSI = pointer to first digit
@@ -351,60 +322,3 @@ check_invalid2:
pop rdx
pop rbx
ret
-
-print_newline:
- mov rax, SYS_WRITE
- mov rdi, STDOUT
- mov rsi, newline
- mov rdx, 1
- syscall
- ret
-
-print_int64:
- mov rdi, number_buffer+31
- mov byte [rdi], 0
- dec rdi
-
- cmp rax, 0
- jne .conv
-
- mov byte [rdi], '0'
- jmp .done
-.conv:
- mov rbx, 10
-.next:
- xor rdx, rdx
- div rbx
- add dl, '0'
- mov [rdi], dl
- dec rdi
- test rax, rax
- jnz .next
-
- inc rdi
-.done:
- mov rax, SYS_WRITE
- mov rsi, rdi
- mov rdi, STDOUT
- mov rdx, number_buffer+31
- sub rdx, rsi
- syscall
- ret
-
-print_string:
- push rcx
- push rdx
- mov rdx, 0
-.length:
- cmp byte [rcx+rdx], 0
- je .submit
- inc rdx
- jmp .length
-.submit:
- mov rax, SYS_WRITE
- mov rdi, STDOUT
- mov rsi, rcx
- syscall
- pop rdx
- pop rcx
- ret