fibo.asm 616 B

12345678910111213141516171819202122232425262728293031323334
  1. ;; fibo(30)
  2. imm 30
  3. fibo rel call
  4. ;; pop arguments and push return value to stack
  5. pop rv
  6. ;; call print_number (syscall number is 1)
  7. imm 1 syscall
  8. exit
  9. fibo:
  10. ;; setup stack pointer and base pointer
  11. bp sp sbp
  12. ;; get first argument
  13. imm 2 bpick
  14. ;; if (x > 2) then
  15. imm 2 gt
  16. .else rel jz
  17. ;; return fibo(x - 2) + fibo(x - 1)
  18. imm 2 bpick
  19. imm 1 sub
  20. fibo rel call
  21. pop rv
  22. imm 2 bpick
  23. imm 2 sub
  24. fibo rel call
  25. pop rv add
  26. srv
  27. .end rel jmp
  28. .else:
  29. ;; else return 1
  30. imm 1 srv
  31. .end rel jmp
  32. .end:
  33. bp ssp sbp
  34. ret