rendered paste body// Laboratorijska vjezba 03
// By Igor Kovacic
// 0246002237
// Rjesenje u asembleru
.include "m128def.inc"
//inicijalizacija stoga
ldi r16, LOW(RAMEND)
out spl, r16
ldi r16, HIGH(RAMEND)
out sph, r16
glavni:
ldi r31, $0
ldi r30, $1
ldi r29, $2
ldi r28, $10
// R17:R16 broj 16-bitnih podataka u polju, 6000(10)=1770(16)
ldi r16, 0x70
ldi r17, 0x17
// R19:R18 donja granica, -2000(10)=F830(16)
ldi r18, 0x30
ldi r19, 0xF8
// R21:R20 gornja granica, 4000(10)=0FA0(16)
ldi r20, 0xA0
ldi r21, 0x0F
pocetak:
// postavi X na 0x2000 (X=r27:r26)
ldi r26, 0x00
ldi r27, 0x20
// broj koji se upisuje r25:r24 (kreni od -10000)
ldi r24, 0xF0
ldi r25, 0xD8
// upisi broj i uvecaj X
st X+, r24
st X+, r25
// povecaj broj koji se upisuje za 10
add r24, r28
adc r25, r31
// smanji broj elemenata
sub r16, r30
sbc r17, r30
// izadi ako je popunjeno
cp r17, r31
brne pocetak
cp r16, r31
breq potprogram
potprogram:
ldi r26, 0x00
ldi r27, 0x20
ponovi:
ld r26, X+
ld r27, X+
cp r26, r18
brlt ponovi
cp r27, r20
brge ponovi
cp r27, r19
brlt ponovi
cp r27, r21
brge ponovi
add r22, r30
adc r23, r31
kraj: nop