! !Purpose: !This program tests if the assembler works well in general !Description: !This program prints out an array of random integers !first in a random order and then in a sorted ascending order .section ".text" .align 4 .global sort sort: !#PROLOGUE# 0 save %sp, -136, %sp !#PROLOGUE# 1 st %i0, [%fp+68] st %i1, [%fp+72] st %g0, [%fp-32] ld [%fp+72], %o0 st %o0, [%fp-24] LL3: ld [%fp-24], %o0 cmp %o0, 1 ble LL6 nop ld [%fp-32], %o0 cmp %o0, 1 bne LL5 nop ba LL6 nop LL6: ba LL4 nop LL5: mov 1, %o0 st %o0, [%fp-32] st %g0, [%fp-28] mov 1, %o0 st %o0, [%fp-20] LL7: ld [%fp-20], %o0 ld [%fp-24], %o1 cmp %o0, %o1 bl LL10 nop ba LL8 nop LL10: ld [%fp-20], %o0 mov %o0, %o1 sll %o1, 2, %o0 ld [%fp+68], %o1 add %o0, %o1, %o0 ld [%fp-20], %o1 mov %o1, %o2 sll %o2, 2, %o1 ld [%fp+68], %o3 add %o1, %o3, %o2 mov 1, %o1 ld [%o0], %o0 ld [%o2-4], %o2 cmp %o0, %o2 bl LL11 nop mov 0, %o1 LL11: st %o1, [%fp-28] ld [%fp-28], %o0 cmp %o0, 0 be LL9 nop ld [%fp-20], %o0 mov %o0, %o1 sll %o1, 2, %o0 ld [%fp+68], %o1 add %o0, %o1, %o0 ld [%o0], %o1 st %o1, [%fp-36] ld [%fp-20], %o0 mov %o0, %o1 sll %o1, 2, %o0 ld [%fp+68], %o1 add %o0, %o1, %o0 ld [%fp-20], %o1 mov %o1, %o2 sll %o2, 2, %o1 ld [%fp+68], %o2 add %o1, %o2, %o1 ld [%o1-4], %o2 st %o2, [%o0] ld [%fp-20], %o0 mov %o0, %o1 sll %o1, 2, %o0 ld [%fp+68], %o1 add %o0, %o1, %o0 ld [%fp-36], %o1 st %o1, [%o0-4] st %g0, [%fp-32] LL12: LL9: ld [%fp-20], %o0 add %o0, 1, %o1 st %o1, [%fp-20] ba LL7 nop LL8: ld [%fp-24], %o0 add %o0, -1, %o1 st %o1, [%fp-24] ba LL3 nop LL4: LL2: ret restore %g0, %g0, %g0 .global .rem .align 4 .global RandomizeArray RandomizeArray: !#PROLOGUE# 0 save %sp, -120, %sp !#PROLOGUE# 1 st %i0, [%fp+68] st %i1, [%fp+72] st %g0, [%fp-20] LL14: ld [%fp-20], %o0 ld [%fp+72], %o1 cmp %o0, %o1 bl LL17 nop ba LL15 nop LL17: call rand nop ld [%fp-20], %o1 mov %o1, %o2 sll %o2, 2, %o1 ld [%fp+68], %o2 add %o1, %o2, %l0 mov 100, %o1 call .rem nop st %o0, [%l0] LL16: ld [%fp-20], %o0 add %o0, 1, %o1 st %o1, [%fp-20] ba LL14 nop LL15: LL13: ret restore %g0, %g0, %g0 .section ".data" .align 8 LLC0: .asciz "%02d " .align 8 LLC1: .asciz "\n\n" .section ".text" .align 4 .global PrintArray PrintArray: !#PROLOGUE# 0 save %sp, -120, %sp !#PROLOGUE# 1 st %i0, [%fp+68] st %i1, [%fp+72] st %g0, [%fp-20] LL19: ld [%fp-20], %o0 ld [%fp+72], %o1 cmp %o0, %o1 bl LL22 nop ba LL20 nop LL22: ld [%fp-20], %o0 mov %o0, %o1 sll %o1, 2, %o0 ld [%fp+68], %o2 add %o0, %o2, %o1 sethi %hi(LLC0), %o2 or %o2, %lo(LLC0), %o0 ld [%o1], %o1 call printf nop LL21: ld [%fp-20], %o0 add %o0, 1, %o1 st %o1, [%fp-20] ba LL19 nop LL20: sethi %hi(LLC1), %o1 or %o1, %lo(LLC1), %o0 call printf nop LL18: ret restore %g0, %g0, %g0 .section ".data" .align 8 LLC2: .asciz "Randomly populating the array.\n\n" .align 8 LLC3: .asciz "Printing the unsorted array.\n" .align 8 LLC4: .asciz "Printing the sorted array.\n" .section ".text" .align 4 .global main main: !#PROLOGUE# 0 save %sp, -192, %sp !#PROLOGUE# 1 sethi %hi(LLC2), %o1 or %o1, %lo(LLC2), %o0 call printf nop add %fp, -96, %o1 mov %o1, %o0 mov 20, %o1 call RandomizeArray nop sethi %hi(LLC3), %o1 or %o1, %lo(LLC3), %o0 call printf nop add %fp, -96, %o1 mov %o1, %o0 mov 20, %o1 call PrintArray nop add %fp, -96, %o1 mov %o1, %o0 mov 20, %o1 call sort nop sethi %hi(LLC4), %o1 or %o1, %lo(LLC4), %o0 call printf nop add %fp, -96, %o1 mov %o1, %o0 mov 20, %o1 call PrintArray nop mov 0, %i0 ba LL23 nop LL23: ret restore %g0, %g0, %g0