undar-lang/test/fib.ul.ir

49 lines
848 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 -> void
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