.function Main 0

# 2^0
ldconst 2
ldconst 0
call Pow
out
pop

# 5^2
ldconst 5
ldconst 2
call Pow
out
pop

# 3^1
ldconst 3
ldconst 1
call Pow
out
pop

# 5^3
ldconst 5
ldconst 3
call Pow
out
pop

# 3^4
ldconst 3
ldconst 4
call Pow
out
pop

ldconst 0
ret


# Pow($0, $1)
.function Pow 2

# $1++
ldloc 1
ldconst 1
add
stloc 1

# $2 = 1
ldconst 1
stloc 2

# $3 = 1
ldconst 1
stloc 3

goto LOOPCOND

LOOPSTART: pop # result of $3 < $1

# $2 *= $0
ldloc 2
ldloc 0
mul
stloc 2

# $3++
ldloc 3
ldconst 1
add
stloc 3

# $3 < $1
LOOPCOND: ldloc 3
ldloc 1
lt
brt LOOPSTART

# return $2
ldloc 2
ret