All pastes #803017 Raw Edit

Someone

public text v1 · immutable
#803017 ·published 2007-11-30 20:41 UTC
rendered paste body
        ; 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