Pārlūkot izejas kodu

Adding main file making use of alloc

Vinicius Teshima 10 mēneši atpakaļ
vecāks
revīzija
c52fa6da8c
1 mainītis faili ar 77 papildinājumiem un 0 dzēšanām
  1. 77 0
      src/main.fas

+ 77 - 0
src/main.fas

@@ -0,0 +1,77 @@
+format ELF64
+
+include './syscalls.inc'
+include './types.inc'
+include './utils.inc'
+
+section ".text" executable
+
+;; rdi -> const char *filename
+;; rsi -> RET size_t *size 
+;; rax <- char *buf
+;; rdx <- file_err err
+;file_read_all:
+;	sys_open path, O_RDONLY, 0
+;	if_lt_jmp rax, -1, fail_open
+;	mov [fd], rax
+;	ret
+;_file_read_all_fail_open:
+
+;; rdi -> const char *cstr1
+;; rsi -> size_t cstr1_size
+;; rdx -> const char *cstr2
+;; rcx -> size_t cstr2_size
+;; rax <- char *cstr
+;; rdx <- size_t cstr_size
+;str_concat:
+;	cmp cstr2_size, 0
+;	je _str_concat_empty
+;	ret
+;_str_concat_empty:
+;	mov rax, rdi
+;	ret
+
+extrn alloc
+
+public _start
+_start:
+  pp aerr err
+  pp _ptr ptr
+	mov [_ptr.cap], 10
+	mov rdi, [_ptr.cap]
+	call alloc
+	mov [_ptr], rax
+	mov r10, [rdx]
+	mov [aerr.code], r10
+	add rdx, 8
+	mov r10, [rdx]
+	mov [aerr.name], r10
+	add rdx, 8
+	mov r10, [rdx]
+	mov [aerr.name.size], r10
+	sys_write 1, [aerr.name], [aerr.name.size]
+  pp new_line db 10
+	sys_write 1, new_line, new_line.size
+	sys_munmap [_ptr], [_ptr.cap]
+	sys_exit [aerr.code]
+
+fail_open:
+  pp fail_open_msg db "Failed to open file", 10
+	sys_write 2, fail_open_msg, fail_open_msg.size
+	sys_exit 1
+
+fail_read:
+  pp fail_read_msg db "Failed to read file", 10
+	sys_write 2, fail_read_msg, fail_read_msg.size
+	sys_exit 1
+
+fail_write:
+  pp fail_write_msg db "Failed to write file", 10
+	sys_write 2, fail_write_msg, fail_write_msg.size
+	sys_exit 1
+
+section ".bss" writeable
+
+path db "./Makefile", 0
+fd  rq 1
+msg db "Hello World", 10