aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAryadev Chavali <aryadev@aryadevchavali.com>2023-11-09 08:52:28 +0000
committerAryadev Chavali <aryadev@aryadevchavali.com>2023-11-09 08:52:28 +0000
commitbd6fb54e3116b102670c980851af56461771545d (patch)
tree71641a7d51b6bda43d61d02918d97068db09b55f
parentf896ad2cb714be6853ad7e0cec854d4295de5bed (diff)
downloadovm-bd6fb54e3116b102670c980851af56461771545d.tar.gz
ovm-bd6fb54e3116b102670c980851af56461771545d.tar.bz2
ovm-bd6fb54e3116b102670c980851af56461771545d.zip
Use constants in examples where possible
Stuff like numeric limits can be codified in constants which act self documenting.
-rw-r--r--examples/factorial.asm4
-rw-r--r--examples/fib.asm60
2 files changed, 34 insertions, 30 deletions
diff --git a/examples/factorial.asm b/examples/factorial.asm
index 76e80b5..021360b 100644
--- a/examples/factorial.asm
+++ b/examples/factorial.asm
@@ -1,6 +1,8 @@
;;; factorial.asm: A program that generates the factorials of each
;;; number from 1 to 24 (24!~=UINT64_MAX). Using the registers to
;;; store `n` and `n!`.
+ ;; Constants
+ %const(limit) 22 %end
;; Setup entrypoint
global main
@@ -38,7 +40,7 @@ loopback:
mult.word
mov.word 1
- push.word 24
+ push.word $limit
push.reg.word 0
gte.word
;; Jump to `loopback`
diff --git a/examples/fib.asm b/examples/fib.asm
index 03d9725..717ca8c 100644
--- a/examples/fib.asm
+++ b/examples/fib.asm
@@ -4,6 +4,30 @@
;;; memory is necessary for this program to function, unlike a pure
;;; stack version.
+ ;; Constants
+ %const(limit) 12200160415121876738 %end
+ %const(increment_i)
+ push.reg.word 2
+ push.word 1
+ plus.word
+ mov.word 2
+ %end
+
+ %const(print_i)
+ push.reg.word 2
+ print.word
+ %end
+
+ %const(print_reg_0)
+ push.reg.word 0
+ print.word
+ %end
+
+ %const(print_reg_1)
+ push.reg.word 1
+ print.word
+ %end
+
;; Setup entrypoint
global main
main:
@@ -32,7 +56,7 @@ loopback:
plus.word
mov.word 1
- push.word 12200160415121876738
+ push.word $limit
push.reg.word 1
gte.word
;; Jump to `loopback`
@@ -42,46 +66,24 @@ loopback:
print_pair:
push.byte '\t'
print.char
- call print_i
+ $print_i
push.byte ':'
print.char
push.byte ' '
print.char
- call print_reg_0
+ $print_reg_0
push.byte '\n'
print.char
- call increment_i
+ $increment_i
push.byte '\t'
print.char
- call print_i
+ $print_i
push.byte ':'
print.char
push.byte ' '
print.char
- call print_reg_1
+ $print_reg_1
push.byte '\n'
print.char
- call increment_i
- ret
-
-increment_i:
- push.reg.word 2
- push.word 1
- plus.word
- mov.word 2
- ret
-
-print_i:
- push.reg.word 2
- print.word
- ret
-
-print_reg_0:
- push.reg.word 0
- print.word
- ret
-
-print_reg_1:
- push.reg.word 1
- print.word
+ $increment_i
ret