! !Purpose: !This program tests if the assembler works well in general !Description: !This program reads in how many Fibonacci numbers to compute !and then prints out those numbers .section ".data" .align 4 fib_array.3: .word 0 .word 1 .skip 188 .section ".data" .align 8 LLC0: .asciz "Fibonacci(%d) cannot be represented in a 32 bit word\n" .section ".text" .align 4 .global fibonacci fibonacci: !#PROLOGUE# 0 save %sp, -128, %sp !#PROLOGUE# 1 st %i0, [%fp+68] st %g0, [%fp-20] mov 1, %o0 st %o0, [%fp-24] ld [%fp+68], %o0 cmp %o0, 48 ble LL3 nop sethi %hi(LLC0), %o1 or %o1, %lo(LLC0), %o0 ld [%fp+68], %o1 call printf nop mov 1, %o0 call exit nop LL3: nop mov 2, %o0 st %o0, [%fp-28] LL4: ld [%fp-28], %o0 ld [%fp+68], %o1 cmp %o0, %o1 bl LL7 nop ba LL5 nop LL7: sethi %hi(fib_array.3), %o1 or %o1, %lo(fib_array.3), %o0 ld [%fp-28], %o1 mov %o1, %o2 sll %o2, 2, %o1 ld [%fp-20], %o2 ld [%fp-24], %o3 add %o2, %o3, %o2 st %o2, [%o0+%o1] ld [%fp-24], %o0 st %o0, [%fp-20] sethi %hi(fib_array.3), %o1 or %o1, %lo(fib_array.3), %o0 ld [%fp-28], %o1 mov %o1, %o2 sll %o2, 2, %o1 ld [%o0+%o1], %o0 st %o0, [%fp-24] LL6: ld [%fp-28], %o0 add %o0, 1, %o1 st %o1, [%fp-28] ba LL4 nop LL5: sethi %hi(fib_array.3), %o0 or %o0, %lo(fib_array.3), %i0 ba LL2 nop LL2: ret restore %g0, %g0, %g0 .section ".data" .align 8 LLC1: .asciz "Fibonacci(n):, please enter n:\n" .align 8 LLC2: .asciz "%d" .align 8 LLC3: .asciz "Fibonacci (%d) is %u\n" .section ".text" .align 4 .global main main: !#PROLOGUE# 0 save %sp, -128, %sp !#PROLOGUE# 1 sethi %hi(LLC1), %o1 or %o1, %lo(LLC1), %o0 call printf nop add %fp, -20, %o1 sethi %hi(LLC2), %o2 or %o2, %lo(LLC2), %o0 call scanf nop ld [%fp-20], %o0 call fibonacci nop st %o0, [%fp-28] mov 1, %o0 st %o0, [%fp-24] LL9: ld [%fp-24], %o0 ld [%fp-20], %o1 cmp %o0, %o1 ble LL12 nop ba LL10 nop LL12: add %fp, -28, %o0 ld [%o0], %o1 ld [%o1], %o2 add %o1, 4, %o1 st %o1, [%o0] sethi %hi(LLC3), %o1 or %o1, %lo(LLC3), %o0 ld [%fp-24], %o1 call printf nop LL11: ld [%fp-24], %o0 add %o0, 1, %o1 st %o1, [%fp-24] ba LL9 nop LL10: LL8: ret restore %g0, %g0, %g0