Програмирање 1/К1 2007
Задаци
Задатак 1
Написати програм на симболичком машинском језику за picoComputer који учитава дужину D низа N која може бити најмање 3 и елементе низа које смешта почевши од адресе 100. Ако се за дужину низа не унесе позитиван број, програм треба да прекине извршавање. Програм, затим, проверава да ли за учитани низ бројева важи да је вредност сваког елемента (изузев првог и другог) једнака збиру вредности претходна два елемента, односно да ли важи N[i] = N[i-1] + N[i-2], i=3..D. Програм треба да испише вредност 1 у случају да учитани низ испуњава задати услов или 0 у случају да не испуњава.
adrA=1
n=2
a=100
i=3
ps=4
ds=5
maxAdrA=6
odgovor=7
ORG 8 ; TODO: Adjust to make room for static data.
in n
mov i,3
bgt i,n,kraj
mov adrA,#a
in (adrA),n
mov maxAdrA,n
add maxAdrA,maxAdrA,adrA
sub maxAdrA,maxAdrA,1
mov ps,adrA
add ds,ps,1
add adrA,ds,1
mov i,adrA
mov odgovor,1
petlja: jsr proveri
add ps,ps,1
add ds,ds,1
add adrA,adrA,1
beq odgovor,0,kraj1
bgt maxAdrA,adrA,petlja
beq maxAdrA,adrA,petlja
kraj1: out odgovor
kraj: stop
proveri: add i, (ps), (ds)
beq i,(adrA),izadji
mov odgovor,0
izadji: rts
Задатак 2
Написати потпрограм на симболичком машинском језику за picoComputer који одређује целобројни количник и остатак приликом дељења два цела броја који су смештени у локацијама A (дељеник) и B (делилац). Потпрограм смешта количник у локацију K а остатак у локацију O. При том, потпрограм не сме да мења садржај локација A и B. Написати програм који најпре учитава два цела броја са тастатуре (најпре дељеник а затим делилац), затим позива описан потпрограм и након тога исписује вредност количника и остатка. Програм треба да извршава претходне кораке све док корисник не унесе вредност 0 за делиоца, када се програм прекида.
a=1
b=2
k=3
o=4
ORG 8 ; TODO: Adjust to make room for static data.
ponavljaj: in a
in b
beq b,0,kraj
jsr deljenje
out k
out o
beq a,a,ponavljaj
kraj:stop
deljenje: div k,a,b
mul o,k,b
sub o,a,o
rts