All pastes #804817 Raw Edit

Untitled

public text v1 · immutable
·published 2007-12-03 20:24 UTC
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

ldi r31, 0
ldi r30, 1
ldi r29, 2
ldi r28, 0x0A

clr r22
clr r23

// 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

// 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

pocetak:
// 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, r31

// izadi ako je popunjeno
tst r17
brne pocetak
tst r16
brne pocetak

call potprogram
nop

// pocetak potprograma
potprogram:
// postavi X na 0x2000
ldi r26, 0x00
ldi r27, 0x20

// R17:R16 broj 16-bitnih podataka u polju, 6000(10)=1770(16) (+1 zbog smanjenja)
ldi r16, 0x71
ldi r17, 0x17

ponovi:
// smanji broj elemenata
ldi r31, $0
sub r16, r30
sbc r17, r31

// ako dodemo do kraja polja
tst r16
brne dalje
tst r17
breq vrati

dalje:
// ucitaj broj i uvecaj adresu X-a
ld r24, X+
ld r25, X+

// usporedi s donjom granicom
cp r25, r19 // visi bitovi
brlt ponovi

// usporedi s gornjom granicom
cp r21, r25
brlt ponovi

// povecaj brojac
ldi r31, $0
add r22, r30
adc r23, r31
jmp ponovi

vrati: ret