diff options
Diffstat (limited to 'examples')
| -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 | 
