Advertisement
Guest User

Untitled

a guest
Jul 1st, 2019
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SPARK 1.56 KB | None | 0 0
  1. .global sortuj              !
  2. .proc 4                 !
  3.                     !
  4. sortuj:                 !
  5.     save %sp, -96, %sp      ! przesuniecie okienka
  6.                     !
  7. sortuj_petla:               ! for(i=n; i>0; --i)
  8.     call min            ! poszukiwanie minimum do zamian (od aktualnego t)
  9.     ld [%i0], %l0           ! pobranie *t , gdzie t - na poczatku wsakzuje na tab[0]
  10.     swap [%l6], %l0         ! zamiana aktualnego *t z znalezionym minimum
  11.     st %l0, [%i0]           ! zapamietanie *t pod nowym adresem
  12.     subcc %i1, 1,  %i1      ! --i - dec lincznika  
  13.     bg sortuj_petla         !
  14.     inc 4, %i0              ! ++t - nastepny element tablicy (4, bo int), dzieki potokowi instr. sie wykona, a to ze pozniej nie przeszkadza
  15.                             !
  16.     ret                     !
  17.     restore                 ! odtworzenie okienka
  18.                             !
  19.                             !
  20.                             !
  21.                             !
  22.                             !
  23.                             !
  24. min:                        !
  25.     mov %i1, %l3            ! k = i - licznik petli mini
  26.     mov %i0, %l4            ! z = t - adres od ktorego przeszukiwac tablice
  27.     mov %l4, %l6            ! indeks_min - indeks minimum wzgledem tab[i]
  28.     mov %l0, %l5            ! temp = *z - poczatkowe minimum (%l0 == z == tab[i])
  29. min_petla:                  ! for(k=i-1; k>0; --k)
  30.     subcc %l3, 1, %l3       ! --k  ;; bo 1 element obsluzono przed petla
  31.     ble min_koniec          ! czy przeszukano min po wsszystkich elememtach (od i do n-1)
  32.     inc 4, %l4              ! ++z , 4 bo to adres na int ; instrukcja specjalnie wstawiona za skokiem zeby nie tracic czasu na nop
  33.     ld [%l4], %l7           !
  34.     cmp %l5, %l7            ! if(temp > tab[z])
  35.     ble min_petla           !
  36.         nop                 ! nie bylo instrukcji ktora moglaby sie wykonac niezaleznie od skoku
  37.         ld [%l4], %l5       ! temp = tab[z]
  38.         mov %l4, %l6        ! indeks_min
  39.     ba min_petla            !
  40.     nop                     !
  41.                             !
  42. min_koniec:                 ! zakonczenie
  43.     retl                    !
  44.     nop
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement