.global _start ! tablica [3, 6, 4, 5] ! ///////////////////////////////////////////// SET_FIRST: MOV 0, %l7 MOV 16,%l6 ST %l7, [%l6] ! Adres i wartość tab[0] RETL NOP ! ///////////////////////////////////////////// func: ! i0 - adres aktualnej zmiennej save %sp, -96, %sp LD [%i0], %l0 ! wartosc tab[i] -> l0 val tab[i+1] SUB %i0, 4, %l1 ! l1 - adres tab[i-1] -> l1 add tab[i] LD [%l1], %l2 ! wartosc tab[i-1] -> l2 val tab[i] SUB %l0, %l2, %l3 ! l0 - wynik tab[i+1] - tab[i] ADD %i0, 16, %l4 ST %l3, [%l4] ! zapis wyniku do tab[i] RET RESTORE ! ////////////////////////////////////////////// _start: ! %l0 - adres poczatku ! %l2 - aktualny adres w tab[] ! %l3 - adres konca ! %l4 - wartosc wyniku petli mov 0, %l0 mov 4, %l1 mov 4, %l2 mov 16, %l3 for: MOV %l2, %o0 NOP CALL func ADD %l2, 4, %l2 SUBcc %l3, %l2, %l4 Bl koniec nop Ba for nop koniec: CALL SET_FIRST