diff options
Diffstat (limited to 'examples/factorial.asm')
-rw-r--r-- | examples/factorial.asm | 43 |
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 |