diff --git a/test/add.asm.lisp b/test/add.asm.lisp index 9bd95bf..ea016d7 100644 --- a/test/add.asm.lisp +++ b/test/add.asm.lisp @@ -1,32 +1,26 @@ ((code (label main - (load-immediate $0 1) - (push $0) - (load-immediate $0 1) - (push $0) + (push 1) + (push 1) (call &add) - (pop $0) - (int-to-string $1 $0) - (push $1) - (call &println) + (int-to-string) + (call &pln) (halt)) (label add - (pop $0) - (pop $1) - (add-int $2 $1 $0) - (push $2) + (add-int) (return)) - (label println - (load-immediate $0 &terminal-namespace) - (syscall OPEN $0 $0 $0) - (load-immediate $3 &new-line) - (pop $1) - (string-length $2 $1) - (syscall WRITE $0 $1 $2) - (string-length $4 $3) - (syscall WRITE $0 $3 $4) + (label pln + (dup) + (string-length) + (push &terminal-namespace) + (syscall WRITE) + (push &new-line) + (dup) + (string-length) + (push &terminal-namespace) + (syscall WRITE) (return))) (data (label terminal-namespace "/dev/term/0") diff --git a/test/fib.asm.lisp b/test/fib.asm.lisp index 71d501f..bf8c516 100644 --- a/test/fib.asm.lisp +++ b/test/fib.asm.lisp @@ -1,42 +1,43 @@ ((code - (label main - (load-immediate $0 35) - (push $0) - (call &fib) - (pop $0) - (int-to-string $1 $0) - (push $1) - (call &pln) - (halt)) - (label fib - (pop $0) - (load-immediate $1 2) - (jump-lt-int &base-case $0 $1) - (load-immediate $3 2) - (sub-int $4 $0 $3) - (push $4) - (call &fib) - (load-immediate $3 1) - (sub-int $4 $0 $3) - (push $4) - (call &fib) - (pop $4) - (pop $5) - (add-int $6 $5 $4) - (push $6) - (return) - (label base-case - (push $0) - (return))) - (label pln - (load-immediate $0 &terminal-namespace) - (syscall OPEN $0 $0 $0) - (load-immediate $3 &new-line) - (pop $1) - (string-length $2 $1) - (syscall WRITE $0 $1 $2) - (string-length $4 $3) - (syscall WRITE $0 $3 $4) + (label main + (push 35) + (call &fib) + (int-to-string) + (call &pln) + (halt)) + + (label fib + (dup) ; dup num + (push 2) ; Base case: n < 2 + (jump-lt-int &base-case) + + (dup) + (push 2) ; First call: fib(n-2) + (sub-int) ; n - 2 + (call &fib) + + (over) ; get n over the previous answer + (push 1) ; Second call: fib(n-1) + (sub-int) ; n-1 (using saved n) + (call &fib) ; Result in $2 + + ; Combine results + (add-int) ; fib(n-2) + fib(n-1) + (return) ; Return result + + (label base-case + (return))) ; Return n directly + + (label pln + (dup) + (string-length) + (push &terminal-namespace) + (syscall WRITE) + (push &new-line) + (dup) + (string-length) + (push &terminal-namespace) + (syscall WRITE) (return))) (data (label terminal-namespace "/dev/term/0")