From fc4b9702d21b594268220ea761a390ff87c932e0 Mon Sep 17 00:00:00 2001
From: Aryadev Chavali <aryadev@aryadevchavali.com>
Date: Thu, 2 Nov 2023 23:39:31 +0000
Subject: Added comments to test.asm

---
 test.asm | 25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/test.asm b/test.asm
index 6f857b8..8131003 100644
--- a/test.asm
+++ b/test.asm
@@ -1,5 +1,7 @@
+  ;; Allocate a buffer of 3 characters
   malloc.byte 3
   mov.word 0
+  ;; Setup the buffer to be equivalent to "abc"
   push.reg.word 0
   push.byte 'a'
   mset.byte 0
@@ -10,36 +12,51 @@
   push.byte 'c'
   mset.byte 2
 
+  ;; Save buffer to W[8] because the first 8 registers should be
+  ;; reserved for library routines as it may be overwritten
   push.reg.word 0
   mov.word 8
+
   push.reg.word 0
+  ;; Call the routine
   call print_cptr
+
+  ;; Delete allocated buffer
   push.reg.word 8
   mdelete
 
-  push.byte '\n'
-  print.char
-
   halt
 
 ;;; print_cptr: Prints pointer to a buffer of characters.  Pointer
 ;;; should be on the stack as a word.
 print_cptr:
+  ;; Save pointer in layout to W[0], P -> W[0]
   mov.word 0
+  ;; iterator I -> W[1]
   push.word 0
   mov.word 1
-  push.reg.word 0
+  ;; (W[0])[W[1]] -> P[I]
+  push.reg.word 0               ; <-- #
   push.reg.word 1
   mget.stack.byte
   print.char
+
+  ;; I += 1
   push.reg.word 1
   push.word 1
   plus.word
   mov.word 1
+
+  ;; if I != |P| ...
   push.reg.word 1
   push.reg.word 0
   msize
   eq.word
   not.byte
+  ;; then go to #
   jump.if.byte *-13
+  ;; else print a newline
+  push.byte '\n'
+  print.char
+  ;; return back to the caller
   ret
-- 
cgit v1.2.3-13-gbd6f