diff options
author | Aryadev Chavali <aryadev@aryadevchavali.com> | 2023-11-02 23:39:31 +0000 |
---|---|---|
committer | Aryadev Chavali <aryadev@aryadevchavali.com> | 2023-11-02 23:39:31 +0000 |
commit | fc4b9702d21b594268220ea761a390ff87c932e0 (patch) | |
tree | d810846070131dbbb599c4c399aa50175761da05 | |
parent | 0b0dc4c498eab619b99d9dd615f35f205f172574 (diff) | |
download | ovm-fc4b9702d21b594268220ea761a390ff87c932e0.tar.gz ovm-fc4b9702d21b594268220ea761a390ff87c932e0.tar.bz2 ovm-fc4b9702d21b594268220ea761a390ff87c932e0.zip |
Added comments to test.asm
-rw-r--r-- | test.asm | 25 |
1 files changed, 21 insertions, 4 deletions
@@ -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 |