From fc4b9702d21b594268220ea761a390ff87c932e0 Mon Sep 17 00:00:00 2001 From: Aryadev Chavali 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