From 703a8ba9680e5ae988866d816855057bd5727193 Mon Sep 17 00:00:00 2001 From: janis Date: Thu, 16 Oct 2025 21:33:58 +0200 Subject: [PATCH] read-print file --- lang/src/main.asm | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/lang/src/main.asm b/lang/src/main.asm index 709ad71..795c961 100644 --- a/lang/src/main.asm +++ b/lang/src/main.asm @@ -10,6 +10,8 @@ section .data file_error_msg_len equ $ - file_error_msg error_msg db "Error: " error_msg_len equ $ - error_msg + buffer_size equ 1024 + buffer times buffer_size db 0 section .text global _start @@ -30,14 +32,37 @@ _start: ; open file for reading mov rdx, rax ; filename pointer call fopen_read - mov rax, 42 - ; exit with success - mov rdx, 0 - call exit + +.read_loop: + mov r9, rax ; file descriptor + mov rax, 0 ; syscall: read + mov rdi, r9 ; fd + lea rsi, [buffer] ; buffer + mov rdx, buffer_size ; size + syscall + cmp rax, 0 ; check for EOF + jle .exit ; if rax <= 0, exit loop + mov rcx, rax ; number of bytes read + + ; write to stdout for now + mov rax, 1 ; syscall: write + mov rdi, 1 ; fd: stdout + lea rsi, [buffer] ; buffer + mov rdx, rcx ; len: bytes read + syscall + jmp .read_loop .no_filename: call panic +.exit: + call exit + +;; ============================== +;; Helper functions +;; ============================== + +;; Abort the program with a default panic message panic: mov rdx, panic_msg mov rcx, panic_msg_len @@ -54,10 +79,6 @@ exit: mov rdi, rdx syscall -;; ============================== -;; Helper functions -;; ============================== - ;; Writes a string to stderr: ;; rdx: pointer to string ;; rcx: length of string @@ -147,4 +168,4 @@ fopen_read: pop rsi add rsp, rsi ; dealloc - ret + call panic