; franjo stipanovic ; arh 3 ; atmega128 .include "m128def.inc" .equ adresa = $2000 .equ podaci = 6000 ; prvi element u nizu .equ prvi = -10000 ; granice .equ donja = -1000 .equ gornja = -900 rjmp start trazi: ; ucitajmo broj ld r0, X+ ld r1, X+ ; oduzmi sub r16, r2 sbc r17, r3 brmi trazi_kraj ; donja granica push r0 push r1 sub r0, r18 sbc r1, r19 pop r1 pop r0 brmi trazi ; gornja granica sub r0, r20 sbc r1, r21 breq odgovara brpl trazi odgovara: add r22, r2 adc r23, r3 rjmp trazi trazi_kraj: ret start: ; inicijalizacija stack pointera ; RAMEND -> (highest) end sram address ($10ff) ldi r16, LOW(RAMEND) out SPL, r16 ldi r16, HIGH(RAMEND) out SPH, r16 ; pomocni registri (r2 i r3) za operacije ldi r16, 1 mov r2, r16 clr r3 ; brojevi za zapis, pocnimo od -10000 ldi r30, LOW(prvi) ldi r31, HIGH(prvi) ; broj podataka za zapis, 6000 ldi r16, LOW(podaci) ldi r17, HIGH(podaci) push r16 push r17 ; adresa u X reg ldi r26, LOW(adresa) ldi r27, HIGH(adresa) push r26 push r27 ; donja granica ldi r18, LOW(donja) ldi r19, HIGH(donja) ; gornja granica ldi r20, LOW(gornja) ldi r21, HIGH(gornja) petlja: tst r17 brmi kraj st X+, r30 st X+, r31 ; uvecaj element u nizu adiw r31:r30, 10 ; smanji broj podataka za 1 sub r16, r2 sbc r17, r3 rjmp petlja kraj: ; vratimo adresu u X pop r27 pop r26 ; vratimo broj podataka za zapis pop r17 pop r16 ; pozovimo potprogram rcall trazi nop