Professional Documents
Culture Documents
cos:
# loading initial number
s and operation numbers
l.s $f4, zero # load float 0.0 into $f4, k
l.s $f5, one # load float 1.0 into $f5, den
l.s $f6, one # load float 1.0 into $f6, sum
l.s $f7, one # load float 1.0 into $f7, num
l.s $f8, zero # load float 1.0 into $f8, term
l.s $f9, comp # load float 0.00001 into $f9, compariso
n
l.s $f10, negone # load float -1.0 into $f10
l.s $f11, one # load float 1.0 into $f11
mul.s $f13, $f12, $f12 # x2 = x*x
loop:
# the math
mul.s $f7, $f7, $f10 # num*(-1) = num
mul.s $f7, $f7, $f13 # (-1)*num*x2
add.s $f4, $f4, $f11 # k = k + 1
mul.s $f5, $f5, $f4 # den = den*(k+1)
add.s $f4, $f4, $f11 # k = k + 2
mul.s $f5, $f5, $f4 # den = den*(k+1)*(k+2)
div.s $f8, $f7, $f5 # term = num / den
add.s $f6, $f6, $f8 # sum = sum + term
mov.s $f16, $f8 # copy term into $f16
# absolute value of term
l.s $f17, zero # load 0.0 into $f17
c.lt.s $f17, $f16 # set cond. flag if 0 < term
bc1t positive # positive if number >= 0
sub.s $f16, $f17, $f16 # term = 0 - term
positive:
c.lt.s $f16, $f9 # set cond. flag if x < 0.00001
bc1t exitcos # end program if number <= 0.00001
j loop # jump to loop
exitcos:
mov.s $f0, $f6 # copy sum into $f0
jr $ra # return