;*************************************** ;* 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