Factor out file-loading logic
This commit is contained in:
parent
47c1398c6d
commit
d45f882710
@ -2,31 +2,20 @@ format ELF64 executable 3
|
|||||||
include "lib/linux_syscall.inc"
|
include "lib/linux_syscall.inc"
|
||||||
include "lib/itoa.inc"
|
include "lib/itoa.inc"
|
||||||
include "lib/print.inc"
|
include "lib/print.inc"
|
||||||
|
include "lib/file.inc"
|
||||||
|
|
||||||
segment readable executable
|
segment readable executable
|
||||||
entry main
|
entry main
|
||||||
|
|
||||||
main:
|
main:
|
||||||
;; Determine the file size of the input file
|
mov rdi, input_filename
|
||||||
stat input_filename, file_stat
|
call load_file
|
||||||
|
|
||||||
;; Open a file descriptor for the input file
|
|
||||||
open input_filename, 0
|
|
||||||
mov [input_fd], rax
|
|
||||||
|
|
||||||
;; Map the input file into memory
|
|
||||||
mmap 0, [file_stat.st_size], PROT_READ, MAP_PRIVATE, [input_fd], 0
|
|
||||||
mov [input], rax
|
|
||||||
|
|
||||||
;; Close the input file
|
|
||||||
close [input_fd]
|
|
||||||
|
|
||||||
call part_1
|
call part_1
|
||||||
|
|
||||||
call part_2
|
call part_2
|
||||||
|
|
||||||
;; Unmap the mapped file
|
call unload_file
|
||||||
munmap [input], [file_stat.st_size]
|
|
||||||
|
|
||||||
;; Done!
|
;; Done!
|
||||||
exit 0
|
exit 0
|
||||||
@ -118,10 +107,7 @@ part_2:
|
|||||||
|
|
||||||
segment readable writable
|
segment readable writable
|
||||||
input_filename db '../data/2015/1/input.txt', 0
|
input_filename db '../data/2015/1/input.txt', 0
|
||||||
input_fd dq -1
|
|
||||||
input dq -1
|
|
||||||
part_1_verbiage db 'Part 1: '
|
part_1_verbiage db 'Part 1: '
|
||||||
part_1_answer db ' ', 0
|
part_1_answer db ' ', 0
|
||||||
part_2_verbiage db 'Part 2: '
|
part_2_verbiage db 'Part 2: '
|
||||||
part_2_answer db ' ', 0
|
part_2_answer db ' ', 0
|
||||||
file_stat s_stat
|
|
||||||
|
27
fasm/lib/file.inc
Normal file
27
fasm/lib/file.inc
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
input_fd dq -1
|
||||||
|
input dq -1
|
||||||
|
file_stat s_stat
|
||||||
|
|
||||||
|
;;; The input filename should be in rdi
|
||||||
|
load_file:
|
||||||
|
mov r8, rdi
|
||||||
|
;; Determine the file size of the input file
|
||||||
|
stat r8, file_stat
|
||||||
|
|
||||||
|
;; Open a file descriptor for the input file
|
||||||
|
open r8, 0
|
||||||
|
mov [input_fd], rax
|
||||||
|
|
||||||
|
;; Map the input file into memory
|
||||||
|
mmap 0, [file_stat.st_size], PROT_READ, MAP_PRIVATE, [input_fd], 0
|
||||||
|
mov [input], rax
|
||||||
|
|
||||||
|
;; Close the input file
|
||||||
|
close [input_fd]
|
||||||
|
ret
|
||||||
|
|
||||||
|
unload_file:
|
||||||
|
;; Unmap the mapped file
|
||||||
|
munmap [input], [file_stat.st_size]
|
||||||
|
|
||||||
|
ret
|
Loading…
Reference in New Issue
Block a user