undar-lang/test/fib.ul.ir

49 lines
847 B
Plaintext

global str terminal_namespace = "/dev/term/0"
global str new_line = "\n"
function main ()
int n $0
int str_n $1
load_immediate 35 -> n
call &fib n -> n
int_to_string n -> str_n
call &pln str_n
exit 0
function fib (int n $0)
load_immediate 2 -> $1
jump_lt_int &base_case n $1
load_immediate 2 -> $3
sub_int n $3 -> $4
call &fib $4 -> $5
load_immediate 1 -> $3
sub_int n $3 -> $4
call &fib $4 -> $6
add_int $6 $5 -> $7
return $7
else base_case
return n
function pln (str message $0)
str ts $1
int mode $5
int msg_length $2
str nl $3
int nl_length $4
load_immediate &terminal_namespace -> ts
load_immediate 0 -> mode
syscall OPEN ts mode -> ts
strlen message -> msg_length
syscall WRITE ts message msg_length
load_immediate &new_line -> nl
strlen nl -> nl_length
syscall WRITE ts nl nl_length
return