From a9ef0dce69aba09e56b6a3547ae45be4da54ce56 Mon Sep 17 00:00:00 2001 From: Bill Rossi Date: Thu, 21 Dec 2023 11:45:43 -0500 Subject: [PATCH] Implement atoi --- fasm/2015/2/problem.asm | 31 ++++++++++++++++++------------- fasm/lib/itoa.inc | 28 ++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 13 deletions(-) diff --git a/fasm/2015/2/problem.asm b/fasm/2015/2/problem.asm index 74dbd49..2a461b0 100644 --- a/fasm/2015/2/problem.asm +++ b/fasm/2015/2/problem.asm @@ -2,27 +2,32 @@ format ELF64 executable 3 include "lib/linux_syscall.inc" include "lib/print.inc" include "lib/itoa.inc" +include "lib/file.inc" segment readable executable entry main main: - mov rax, 42069 - mov rbx, part_1 - call itoa + mov rdi, input_filename + call load_file - mov rdi, part_1_verbiage - call print_c_string + call part_1 exit 0 +part_1: + mov rdi, number + call atoi + mov rbx, part_1_answer + call itoa + mov rdi, part_1_verbiage + call print_c_string + ret + segment readable writable -input_filename db '../data/2015/1/input.txt', 0, 'more text', 0 -input_fd dq -1 -input dq -1 +input_filename db '../data/2015/2/input.txt', 0 part_1_verbiage db 'Part 1: ' -part_1 db ' ', 0 -part_2_verbiage db 'Part 2: ', 0 -part_2 db ' ', 0 -newline db 10 -file_stat s_stat +part_1_answer db ' ', 0 +part_2_verbiage db 'Part 2: ' +part_2_answer db ' ', 0 +number db '42069', 0 diff --git a/fasm/lib/itoa.inc b/fasm/lib/itoa.inc index de3293f..b0fe7a9 100644 --- a/fasm/lib/itoa.inc +++ b/fasm/lib/itoa.inc @@ -87,3 +87,31 @@ itoa: .done: ret + +;;; rdi should contain the address of a c-string +atoi: + mov r8, rdi + mov rax, 0 + mov rcx, 10 + +.lp: + cmp byte [r8], 0 + jz .done + mov r9, [r8] + and r9, 127 + sub r9, '0' + add rax, r9 + mov rcx, rax + add rax, rax + add rax, rax + add rax, rax + add rax, rcx + add rax, rcx + inc r8 + jmp .lp + +.done: + mov rcx, 10 + mov rdx, 0 + div rcx + ret