aboutsummaryrefslogtreecommitdiff
path: root/examples/fib.asm
diff options
context:
space:
mode:
Diffstat (limited to 'examples/fib.asm')
-rw-r--r--examples/fib.asm37
1 files changed, 37 insertions, 0 deletions
diff --git a/examples/fib.asm b/examples/fib.asm
new file mode 100644
index 0000000..004a5c3
--- /dev/null
+++ b/examples/fib.asm
@@ -0,0 +1,37 @@
+;;; fib.asm: A program that indefinitely generates the fibonacci
+;;; numbers. Using the registers to store the pairs of fibonacci
+;;; numbers, we ensure only a finite memory space is necessary for
+;;; this program to function, unlike a pure stack version.
+ ;; Setup initial REG[0] = 1 and REG[1] = 1
+ push.word 1
+ mov.word 0
+ push.word 1
+ mov.word 1
+
+ ;; Print REG[0] and REG[1]
+ ;; Here is the loop back point `#`
+ push.reg.word 0
+ print.word
+ push.byte '\n'
+ print.char
+
+ push.reg.word 1
+ print.word
+ push.byte '\n'
+ print.char
+
+ ;; REG[0] += REG[1]
+ push.reg.word 0
+ push.reg.word 1
+ plus.word
+ mov.word 0
+
+ ;; REG[1] += REG[0]
+ push.reg.word 0
+ push.reg.word 1
+ plus.word
+ mov.word 1
+
+ ;; Jump to `#`
+ jump.abs 4
+ halt