aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/factorial.asm43
1 files changed, 43 insertions, 0 deletions
diff --git a/examples/factorial.asm b/examples/factorial.asm
new file mode 100644
index 0000000..08c3c13
--- /dev/null
+++ b/examples/factorial.asm
@@ -0,0 +1,43 @@
+;;; factorai.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!`.
+
+ ;; Setup initial REG[0] = 1 and REG[1] = 1
+ push.word 1
+ mov.word 0
+ push.word 1
+ mov.word 1
+
+ ;; Print `REG[0]: REG[1]`
+ ;; Here is the loop back point `#`
+ push.byte '\t'
+ print.char
+ push.reg.word 0
+ print.word
+ push.byte ':'
+ print.char
+ push.byte ' '
+ print.char
+ push.reg.word 1
+ print.word
+ push.byte '\n'
+ print.char
+
+ ;; REG[0] += 1
+ push.reg.word 0
+ push.word 1
+ plus.word
+ mov.word 0
+
+ ;; REG[1] *= REG[0]
+ push.reg.word 0
+ push.reg.word 1
+ mult.word
+ mov.word 1
+
+ push.word 24
+ push.reg.word 0
+ gte.word
+ ;; Jump to `#`
+ jump.if.byte 4
+ halt