;***************************************
;* Glavni program za sazimanje bloka *
;***************************************
`ORG 0
MOV R13, #5<12 ;0x5000 - stog
MOV R0, #2<12 ;0x2000 - pocetak bloka
MOV R1, #5<8 ;0x500 - rezultantni niz
MOV R2, #%D 40 ;40 poziva potprograma
LOOP BL SAZMI ;pozovi potprogram
ADD R0, R0, #%D 100 ;pomakni izvorni niz za 100 bajtova
ADD R1, R1, #%D 28 ;pomakni odredisni niz za 28 bajtova
SUBs R2, R2, #1 ;smanji brojac
Bne LOOP
HALT
;****************************************
;* Potprogram za sazimanje niza brojeva *
;****************************************
`ORG 100
SAZMI STMfd R13!, {R0, R1, R2, R3, R4} ;push
LDR R2, [R0], #4 ;ucitaj prvi podatak (bazni)
STR R2, [R1], #4 ; i pohrani ga u ciljni niz
MOV R4, #%D 24 ;brojac preostalih podataka
AGAIN LDR R3, [R0], #4 ;ucitaj podatak
SUB R3, R3, R2 ;nadi razliku izmedu podatka i baze
STRb R3, [R1], #1 ;spremi razliku
SUBs R4, R4, #1 ;R4--
Bne AGAIN
LDMfd R13!, {R0, R1, R2, R3, R4} ;pop
MOV PC, LR ;ret
`ORG 2000
DW 50, 52, 5A, 52, 48, 3C, 30, 21, 20, 25, 2F, 34, 40, 43, 4A
DW 50, 52, 5D, 63, 70, 8E, 0A0, 0B0, 0B5, 0A0, 65, 0E2, 78
`END