.data ; data section output: .ascii "\n Fibonacci number is: \0" len = .- output ; length of ascii output string .text ; code section .globl _fibonacci _fibonacci: li r3, 14 ; put number of loops ( num loops +2 is fib num position ) li r7, 1 ; put 1 into register 7 ( prime loop first fib number ) li r8, 1 ; put 1 into register 8 ( prime loop second fib number ) fib_loop: add r11, r7, r8 ; add the values in registers r7, r8 and store in r11 mr r7, r8 ; move r8's value to r7 ( shift numbers for next loop ) mr r8, r11 ; move r11's value to r8 ( set up for next loop ) subi r3, r3, 1 ; r3-- ( decrement loop counter ) cmpwi r3, 0 ; compare r3 with zero ( are we done with loop? ) bgt fib_loop ; if r3 greater than 0 repeat fib_loop # dump output li r0, 4 ; syscall number ( system write ) li r3, 1 ; first arg stdout lis r4, ha16(output) ; first half of string addi r4, r4, lo16(output) ; second half of string li r5, len ; message length sc ; call kernel # return fib number xor. r3, r3, r3 ; zero out register 3 mr r3, r11 #exit blr ;branch to instruction register ( exit )