01 | # Compute first twelve Fibonacci numbers and put in array, then print. |
04 | fibs: . word 0 : 12 # "array" of 12 words to contain fib values |
05 | size : . word 12 # size of "array" |
09 | la $t0, fibs # load address of array |
10 | la $t5, size # load address of size variable |
11 | lw $t5, 0($t5) # load array size |
12 | li $t2, 1 # 1 is first and second Fib. number |
14 | sw $t2, 0($t0) # F[0] = 1 |
15 | sw $t2, 4($t0) # F[1] = F[0] = 1 |
16 | addi $t1, $t5, -2 # Counter for loop , will execute ( size -2) times |
18 | loop : lw $t3, 0($t0) # Get value from array F[n] |
19 | lw $t4, 4($t0) # Get value from array F[n+1] |
20 | add $t2, $t3, $t4 # $t2 = F[n] + F[n+1] |
21 | sw $t2, 8($t0) # Store F[n+2] = F[n] + F[n+1] in array |
22 | addi $t0, $t0, 4 # increment address of Fib. number source |
23 | addi $t1, $t1, -1 # decrement loop counter |
24 | bgtz $t1, loop # repeat if not finished yet. |
25 | la $a0, fibs # first argument for print (array) |
26 | add $a1, $zero, $t5 # second argument for print ( size ) |
27 | jal print # call print routine. |
28 | li $v0, 10 # system call for exit |
29 | syscall # we are out of here. |
32 | ######### Routine to print the numbers on one line. |
35 | space: .asciiz " " # space to insert between numbers |
36 | head: .asciiz "The Fibonacci numbers are:\n" |
40 | add $t0, $zero, $a0 # starting address of array |
41 | add $t1, $zero, $a1 # initialize loop counter to array size |
42 | la $a0, head # load address of print heading |
43 | li $v0, 4 # specify Print String service |
44 | syscall # print heading |
46 | out : lw $a0, 0($t0) # load fibonacci number for syscall |
47 | li $v0, 1 # specify Print Integer service |
48 | syscall # print fibonacci number |
49 | la $a0, space # load address of spacer for syscall |
50 | li $v0, 4 # specify Print String service |
51 | syscall # output string |
52 | addi $t0, $t0, 4 # increment address |
53 | addi $t1, $t1, -1 # decrement loop counter |
54 | bgtz $t1, out # repeat if not finished |
|