aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Cunningham <cc@localhost>2024-07-14 09:54:54 -0700
committerChristian Cunningham <cc@localhost>2024-07-14 09:54:54 -0700
commitf4c8ec9028f19fe334ecd4ae49521011fcdba012 (patch)
tree78d8a98ebfbfeb16777076ee17dd297b019b13a1
parent7d7f6aee29067234baecd771637f123f928f0bf0 (diff)
Single Linked List Impl
-rw-r--r--debug.inc14
-rw-r--r--linked_list.inc18
-rw-r--r--main.asm22
3 files changed, 46 insertions, 8 deletions
diff --git a/debug.inc b/debug.inc
index 52a1509..230c7e8 100644
--- a/debug.inc
+++ b/debug.inc
@@ -6,6 +6,12 @@
%ifndef DTOS_INC
%include "dtos.inc"
%endif
+%ifndef MONAD_INC
+%include "monad.inc"
+%endif
+
+ section .data
+ m_make debug_register
;; TODO: Make print without newlineg
%macro DEBUG_HERE 0-1 ""
@@ -23,4 +29,12 @@
lea rax, [rel %%text]
call print_zstring
%endm
+
+%macro REGD 0-2 rax,h
+ section .text
+ lea rax, [%1]
+ m_return rel m_debug_register
+ m_bind data_to_zstring_m%2
+ m_call print_zstring
+%endm
%endif
diff --git a/linked_list.inc b/linked_list.inc
index 76a3956..4fbb923 100644
--- a/linked_list.inc
+++ b/linked_list.inc
@@ -15,20 +15,30 @@ dll_prev: resq 1
dll_value: resq 1
endstruc
-%macro alloc_lln 0
+%macro lln_alloc 0
alloc LinkedListNode_size
+ mov qword [rax + ll_next], 0
%endmacro
-%macro alloc_dlln 0
+%macro dlln_alloc 0
alloc DoublyLinkedListNode_size
+ mov qword [rax + dll_next], 0
%endmacro
-%macro free_lln 0-1 rax
+%macro lln_free 0-1 rax
free %1, LinkedListNode_size
%endmacro
-%macro free_dlln 0-1 rax
+%macro dlln_free 0-1 rax
free %1, DoublyLinkedListNode_size
%endmacro
+%macro ll_push 2
+ ;; %1 = Current Linked List Node
+ ;; %2 = Value to push (Must fit in a register, larger must be pushed as pointer to the underlying structure)
+ lln_alloc
+ mov qword [%1 + ll_next], rax
+ mov qword [rax + ll_value], %2
+%endm
+
%endif
diff --git a/main.asm b/main.asm
index 56e36c2..66f73f6 100644
--- a/main.asm
+++ b/main.asm
@@ -74,8 +74,8 @@ _main:
alloc FBUF_ALLOC_SIZE
mov rbx, rax
m_call ffopen, rel m_test_file
- mov [rel test_file_filedata + buffer], rbx
- mov qword [rel test_file_filedata + size], FBUF_ALLOC_SIZE
+ mov [rel test_file_filedata + fd_buffer], rbx
+ mov qword [rel test_file_filedata + fd_size], FBUF_ALLOC_SIZE
flen test_file
push rax
m_return rel m_test_mdots
@@ -89,14 +89,28 @@ _main:
call ffread
fclose test_file
- mov rax, [rel test_file_filedata + buffer]
+ mov rax, [rel test_file_filedata + fd_buffer]
mov rcx, 0
add rax, 54
mov [rax], rcx
- mov rax, [rel test_file_filedata + buffer]
+ mov rax, [rel test_file_filedata + fd_buffer]
call print_zstring
free rbx, FBUF_ALLOC_SIZE
+ lln_alloc
+ push rax
+ mov rbx, rax
+ mov r12, 0xDEADBEEF
+ ll_push rbx, r12
+ push rax
+ mov rax, [rax + ll_value]
+ REGD rax
+ pop rax
+ lln_free
+ pop rax
+ lln_free
+
+
exit_prog
.error.exit: