From 78c4d3d06d8e863cfe2489281ccfe206544cbd7f Mon Sep 17 00:00:00 2001 From: hachem Date: Sun, 6 Sep 2026 00:40:37 +0200 Subject: fix: add utilities --- aoc-2025/day12.asm | 120 ++++------------------------------------------------- 1 file changed, 8 insertions(+), 112 deletions(-) (limited to 'aoc-2025/day12.asm') diff --git a/aoc-2025/day12.asm b/aoc-2025/day12.asm index 6eb64a9..8931a2b 100644 --- a/aoc-2025/day12.asm +++ b/aoc-2025/day12.asm @@ -5,14 +5,8 @@ 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" %define RAW_SIZE 262144 %define GRID_SIZE 4096 ; regions are at most 50x50 @@ -20,8 +14,6 @@ global _start section .data input_path db "input/day12.txt", 0 - newline db 10 - label1 db "Part 1: ", 0 section .bss @@ -54,35 +46,14 @@ section .bss left resq 1 count_feasible resq 1 - number_buffer resb 32 - section .text _start: - mov rax, SYS_OPEN mov rdi, input_path - mov rsi, O_RDONLY - xor rdx, rdx - syscall - mov r12, rax - - xor r13, r13 -read_loop: - mov rax, SYS_READ - mov rdi, r12 - lea rsi, [raw + r13] + lea rsi, [raw] mov rdx, RAW_SIZE - sub rdx, r13 - syscall - cmp rax, 0 - jle read_done - add r13, rax - jmp read_loop -read_done: - mov [raw_len], r13 - mov rax, SYS_CLOSE - mov rdi, r12 - syscall + call read_file + mov [raw_len], rax ; parse shapes and regions lea rsi, [raw] @@ -106,7 +77,7 @@ pline: cmp al, '9' jg maybe_grid ; a number begins the line - call parse_num + call parse_u64 mov r10, rax mov al, [rsi] cmp al, 'x' @@ -127,7 +98,7 @@ region_line: mov qword [orients_done], 1 .have: inc rsi ; skip 'x' - call parse_num + call parse_u64 mov r11, rax ; L .find_colon: mov al, [rsi] @@ -145,7 +116,7 @@ region_line: inc rsi jmp .rsp .rsp_done: - call parse_num + call parse_u64 mov [counts + rcx*8], rax inc rcx jmp .rcounts @@ -215,24 +186,6 @@ pdone: xor rdi, rdi syscall -; parse_num: read decimal at [RSI], advancing RSI. Clobbers RAX, RDX. -parse_num: - xor rax, rax -.d: - 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 .d -.done: - ret - ; gen_orients: build the 8 dihedral orientations of every shape as offset lists ; anchored at their row-major-first cell. gen_orients: @@ -531,60 +484,3 @@ rec: pop rbp 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 -- cgit v1.3