diff options
| author | Bond_009 <bond.009@outlook.com> | 2022-12-01 22:30:22 +0100 |
|---|---|---|
| committer | Bond_009 <bond.009@outlook.com> | 2022-12-01 22:30:22 +0100 |
| commit | baf4910870a6e8999802b9a4a22eabd4142a34e3 (patch) | |
| tree | 2d11443dc21e53bd0d99d015cf789937d6d95862 /2021/asm/day01.asm | |
| parent | 49d0c908f24b2c193c9deed1716fe36061ba26a1 (diff) | |
Move all Advent of Codes into one repo
Diffstat (limited to '2021/asm/day01.asm')
| -rw-r--r-- | 2021/asm/day01.asm | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/2021/asm/day01.asm b/2021/asm/day01.asm new file mode 100644 index 0000000..b4f73e7 --- /dev/null +++ b/2021/asm/day01.asm @@ -0,0 +1,65 @@ +%include "unistd.asm" +%include "utils.asm" + +stdout equ 1 + +global _start + +section .text +_start: + mov rcx, [rsp] ; Get number of arguments + mov rdi, [rsp + rcx * 8] ; Get last argument + + mov rax, SYS_access ; Check if file exists and is readable + mov esi, R_OK + syscall + test rax, rax + jnz .exit_err + + mov rax, SYS_open + xor esi, esi + xor edx, edx + syscall + + mov r8d, eax ; Move fd into r8 + mov rax, SYS_mmap + xor edi, edi ; Let the kernel choose the address + mov rsi, 12288 + mov rdx, PROT_READ + mov r10d, MAP_PRIVATE + xor r9d, r9d + syscall + + cmp rax, -1 ; Exit on error + je .exit_err + + xor r13d, r13d + mov r12d, ~0 + mov rdi, rax +.loop: + call atoi + cmp eax, r12d + jna .na + inc r13d +.na: + mov r12d, eax + + cmp byte [rdi], 0 + je .exit + inc rdi + cmp byte [rdi], 0 + jne .loop + +.exit: + mov edi, stdout + mov esi, r13d + call write_ulong + + mov rax, SYS_exit + xor edi, edi + syscall + +.exit_err: + mov rax, SYS_exit + mov edi, 1 + syscall |
